Reputation: 1280
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
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