我创建了另一篇文章,但显然我不清楚:Wildfly 14 CDI: WELD-001408 on 3rd part JAR after migration from JBoss 7
我正在将系统从java7迁移到java8,并且从jboss7迁移到wildfly14。 其中一个系统具有几个使用@Inject初始化对象的EJB和类。这是一个旧系统,可以正常运行。
在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中,他们使用带有Weld的较新版本的CDI并添加 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;
}