java - jersey2 Unit testing,HttpServletRequest is null -


ask help?

jersey bug connection: [1]: https://java.net/jira/browse/jersey-2412

the servlet request, response , context not injected class when using test provider (tested jetty , grizzly2). using packages annotation pull application.


have other way?


 public class vmresourcetest extends basetest {        @test       public void testcreatevm() {        string bodydata = loadclasspathdata(class_path+file.separator+"tools"+file.separator+"createvm.json");           response response = target("/tool/cloud/vrm/fm/ghca_vms").queryparam("platform_id", "a22a4b0c3aec49f5916ea8cc01f56e9a")                       .request().header("x-auth-ghca-user-id", "x-auth-ghca-user-id")                       .post(entity.entity(bodydata, mediatype.application_json));           assertequals("200", response.getstatus());       }   }  

    public class basetest extends jerseytest{          public string class_path = "classpath:";          public webtarget target;          public client client;          @override         protected application configure() {           enable(testproperties.log_traffic);           enable(testproperties.dump_entity);           resourceconfig rc = new    resourceconfig().packages("com.ghca.easyview.server.api.resource");           rc.register(springlifecyclelistener.class);           rc.register(requestcontextlistener.class);            rc.property("contextconfiglocation", "classpath:spring/spring-config.xml");           return rc;       }              public string loadclasspathdata(string classfilepath){              file schemacontextfile = null;              string result = "";           try {               schemacontextfile = readschemafile(classfilepath);               bufferedreader br = new bufferedreader(new  filereader(schemacontextfile));             string s = null;               while((s = br.readline())!=null){                  result = result + "\n" +s;               }               br.close();               } catch (ioexception e) {               e.printstacktrace();           }           return result;       }       } 

    @component       @path("tool/cloud/vrm")       public class vmresource extends baseresource{        @autowired       private vmservice vmservice;        @context       public httpservletrequest request;       @context       public httpservletresponse response;         @post       @path("{platform_type}/ghca_vms")       @consumes({mediatype.application_json,mediatype.application_xml})       @produces({mediatype.application_json,mediatype.application_xml})       public response createvm(@pathparam("platform_type") string platformtype,               @queryparam("platform_id") string platformid) {}   

request , response null.

you need configure jerseytest servlet environment. in jerseytest, should have like

@override protected testcontainerfactory gettestcontainerfactory() {     return new grizzlywebtestcontainerfactory(); }  @override protected deploymentcontext configuredeployment() {     resourceconfig config = new resourceconfig(sessionresource.class);     return servletdeploymentcontext.forservlet(                              new servletcontainer(config)).build(); } 

if @ servletdeploymentcontext.forservlet, returns servletdeploymentcontext.builder. if @ javadoc, see familiar looking methods, initparam(...,...), addlistener, etc. building web.xml programmatically. keep chaining methods, build.

with above configuration, no longer need override configure method in jerseytest. add resourceconfig seen above.

see other test examples here

also see related:


Comments

Popular posts from this blog

javascript - AngularJS custom datepicker directive -

javascript - jQuery date picker - Disable dates after the selection from the first date picker -