resteasy-cdi - получение ошибки «Дублировать контекстный параметр инициализации resteasy.injector.factory» - PullRequest
2 голосов
/ 15 августа 2011

Мне нужна функциональность CDI в приложении для отдыха, в котором я использую RESTEASY. Поэтому я следовал инструкции руководства , чтобы настроить модуль resteasy-cdi в моем приложении, которое работает на JBoss AS7.

Но когда я запускаю сервер, я получаю следующую ошибку:

13: 48: 08,631 ОШИБКА [org.apache.catalina.core.StandardContext] (поток службы MSC 1-4) Не удалось запустить контекст [/ MainService] из-за предыдущих ошибок: java.lang.IllegalArgumentException: Дублировать параметр инициализации контекста resteasy.injector.factory

Мой web.xml выглядит следующим образом:

<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
    version="2.5">
    <listener>
        <listener-class>org.jboss.resteasy.plugins.server.servlet.ResteasyBootstrap</listener-class>
    </listener>
    <servlet>
        <servlet-name>Resteasy</servlet-name>
        <servlet-class>org.jboss.resteasy.plugins.server.servlet.HttpServletDispatcher</servlet-class>
    </servlet>
    <context-param>
        <param-name>resteasy.injector.factory</param-name>
        <param-value>org.jboss.resteasy.cdi.CdiInjectorFactory</param-value>
    </context-param>
    <context-param>
        <param-name>resteasy.scan</param-name>
        <param-value>true</param-value>
    </context-param>
    <servlet-mapping>
        <servlet-name>Resteasy</servlet-name>
        <url-pattern>/*</url-pattern>
    </servlet-mapping>
</web-app>

Я пробовал несколько комбинаций параметров и пытался настроить его, как в этой теме , но безуспешно.

Указание javax.ws.rs.core.Application в web.xml и отключение resteasy.scan также не решило проблему.

Мой файл pom.xml имеет следующее содержимое:

<dependency>
    <groupId>org.jboss.resteasy</groupId>
    <artifactId>resteasy-cdi</artifactId>
    <version>2.2.1.GA</version>
</dependency>

Я также пытался тестировать с и без артефакта resteasy-jarxs вместе и с объявлением зависимости, как эта статья .

Я действительно потерян. Есть ли у вас какие-либо идеи? Мне нужен CDI или EJB сейчас, чтобы использовать JPA EntityManager через инъекцию. Я знаю, что могу использовать без него, но я бы предпочел, чтобы я мог изучить интеграцию JTA и функциональность CDI в будущем.

Спасибо.

Ответы [ 3 ]

7 голосов
/ 30 ноября 2011

Проблема в том, что AS7 связывает Resteasy-CDI, и вы также связываете его. Сканер развертывания AS7 забирает и обрабатывает веб-фрагменты из обоих jar-файлов, которые объявляют resteasy.injector.factory , выдавая ошибку «duplicate». У вас есть два варианта: использовать предоставленную версию resteasy (предпочтительно) или удалить предоставленный модуль.

Для первого варианта вы устанавливаете свою зависимость maven как предоставленную и добавляете зависимость от resteasy в своем манифесте. Для запуска на последней версии AS7 (сборка от https://github.com/jbossas/jboss-as) попробуйте изменить конфигурацию так, чтобы она выглядела следующим образом:

<properties>
    <resteasy.version>2.2.3.GA</resteasy.version>
    <maven.war.plugin.version>2.1.1</maven.war.plugin.version>
</properties>

<dependency>
    <groupId>org.jboss.resteasy</groupId>
    <artifactId>resteasy-jaxrs</artifactId>
    <version>${resteasy.version}</version>
    <scope>provided</scope>
</dependency>
<dependency>
    <groupId>org.jboss.resteasy</groupId>
    <artifactId>resteasy-cdi</artifactId>
    <version>${resteasy.version}</version>
    <scope>provided</scope>
</dependency>

И добавьте зависимость от resteasy-cdi в свой манифест, например ::

<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-war-plugin</artifactId>
            <version>${maven.war.plugin.version}</version>
            <configuration>
                <failOnMissingWebXml>false</failOnMissingWebXml>
                <archive>
                    <manifestEntries>
                        <Dependencies>
                            org.jboss.resteasy.resteasy-jaxrs,
                            org.jboss.resteasy.resteasy-cdi
                        </Dependencies>
                    </manifestEntries>
                </archive>
            </configuration>
        </plugin>
    </plugins>
</build>

Загляните в $ JBOSS_HOME / modules / org / jboss / resteasy / ..., чтобы узнать, какая версия resteasy предоставляется вашей версией AS7.

В качестве альтернативы вы можете удалить эти модули из jboss и продолжить связывание своей собственной копии.

См. Примеры разбитой и фиксированной войн, прикрепленных к RESTEASY-586 , для получения более подробной информации.

2 голосов
/ 21 августа 2011

Я столкнулся с той же ошибкой, экспериментировал с версиями jar RestEasy и включением / исключением, и не добился прогресса в ее решении.Поэтому я сообщил об ошибке в трекере проблем RestEasy JBoss (https://issues.jboss.org/browse/RESTEASY-586), которая, я надеюсь, в конечном итоге даст ответ.Я также использую JBoss AS 7 и последнюю версию RestEasy, CDI и Seam.

Мое приложение работало нормально в Glassfish 3.1.1, но не работало (с этой ошибкой «Повторяющийся параметр инициализации контекста resteasy.injector.factory»)когда я переместил его в JBoss AS 7.

0 голосов
/ 20 ноября 2014

Остальной модуль easy-cdi поставляется с J Boss AS начиная с версии 6.0.0 M4. поэтому нет необходимости явно добавлять фабрику CdiInjectorFactory.

<context-param>
<param-name>resteasy.injector.factory</param-name>
<param-value>org.jboss.resteasy.cdi.CdiInjectorFactory</param-value>
</context-param>

Но если вы используете tomcat или любой другой сервер, вам нужно добавить приведенную выше строку кода в web.xml.

...