it-swarm.com.de

Jersey hat die Arbeit mit InjectionManagerFactory eingestellt und wurde nicht gefunden

Ich erhalte die folgende Fehlermeldung beim Ausführen meiner Jersey-API in Tomcat 8.5.11, wodurch meine API beendet wird:

HTTP-Status 500 - Servlet.init () für Servlet Jersey REST Service hat eine Ausnahme ausgelöst

typ Ausnahmebericht

message Servlet.init () für Servlet Jersey REST Service hat eine Ausnahme ausgelöst

beschreibung Auf dem Server ist ein interner Fehler aufgetreten, der die Erfüllung dieser Anforderung verhindert hat.

ausnahme

javax.servlet.ServletException: Servlet.init () für Servlet Jersey REST Service hat die Ausnahme org.Apache.catalina.authenticator.AuthenticatorBase.invoke (AuthenticatorBase.Java:474) org.Apache.catalina.valves ausgelöst. ErrorReportValve.invoke (ErrorReportValve.Java:79) org.Apache.catalina.valves.AbstractAccessLogValve.invoke (AbstractAccessLogValve.Java:624) org.Apache.catalina.connector.CoyoteAdapter.service (CoyoteAdapter. coyote.http11.Http11Processor.service (Http11Processor.Java:783) org.Apache.coyote.AbstractProcessorLight.process (AbstractProcessorLight.Java:66) org.Apache.coyote.AbstractProtocol $ ConnectionHandler.process (AbstractProtocol $ ConnectionHandler.pr Apache.Tomcat.util.net.NioEndpoint $ SocketProcessor.doRun (NioEndpoint.Java:1434) org.Apache.Tomcat.util.net.SocketProcessorBase.run (SocketProcessorBase.Java:49) Java.util.concurrent.ThreadPoolExecutor.r 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)

ursache

Java.lang.IllegalStateException: InjectionManagerFactory nicht gefunden. 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.Avalache.Apache. ErrorReportValve.invoke (ErrorReportValve.Java:79) org.Apache.catalina.valves.AbstractAccessLogValve.invoke (AbstractAccessLogValve.Java:624) org.Apache.catalina.connector.CoyoteAdapter.service (CoyoteAdapter. 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 ) org.Apache.Tomcat.util.threads.TaskThread $ WrappingRunnable.run (TaskThread.Java:61) Java.lang.Thread.run (Thread.Java:745)

Die Anwendung wird mit den folgenden Abhängigkeiten mit Gradle erstellt:

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.+"
    ) }

Dies lädt jersey-common-2.26-b04.jar herunter, das die fehlende Klasse unter /org/glassfish/jersey/internal/inject/InjectionManagerFactory enthält. Die JAR-Datei wird im Tomcat-Ordner unter WEB-INF/lib bereitgestellt.

Was kann hier falsch sein? Das Gradle-Skript hat in den letzten Monaten mit derselben Tomcat-Version funktioniert.

126
gregor

Diese Abhängigkeit hinzufügen:

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

vgl. https://stackoverflow.com/a/44536542/1070215

241
cthiebaud

Jersey 2.26 und neuer sind mit älteren Versionen nicht abwärtskompatibel. Der Grund dafür wurde in den Release Notes angegeben :

Leider mussten in 2.26 inkompatible Änderungen vorgenommen werden. Konkret ist die von Jersey geschützte reaktive Client-API komplett weg und kann nicht mehr unterstützt werden - sie steht im Widerspruch zu dem, was in JAX-RS 2.1 eingeführt wurde (das ist der Preis für Jersey als "spezieller Spielplatz").

Eine weitere größere Änderung im Jersey-Code ist der Versuch, den Jersey-Kern von einem bestimmten Einspritz-Framework unabhängig zu machen. Wie Sie vielleicht jetzt wissen, ist Jersey 2.x (war!) Ziemlich stark von HK2 abhängig, was manchmal zu Problemen führt (insbesondere beim Betrieb mit anderen Injektionsbehältern). Jersey definiert jetzt seine eigene Injektionsfassade , das bei ordnungsgemäßer Implementierung die gesamte interne Jersey-Einspritzung ersetzt.


Derzeit sollte man folgende Abhängigkeiten verwenden:

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

Hier ist der Grund. Ab Jersey 2.26 entfernte Jersey HK2 als harte Abhängigkeit. Es wurde ein SPI als Fassade für den Abhängigkeitsinjektionsanbieter in Form der InjectionManager und InjectionManagerFactory erstellt. Damit Jersey ausgeführt werden kann, ist eine Implementierung von InjectionManagerFactory erforderlich. Es gibt zwei Implementierungen davon, die für HK2 und CDI sind. Die HK2-Abhängigkeit ist der jersey-hk2, von dem andere sprechen.

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

Die CDI-Abhängigkeit ist

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

Diese (jersey-cdi2-se) sollte nur für SE-Umgebungen und nicht für EE-Umgebungen verwendet werden.

Jersey hat diese Änderung vorgenommen, damit andere ihr eigenes Framework für die Abhängigkeitsinjektion bereitstellen können. Sie haben keine Pläne, andere InjectionManagers zu implementieren, obwohl andere Versuche unternommen haben, eine für Guice zu implementieren .

35
Paul Samsotha

Ich habe das gleiche Problem, nach dem Downgrade auf die im März bereitgestellte Version (2.26-b03) ist alles wieder normal, ich hoffe, es hilft

25
Roman Kesler

Wähle den DI, der in Jersey injiziert werden soll:

Frühling 4:

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

Frühling 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>
10
broc.seib

Der einzige Weg, wie ich es lösen konnte, war über:

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>

Also, nur wenn ich jersey-container-servlet und jersey-hk2 hinzufüge, würde es fehlerfrei laufen

2
Johannes Jander

Soweit ich sehen kann, haben sich die Abhängigkeiten zwischen 2.26-b03 und 2.26-b04 geändert (HK2 wurde von compile nach testCompile verschoben). Möglicherweise wurden einige Änderungen an den Trikotabhängigkeiten vorgenommen, die noch nicht abgeschlossen wurden (oder zu denen führten) ein Käfer).

Im Moment ist die einfache Lösung, sich an eine ältere Version zu halten :-)

0