【问题标题】:Initializing Jersey unable to find resources?初始化 Jersey 找不到资源?
【发布时间】:2015-02-27 11:13:05
【问题描述】:

我已从 Jersey 1.7 升级到 2.16,但 Jersey 似乎无法找到我的资源(请参阅下面的堆栈)。有什么想法吗?我尝试在扩展 ResourceConfig 的自定义应用程序类中初始化,但没有运气


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)

我的 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>

【问题讨论】:

  • jersey.config.server.provider.packages
  • 是的,也试过了,但得到了同样的错误
  • 发布MCVE 以获得更好的帮助
  • 我在 Tomcat 8.09 下遇到了同样的异常。我认为这是因为我不使用 Maven,而且我不知道我需要哪些 jar 文件。我一直在使用试错法,一次添加一个 jar 文件,错误发生了变化,这就是我到目前为止所要做的。

标签: jersey jersey-2.0


【解决方案1】:

您可以扩展 Application 类或直接在 web.xml 中提供提供者和资源的列表。

方法一:使用应用程序类

来自球衣文档:

如果你扩展Application类来提供相关的列表 根资源类 (getResources()) 和单例 (getSingletons()),即您的 JAX-RS 应用程序模型,然后您需要 在您的 Web 应用程序 web.xml 部署描述符中注册它 使用带有名称的 Servlet 或 Servlet 过滤器初始化参数 javax.ws.rs.Application [原文]如下

  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>

方法 2:在 web.xml 中配置提供者和资源

来自球衣文档:

如果没有配置属性 要设置和部署的应用程序仅由资源和 存储在特定包中的提供程序,您可以指示泽西岛 扫描这些包并注册任何找到的资源和提供者 自动:

示例 4.12。配置 Jersey 容器 Servlet 或过滤器以使用 包裹扫描

<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>

我的偏好是使用 Application,因为它也可用于设置其他球衣属性。

如果上述设置不起作用,请提供您的应用程序 pom.xml 和 web.xml。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-08
    • 1970-01-01
    • 2014-04-13
    • 1970-01-01
    相关资源
    最近更新 更多