Подтвердить что ты не робот

Джерси перестала работать с InjectionManagerFactory не найдена

Я получаю ниже ошибки при запуске моего API-интерфейса Jersey в Tomcat 8.5.11, из-за чего мой API останавливается:

HTTP Status 500 - Servlet.init() для сервлета Служба REST Джерси исключила исключение

отчет об исключении типа

сообщение Servlet.init() для сервлета Джерси Служба REST исключила

описание Сервер обнаружил внутреннюю ошибку, которая помешала ему выполнить этот запрос.

исключение

javax.servlet.ServletException: Servlet.init() для сервлета. Служба REST Джерси выбрала исключение 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.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.

4b9b3361

Ответ 1

У меня такая же проблема, после перехода на версию, развернутую в марте (2.26-b03), все возвращается в норму, надеюсь, что это поможет

Ответ 2

Добавьте эту зависимость:

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

ср fooobar.com/questions/148556/...

Ответ 3

Джерси 2.26 и новее не имеют обратной совместимости со старыми версиями. Причина этого была указана в примечаниях к выпуску:

К сожалению, в 2.26 возникла необходимость внести обратно несовместимые изменения. Конкретно принадлежащий jersey API-интерфейс реактивного клиента полностью исчез и больше не может поддерживаться - он противоречит тому, что было представлено в JAX-RS 2.1 (что цена на Джерси - "игровая площадка спекуляции").

Еще одно крупное изменение в коде Джерси - попытка сделать ядро Джерси независимым от какой-либо конкретной инфраструктуры инъекций. Как вы могли бы сейчас заметить, Jersey 2.x (был!) Довольно сильно зависит от HK2, что иногда вызывает проблемы (особенно при работе с другими контейнерами для инъекций. Джерси теперь определяет свой собственный фасад для инъекций, который при правильной реализации заменяет все внутренняя инъекция Джерси.


На данный момент следует использовать следующие зависимости:

специалист

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

Ответ 4

Вот причина. Начиная с Джерси 2.26, Джерси удалил HK2 как жесткую зависимость. Он создал SPI как фасад для поставщика внедрения зависимостей в форме InjectionManager и InjectionManagerFactory. Таким образом, чтобы запустить Джерси, нам нужно иметь реализацию InjectionManagerFactory. Есть две реализации этого, которые для HK2 и CDI. Зависимость 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.

Джерси внес это изменение, чтобы позволить другим предоставить собственную структуру внедрения зависимостей. У них нет планов по внедрению каких-либо других InjectionManager, хотя другие пытались реализовать один для Guice.

Ответ 5

Выберите, какой DI должен ввести материал в Джерси:

Spring 4:

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

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

Ответ 6

Снизить версию трикотажа в pom.xml измените тег 2,26-b04 в 2,26-B03

Ответ 7

Единственный способ, которым я мог это решить, - это:

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-servlet и jersey-hk2, он будет работать без ошибок

Ответ 8

У меня та же проблема. Я добавил последнюю зависимость jersey-hk2 и работает как шарм.

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

Ответ 9

Да, это от последней версии с пятницы 19-го мая. Я просто изменил свою версию в Maven на более старую, и теперь она отлично работает.

Ответ 10

Насколько я вижу, зависимости изменились между 2.26-b03 и 2.26-b04 (HK2 был перенесен из компиляции в testCompile)... может быть некоторое изменение в зависимостях Джерси, которые еще не завершены (или которые приводят к ошибке).

Однако сейчас простое решение - придерживаться старой версии: -)

Ответ 11

Вот новая зависимость (август 2017 года)

    <!-- https://mvnrepository.com/artifact/org.glassfish.jersey.core/jersey-common -->
<dependency>
    <groupId>org.glassfish.jersey.core</groupId>
    <artifactId>jersey-common</artifactId>
    <version>2.0-m03</version>
</dependency>