jax rs - NoInitialContextException in CXF Local Transport for testing the JAX-RS -


i following tutorial: https://cwiki.apache.org/confluence/display/cxf20doc/jaxrs+testing

but error:

javax.naming.noinitialcontextexception:need specify class name in environment or system property, or applet parameter, or in application resource file: java.naming.factory.initial

this local server class:

public class cxflocaltransporttestsuite {      public static final logger logger = logmanager.getlogger();      public static final string endpoint_address = "local://service0";         private static server server;      @beforeclass     public static void initialize() throws exception {          startserver();     }      private static void startserver() throws exception {          jaxrsserverfactorybean factory = new jaxrsserverfactorybean();          factory.setaddress(endpoint_address);          list<class<?>> resourceclasses = new arraylist<class<?>>();         resourceclasses.add(communicationwsrestimpl.class);          factory.setresourceclasses(resourceclasses);          list<resourceprovider> resourceproviders = new arraylist<>();         resourceproviders.add(new singletonresourceprovider(new communicationwsrestimpl()));          factory.setresourceproviders(resourceproviders);          list<object> providers = new arraylist<object>();         providers.add(new jacksonjaxbjsonprovider());         providers.add(new apioriginfilter());         providers.add(new authenticationfilter());         providers.add(new authorizationfilter());          factory.setproviders(providers);          server = factory.create();          server.start();          logger.info("local transport started");     }      @afterclass     public static void destroy() throws exception {          server.stop();          server.destroy();          logger.info("local transport stopped");     } } 

and client example:

public class communicationapitest {      // [public profile]     // --------------------------------------------------------------------------------------------------------      @test     public void getlinkedcomponentstest() {          // path. param.         // ********************************************************************************************************         string userid = "1";         string componentinstance = "a3449197-cc72-49eb-bc14-5d43a80dfa80";         string portid = "00";         // ********************************************************************************************************          webclient client = webclient.create(cxflocaltransporttestsuite.endpoint_address);         client.path("/communication/getlinkedcomponents/{userid}-{componentinstance}-{portid}", userid, componentinstance, portid);          client.header("authorization", "bearer " + cxflocaltransporttestsuite.authenticationtokenpublicprofile);          response res = client.get();          if (null != res) {              assertequals(statuscode.successful_operation.getstatuscode(), res.getstatus());              assertnotnull(res.getentity());              // valid response             // ********************************************************************************************************             assertequals("> modules has not been initialized userid = 1", res.readentity(getlinksresult.class).getmessage());             // ********************************************************************************************************         }      } } 

finally, jax-rs implementation on server side:

@path("/communication") public class communicationwsrestimpl implements communicationws {      @path("/getlinkedcomponents/{userid}-{componentinstance}-{portid}")     @get     @produces(mediatype.application_json)     public response getlinkedcomponents(             @headerparam("authorization") string accesstoken,             @pathparam("userid") string userid,             @pathparam("componentinstance") string componentinstance,             @pathparam("portid") string portid) {          logger.info("[communicationwsrest - getlinkscomponents] userid: " + userid + " -- componentinstace: "                 + componentinstance + " -- portid: " + portid);          getlinksresult result = new getlinksresult();         result.setgotten(false);         result.setportlist(null);          if (userid != null && userid.compareto("") != 0) {             if (componentinstance != null && componentinstance.compareto("") != 0) {                 if (portid != null && portid.compareto("") != 0) {                      tmm tmm = null;                     javax.naming.context initialcontext;                      try {                         initialcontext = new initialcontext();                         tmm = (tmm) initialcontext.lookup("java:app/cos/tmm");                          result = tmm.calculateconnectedports(userid, componentinstance, portid);                      } catch (exception e) {                         logger.error(e);                         result.setmessage("> internal server error");                         return response.status(status.internal_server_error).entity(result).build();                     }                 } else {                     logger.error("not found or empty port error");                     result.setmessage("> not found or empty port error");                     return response.status(status.not_found).entity(result).build();                 }             } else {                 logger.error("not found or empty component instance error");                 result.setmessage("> not found or empty component instance error");                 return response.status(status.not_found).entity(result).build();             }         } else {             logger.error("not found or empty userid error");             result.setmessage("> not found or empty username error");             return response.status(status.not_found).entity(result).build();         }         return response.ok(result).build();     } } 

maybe problem local transport not correctly configured launches exception because of lookup (see: server side):

    tmm tmm = null;     javax.naming.context initialcontext;      try {         initialcontext = new initialcontext();         tmm = (tmm) initialcontext.lookup("java:app/cos/tmm");          result = tmm.calculateconnectedports(userid, componentinstance, portid);      } catch (exception e) { 

..

the problem because running test in java se environment not configured jndi server. if run test part of war inside java ee app server, work fine.

so might need either run unit test inside app server or try mocking jndi server described here: http://en.newinstance.it/2009/03/27/mocking-jndi/#

hope helps, andy


Comments

Popular posts from this blog

neo4j - finding mutual friends in a cypher statement starting with three or more persons -

php - How to remove letter in front of the word laravel -

minify - Minimizing css files -