Jersey 停止使用 InjectionManagerFactory 未找到

新手上路,请多包涵

我在 Tomcat 8.5.11 中运行我的 Jersey API 时收到以下错误,这导致我的 API 停止:

HTTP 状态 500 - Servlet Jersey REST 服务的 Servlet.init() 引发异常

类型异常报告

servlet Jersey REST 服务的消息 Servlet.init() 抛出异常

描述 服务器遇到一个内部错误,阻止它完成这个请求。

例外

javax.servlet.ServletException:Servlet Jersey REST 服务的 Servlet.init() 抛出异常 org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:474) org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve. java:79) org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:624) org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:349) org.apache.coyote.http11.Http11Processor。服务(Http11Processor.java:783)org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66)org.apache.coyote.AbstractProtocol\(ConnectionHandler.process(AbstractProtocol.java:798)org.apache.tomcat.util。 net.NioEndpoint\)SocketProcessor.doRun(NioEndpoint.java:1434) org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49) java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) java.util.concurrent.ThreadPoolExecutor\(Worker.run(ThreadPoolExecutor.java:617) org.apa che.tomcat.util.threads.TaskThread\)WrappingRunnable.run(TaskThread.java:61) java.lang.Thread.run(Thread.java:745)

根本原因

java.lang.IllegalStateException:找不到 InjectionManagerFactory。 org.glassfish.jersey.internal.inject.Injections.lookupInjectionManagerFactory(Injections.java:97) org.glassfish.jersey.internal.inject.Injections.createInjectionManager(Injections.java:89) org.glassfish.jersey.server.ApplicationHandler。 (ApplicationHandler.java:282) org.glassfish.jersey.servlet.WebComponent.(WebComponent.java:335) org.glassfish.jersey.servlet.ServletContainer.init(ServletContainer.java:178) org.glassfish.jersey.servlet。 ServletContainer.init(ServletContainer.java:370) javax.servlet.GenericServlet.init(GenericServlet.java:158) org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:474) org.apache.catalina.valves。 ErrorReportValve.invoke(ErrorReportValve.java:79) org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:624) org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:349) org.apache。 coyote.http11.Http11Processor.service(Http11Processor.java:783) org.apache.coyote.AbstractProcessorLight.process (AbstractProcessorLight.java:66) org.apache.coyote.AbstractProtocol\(ConnectionHandler.process(AbstractProtocol.java:798) org.apache.tomcat.util.net.NioEndpoint\)SocketProcessor.doRun(NioEndpoint.java:1434) org.apache .tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49) java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) java.util.concurrent.ThreadPoolExecutor\(Worker.run(ThreadPoolExecutor.java:617 ) org.apache.tomcat.util.threads.TaskThread\)WrappingRunnable.run(TaskThread.java:61) java.lang.Thread.run(Thread.java:745)

该应用程序是使用 gradle 构建的,具有以下依赖项:

 dependencies {
    compile (
        // REST
        "org.glassfish.jersey.containers:jersey-container-servlet:2.+",
        "javax.servlet:javax.servlet-api:4.+",
        // REST Token
        "org.bitbucket.b_c:jose4j:0.+",
        // MongoDB
        "org.hibernate.ogm:hibernate-ogm-bom:5.+",
        "org.hibernate.ogm:hibernate-ogm-infinispan:5.+",
        "org.hibernate.javax.persistence:hibernate-jpa-2.1-api:1.+",
        "org.jboss.spec.javax.transaction:jboss-transaction-api_1.2_spec:1.+",
        "org.jboss.narayana.jta:narayana-jta:5.+",
        "org.jboss:jboss-transaction-spi:7.+",
        "log4j:log4j:1.+",
        "org.hibernate.ogm:hibernate-ogm-mongodb:5.+",
        "org.bouncycastle:bcprov-jdk15on:1.+"
    ) }

此下载 jersey-common-2.26-b04.jar 包含 /org/glassfish/jersey/internal/inject/InjectionManagerFactory 下的缺失类。 jar文件部署到Tomcat文件夹下 WEB-INF/lib

这里有什么问题? gradle 脚本在过去几个月使用相同的 Tomcat 版本工作。

原文由 gregor 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 776
1 个回答

添加此依赖项:

 <dependency>
    <groupId>org.glassfish.jersey.inject</groupId>
    <artifactId>jersey-hk2</artifactId>
    <version>2.28</version>
</dependency>

比照。 https://stackoverflow.com/a/44536542/1070215

确保不要混合你的 Jersey 依赖版本。这个答案说版本“2.28”,但使用其他 Jersey 依赖版本的任何版本。

原文由 cthiebaud 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题