WELD-001408 даже с bean-discovery-mode = "all - PullRequest
0 голосов
/ 03 мая 2019

Я создал еще один пост, но, видимо, я не понял: Wildfly 14 CDI: WELD-001408 на 3-й части JAR после миграции с JBoss 7

Я мигрирую систему из java7 в java8 и из jboss7 в wildfly14. Одна из систем имеет несколько EJB и классов, которые используют @Inject для инициализации объектов. Это старая система, и она отлично работает.

После выполнения развертывания в Wildfly 14 я получил несколько ошибок, подобных этой:

org.jboss.weld.exceptions.DeploymentException: WELD-001408: Unsatisfied dependencies for type InterfaceZaakIdentificatieGenerator with qualifiers @Default
  at injection point [BackedAnnotatedField] @Inject private nl.interaccess.zakenmagazijn.converter.impl.ZaakCreatieToEntityConverter.zaakIdentificatieGenerator
  at nl.interaccess.zakenmagazijn.converter.impl.ZaakCreatieToEntityConverter.zaakIdentificatieGenerator(ZaakCreatieToEntityConverter.java:0)

После исследования я увидел, что это очень распространенная ошибка, и это происходит потому, что в Wildfly они используют более новую версию CDI с Weld и добавлением bean-discovery-mode = "all" решает проблему , но в моем случае даже после добавления этого в файл это все еще дает мне эту ошибку.

Это мой beans.xml (находится по адресу /project-war/src/main/webapp/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"
       version="1.1" bean-discovery-mode="all">
    <interceptors>
        <class>nl.interaccess.zakenmagazijn.manager.WsdlFaultAdvice</class>
        <class>nl.interaccess.zakenmagazijn.profiler.ZakenmagazijnProfilerImpl</class>
        <class>nl.interaccess.zakenmagazijn.profiler.ZTCProfilerImpl</class>
    </interceptors>
</beans>

Важно: Как я уже сказал, система отлично работает на JBoss7, так что это не неправильная аннотация или какая-либо другая ошибка в коде, она должна быть связана с конфигурацией.

Добавление дополнительной информации для более конкретного примера:

Интерфейс:

package nl.interaccess.zakenmagazijn.ztc;

public interface InterfaceZtcKermZaken {    
    GetZoekKenmschermZTCPlusAntwoord getZaken(GetZoekKenmschermZTCPlusZoeken request);
}

Реализация:

package nl.interaccess.zakenmagazijn.ztc;

@LocalBean
@Stateless(name = "ZtcKermZakenImpl")
@TransactionTimeout(value = 5, unit = TimeUnit.MINUTES)
@Perf4jZTCProfiler
public class ZtcKermZakenImpl extends ZTCQueryUtils implements InterfaceZtcKermZaken {

    @Override
    public GetZoekKenmschermZTCPlusAntwoord getZaken(GetZoekKenmschermZTCPlusZoeken request) {
        //Implementation
    }

}

Место, где я получаю сообщение об ошибке при попытке ввести:

package nl.interaccess.zakenmagazijn.manager;

@LocalBean
@Stateless(name = "ZakenmagazijnManager")
@WsdlFaultAdviceBinding
@Perf4jZakenmagazijnProfiler
public class ZakenmagazijnManagerImpl implements ZakenPortType {

    @Inject
    private InterfaceZtcKermZaken ztcKerm;

}
...