web-dev-qa-db-ja.com

JerseyはInjectionManagerFactoryで作業を停止しましたが見つけません

Tomcat 8.5.11でJersey APIを実行中に以下のエラーが表示され、APIが停止します。

HTTPステータス500 - サーブレットJerseyのServlet.init()RESTサービスが例外をスローしました

タイプ例外レポート

サーブレットJerseyのメッセージServlet.init()RESTサービスが例外をスローしました

説明サーバーで内部エラーが発生したため、この要求を実行できませんでした。

例外

javax.servlet.ServletException:サーブレットのServlet.init()Jersey REST Serviceが例外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:79) 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)o rg.Apache.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.Injection.lookupInjectionManagerFactory(Injection.Java:97)org.glassfish.jersey.internal.inject.Injection.createInjectionManager(Injection.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) 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ファイルはWEB-INF/libの下のTomcatフォルダーにデプロイされます。

ここで何が間違っている可能性がありますか? gradleスクリプトは、同じTomcatバージョンで、ここ数カ月間働きました。

111
gregor

私は同じ問題を抱えています、3月に展開されたバージョン(2.26-b03)にダウングレードした後、すべてが正常に戻ったので、それが助けになることを願っています

26
Roman Kesler

この依存関係を追加してください。

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

比較 https://stackoverflow.com/a/44536542/1070215

211
cthiebaud

Jersey 2.26以降には、古いバージョンとの下位互換性がありません。その背後にある理由は リリースノート で述べられています:

残念ながら、2.26では後方互換性のない変更を行う必要がありました。具体的には、ジャージ独自のリアクティブクライアントAPIは完全に削除され、サポートされなくなりました-JAX-RS 2.1で導入されたものと競合します(ジャージーの価格は「仕様の遊び場」です)。

Jerseyコードのもう1つの大きな変更は、特定のインジェクションフレームワークからJerseyコアを独立させる試みです。ご存知のように、Jersey 2.xはHK2に非常に密接に依存しているため、問題が発生することがあります(特に、他の注入コンテナーで実行する場合。Jerseyは独自の注入ファサードを定義します) 。適切に実装すると、すべての内部Jersey注入が置き換えられます。


今のところ、次の依存関係を使用する必要があります。

Maven

<dependency>
    <groupId>org.glassfish.jersey.core</groupId>
    <artifactId>jersey-common</artifactId>
    <version>2.26</version>
</dependency>

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

Gradle

compile 'org.glassfish.jersey.core:jersey-common:2.26'
compile 'org.glassfish.jersey.inject:jersey-hk2:2.26'
113
wypieprz

これが理由です。 Jersey 2.26以降、JerseyはHK2を hard 依存関係として削除しました。依存性注入プロバイダのファサードとして、SPIをInjectionManagerおよびInjectionManagerFactoryの形式で作成しました。したがって、Jerseyを実行するには、InjectionManagerFactoryの実装が必要です。これには HK2とCDI の2つの実装があります。HK2の依存関係は他の人が話しているjersey-hk2です。

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

CDIの依存関係は

<dependency>
    <groupId>org.glassfish.jersey.inject</groupId>
    <artifactId>jersey-cdi2-se</artifactId>
    <version>2.26</version>
</dependency>

これ(jersey-cdi2-se)はSE環境にのみ使用し、EE環境には使用しないでください。

Jerseyは、他の人が独自の依存性注入フレームワークを提供できるようにするためにこの変更を行いました。他の人が Guice のためのものを実装しようとする試みをしています)をしていますが、彼らは他のどの_ InjectionManagersも実装する予定はありません。

32
Paul Samsotha

ジャージーにものを注入するためにどのDIを選ぶか:

春4:

<dependency>
  <groupId>org.glassfish.jersey.ext</groupId>
  <artifactId>jersey-spring4</artifactId>
</dependency>

春3:

<dependency>
  <groupId>org.glassfish.jersey.ext</groupId>
  <artifactId>jersey-spring3</artifactId>
</dependency>

HK2:

<dependency>
    <groupId>org.glassfish.jersey.inject</groupId>
    <artifactId>jersey-hk2</artifactId>
</dependency>
9
broc.seib

それを解決できる唯一の方法は次の通りです。

org.glassfish.jersey.core jersey-server $ {jersey-2-version}

<dependency>
    <groupId>org.glassfish.jersey.containers</groupId>
    <artifactId>jersey-container-servlet</artifactId>
    <version>${jersey-2-version}</version>
</dependency>

<dependency>
    <groupId>org.glassfish.jersey.inject</groupId>
    <artifactId>jersey-hk2</artifactId>
    <version>${jersey-2-version}</version>
</dependency>

<!-- https://mvnrepository.com/artifact/org.glassfish.jersey.core/jersey-common -->
<dependency>
    <groupId>org.glassfish.jersey.core</groupId>
    <artifactId>jersey-common</artifactId>
    <version>${jersey-2-version}</version>
</dependency>

<dependency>
    <groupId>org.glassfish.jersey.containers</groupId>
    <artifactId>jersey-container-servlet-core</artifactId>
    <version>${jersey-2-version}</version>
</dependency>

そのため、jersey-container-servletjersey-hk2を追加した場合にのみ、エラーなく実行されます。

2
Johannes Jander

私の知る限りでは、依存関係が2.26-b03と2.26-b04の間で変更された(HK2はコンパイルからtestCompileに移動されました)...まだ完成していない(またはそれにつながる)ジャージ依存関係に何らかの変更があるかもしれません。バグ).

しかし、今のところ単純な解決策は古いバージョンに固執することです:-)

0