我们正在将一些用Java 5、6和7编写的旧系统迁移到Java 8,并从JBoss 7迁移到Wildfly 14。 迁移之后,我总是会遇到这种错误:
WELD-001408: Unsatisfied dependencies for type InterfaceTypeConverterProvider with qualifiers @Named
我了解从CDI 1.2开始,事情发生了变化,@ Inject无法像以前那样工作,因此需要进行一些重构。 我遇到了很多这样的错误,其中一些是我自己项目中的类,试图将其他类也可以插入到我的项目中,这些我可以修复。
问题是:我的项目加载了一些试图从外部注入其他类的类,这些类是jar依赖项,我无法对其进行控制,而且我无法更改这些jar上的代码。
例如:
11:15:54,552 ERROR [org.jboss.msc.service.fail] (MSC service thread 1-1) MSC000001: Failed to start service jboss.deployment.unit."myApp-war-9.2-JAVA8-SNAPSHOT.war".WeldStartService: org.jboss.msc.service.StartException in service jboss.deployment.unit."myApp-war-9.2-JAVA8-SNAPSHOT.war".WeldStartService: Failed to start service at org.jboss.msc.service.ServiceControllerImpl$StartTask.execute(ServiceControllerImpl.java:1728)
at org.jboss.msc.service.ServiceControllerImpl$ControllerTask.run(ServiceControllerImpl.java:1556)
at org.jboss.threads.ContextClassLoaderSavingRunnable.run(ContextClassLoaderSavingRunnable.java:35)
at org.jboss.threads.EnhancedQueueExecutor.safeRun(EnhancedQueueExecutor.java:1985)
at org.jboss.threads.EnhancedQueueExecutor$ThreadBody.doRunTask(EnhancedQueueExecutor.java:1487)
at org.jboss.threads.EnhancedQueueExecutor$ThreadBody.run(EnhancedQueueExecutor.java:1378)
at java.lang.Thread.run(Thread.java:748)
Caused by: org.jboss.weld.exceptions.DeploymentException: Exception List with 46 exceptions:
Exception 0 :
org.jboss.weld.exceptions.DeploymentException: WELD-001408: Unsatisfied dependencies for type InterfaceTypeConverterProvider with qualifiers @Named
at injection point [BackedAnnotatedParameter] Parameter 1 of [BackedAnnotatedMethod] @Inject public thirdPartJar.converter.context.AbstractConverter.setTypeConverterProvider(@Named InterfaceTypeConverterProvider)
at thirdPartJar.converter.context.AbstractConverter.setTypeConverterProvider(AbstractConverter.java:0)
WELD-001475: The following beans match by type, but none have matching qualifiers:
- Managed Bean [class thirdPartJar.converter.context.TypeConverterProvider] with qualifiers [@Any @Default]
该错误在类 thirdPartJar.converter.context.AbstractConverter 中显示了问题,我无法触及该代码...所以,我该怎么办? 是否可以降级Wildfly Weld或强制其使用旧版本的CDI?
这是我的bean.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.2" bean-discovery-mode="all">
</beans>
答案 0 :(得分:1)
beans.xml
始终仅适用于其所在的存档(无论是jar还是war)。因此,您仅将bean-discovery-mode
设置为自己的存档,而不是第三方的存档。
最简单的选择:重新包装第三方罐子,并放入配件beans.xml
。
非侵入式选项:写一个提供期望的bean的生产者。通常,这可以是一种简单的方法:
@Produces
@Named
public InterfaceTypeConverterProvider createInterfaceTypeConverterProvider() {
return new InterfaceTypeConverterProvider();
}
我认为班上没有打针。否则,它应该已经启用了cdi。