KlsLondon
KlsLondon

Reputation: 1280

Initializing Jersey unable to find resources?

I've upgraded from Jersey 1.7 to 2.16 and it seems like Jersey is unable to find my resources (see stack below). Any ideas what's going on? I've tried initializing inside custom Application class that extends ResourceConfig but with no luck


2015-02-27 10:48:58,276  WARN main [AbstractLifeCycle]- FAILED Resources: java.lang.NullPointerException
java.lang.NullPointerException
    at org.glassfish.jersey.server.internal.routing.RuntimeModelBuilder.createInflector(RuntimeModelBuilder.java:128)
    at org.glassfish.jersey.server.internal.routing.RuntimeModelBuilder.createMethodRouter(RuntimeModelBuilder.java:115)
    at org.glassfish.jersey.server.internal.routing.RuntimeModelBuilder.createResourceMethodRouters(RuntimeModelBuilder.java:309)
    at org.glassfish.jersey.server.internal.routing.RuntimeModelBuilder.buildModel(RuntimeModelBuilder.java:173)
    at org.glassfish.jersey.server.internal.routing.Routing$Builder.buildStage(Routing.java:196)
    at org.glassfish.jersey.server.ApplicationHandler.initialize(ApplicationHandler.java:532)
    at org.glassfish.jersey.server.ApplicationHandler.access$500(ApplicationHandler.java:166)
    at org.glassfish.jersey.server.ApplicationHandler$3.run(ApplicationHandler.java:327)
    at org.glassfish.jersey.internal.Errors$2.call(Errors.java:289)
    at org.glassfish.jersey.internal.Errors$2.call(Errors.java:286)
    at org.glassfish.jersey.internal.Errors.process(Errors.java:315)
    at org.glassfish.jersey.internal.Errors.process(Errors.java:297)
    at org.glassfish.jersey.internal.Errors.processWithException(Errors.java:286)
    at org.glassfish.jersey.server.ApplicationHandler.(ApplicationHandler.java:324)
    at org.glassfish.jersey.servlet.WebComponent.(WebComponent.java:336)
    at org.glassfish.jersey.servlet.ServletContainer.init(ServletContainer.java:170)
    at org.glassfish.jersey.servlet.ServletContainer.init(ServletContainer.java:388)
    at org.eclipse.jetty.servlet.FilterHolder.doStart(FilterHolder.java:107)
    at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:64)
    at org.eclipse.jetty.servlet.ServletHandler.initialize(ServletHandler.java:716)
    at org.eclipse.jetty.servlet.ServletContextHandler.startContext(ServletContextHandler.java:254)
    at org.eclipse.jetty.webapp.WebAppContext.startContext(WebAppContext.java:1238)
    at org.eclipse.jetty.server.handler.ContextHandler.doStart(ContextHandler.java:683)
    at org.eclipse.jetty.webapp.WebAppContext.doStart(WebAppContext.java:480)
    at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:64)
    at org.eclipse.jetty.server.handler.HandlerWrapper.doStart(HandlerWrapper.java:95)
    at org.eclipse.jetty.server.Server.doStart(Server.java:275)
    at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:64)
    at test.infrastructure.ApplicationHttpServer.start(ApplicationHttpServer.java:50)
    at test.infrastructure.ApplicationHttpServer.start(ApplicationHttpServer.java:33)
    at test.infrastructure.RunJetty.start(RunJetty.java:18)
    at test.infrastructure.RunJetty.main(RunJetty.java:10)

My web.xml

<filter>
        <filter-name>Resources</filter-name>
        <filter-class>org.glassfish.jersey.servlet.ServletContainer</filter-class>
        <init-param>
            <param-name>org.glassfish.jersey.config.server.provider.packages</param-name>
            <param-value>app.web.rest</param-value>
        </init-param>
</filter>

Upvotes: 3

Views: 5653

Answers (1)

pawinder gupta
pawinder gupta

Reputation: 1265

You can either extend the Application class or provide the list of providers and resources directly in web.xml.

Approach 1: Using Application class

From jersey documentation:

If you extend the Application class to provide the list of relevant root resource classes (getResources()) and singletons (getSingletons()), i.e. your JAX-RS application model, you then need to register it in your web application web.xml deployment descriptor using a Servlet or Servlet filter initialization parameter with a name of javax.ws.rs.Application [sic] as follows

  Example 4.11.  Configuring Jersey container Servlet or Filter to use custom Application subclass      
   <init-param>
        <param-name>javax.ws.rs.Application</param-name>
        <param-value>org.foo.MyApplication</param-value>  
  </init-param>

Approach 2: Providers and resources config in web.xml

From jersey documentation:

If there is no configuration properties to be set and deployed application consists only from resources and providers stored in particular packages, you can instruct Jersey to scan these packages and register any found resources and providers automatically:

Example 4.12. Configuring Jersey container Servlet or Filter to use package scanning

<init-param>
    <param-name>jersey.config.server.provider.packages</param-name>
    <param-value>
        org.foo.myresources,org.bar.otherresources
    </param-value>
</init-param>
<init-param>
    <param-name>jersey.config.server.provider.scanning.recursive</param-name>
    <param-value>false</param-value>
</init-param>

My preference is using Application as it can be used to set other jersey properties as well.

If the above setting does not work, please provide your apps pom.xml and web.xml.

Upvotes: 1

Related Questions