Получение WELD Исключение при запуске сервера weblogic, где используется Google Guice для DI в приложении на основе Джерси - PullRequest
0 голосов
/ 24 января 2019

Я использую Weblogic 12b в качестве сервера приложений.Мое приложение использует Jersey 2.5.1 с Guice3 в моем проекте.У меня есть класс под названием Application, полученный из org.glassfish.jersey.server.ResourceConfig.При запуске сервера я получаю сообщение об ошибке, как показано ниже:

Caused By: org.jboss.weld.exceptions.DeploymentException: WELD-001408: Unsatisfied dependencies for type ServiceLocator with qualifiers @Default
  at injection point [BackedAnnotatedParameter] Parameter 1 of [BackedAnnotatedConstructor] @Inject public Application(ServiceLocator)
  at Application.<init>(Application.java:22)

        at org.jboss.weld.bootstrap.Validator.validateInjectionPointForDeploymentProblems(Validator.java:359)
        at org.jboss.weld.bootstrap.Validator.validateInjectionPoint(Validator.java:281)
        at org.jboss.weld.bootstrap.Validator.validateProducer(Validator.java:417)
        at org.jboss.weld.injection.producer.InjectionTargetService.validateProducer(InjectionTargetService.java:36)
        at org.jboss.weld.manager.InjectionTargetFactoryImpl.validate(InjectionTargetFactoryImpl.java:135)

Похоже, что вместо слова Google Guice for DI он использует WELD.

Та же проблема, с которой я сталкиваюсь на бизнес-уровне, когда EJB-классы состоят из Java-классов и вводятся с помощью @ Inject.

Я даже пытался изменить его импорт @Inject на google inject, ноисключение изменилось, но не было решено.

Я пытался использовать beans.xml в web-inf

@ApplicationPath("/")
public class Application extends ResourceConfig {

    @Inject
    public Application(final ServiceLocator serviceLocator) {
    }
}

1 Ответ

0 голосов
/ 30 января 2019

Вам необходимо эффективно отключить CDI.

Это можно сделать, добавив в приложение файл WEB-INF / beans.xml, содержащий:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://xmlns.jcp.org/xml/ns/javaee"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/beans_1_1.xsd"
       bean-discovery-mode="none">
</beans>

Обратите внимание на bean-discovery-mode="none".

Если ваш проект содержит дополнительные файлы jar с классами, которые могут выглядеть как компоненты CDI, вам также необходимо добавить к ним аналогичный файл META-INF / beans.xml.

Однако я подозреваю, что это может привести к другим не связанным с этим проблемам. Обычно серверы приложений любят управлять жизненным циклом ваших классов, включая те, которые связаны с JAX-RS.

...