WELD-001408: неудовлетворенные зависимости для типа в GlassFish + Jersey 2 - PullRequest
0 голосов
/ 01 апреля 2019

Я пытаюсь внедрить класс в мое приложение JAX-RS на Джерси, используя HK2, работающий на GlassFish.

Но когда я пытаюсь запустить свое приложение, я получаю эту ошибку:

com.sun.enterprise.admin.remote.RemoteFailureException: ошибка произошла во время развертывания: исключение при загрузке приложения: java.lang.IllegalStateException: ContainerBase.addChild: start: org.apache.catalina.LifecycleException: org.apache.catalinaИсключение(UsersDAO)

Поиск в Интернете Я обнаружил, что CDI в GlassFish «конкурирует» с HK2 за DI, поэтому, чтобы исправить это, я должен добавить этот jarна мой путь к классу (я использую Gradle):

implementation ("org.glassfish.jersey.containers.glassfish:jersey-gf-cdi:2.14")

Но это не работает, это просто дает мнееще одна загадочная ошибка:

java.io.IOException: com.sun.enterprise.admin.remote.RemoteFailureException: во время развертывания возникла ошибка: исключение при загрузке приложения: сбой развертывания CDI: WELD-001409:Неоднозначные зависимости для типа WebAppExceptionHolder с квалификаторами @Default в точке внедрения [UnbackedAnnotatedField] @Inject org.glassfish.jersey.gf.cdi.internal.WebAppExceptionInterceptor.store в org.glassfish.jersey.gf.cdi.internal.WinterAppExEx.Exception.in.java: 0) Возможные зависимости: - org.glassfish.jersey.ext.cdi1x.internal.CdiComponentProvider$Hk2Bean@60e01611, - Управляемый компонент [класс org.glassfish.jersey.gf.cdi.internal.WebAppExceptionHolder] с квалификаторами @Любая @Default].Пожалуйста, смотрите server.log для получения более подробной информации.

Вот моя AbstractBinder реализация:

public class UsersDependencyBinder extends AbstractBinder {    
    private static final Logger LOG = LoggerFactory.getLogger(UsersDependencyBinder.class);

    @Override
    protected void configure() {
        try {
            // Acts as a Singleton
            bind(new UsersDAO(new CachedDbConnector()));
        } catch (ClassNotFoundException e) {
            LOG.error("Error registering the DB Driver Manager", e);
        }
    }
}

И я регистрирую его, используя register(new UsersDependencyBinder());.

Iя не использую web.xml, я хочу быть чистым от *.xml, используя только аннотации.

...