WELD-001408:带有限定符@Default的类型Validator的不满意依赖项

时间:2015-05-11 16:32:10

标签: java migration cdi upgrade wildfly

我已经回顾了关于SO的其他相关问题,但没有找到我的问题的答案。

我正在从JBoss AS 7.11升级到Wildfly 8.2,并遇到了人们称之为“臭名昭着的WELD-001408”问题。但是,我的情况似乎有所不同,因为据我所知,我们没有使用任何@Inject注释或任何可能导致验证错误的内容。

下面的堆栈跟踪似乎表明该异常是由焊接验证器本身和限定符@Default引起的。这对任何人都有意义吗?

我强调我的应用程序中既没有@Inject也没有@Default注释。所以,例外是神秘的。

有人能指出我正确的方向让我的应用程序在Wildfly 8.2中启动并运行吗?

如果需要任何其他信息,请询问,如果可能,我会提供。

感谢!!!

编辑[2015年5月12日]:

我想知道它是否与hibernate验证器有关?

来自pom.xml:

<dependency>
  <groupId>org.hibernate</groupId>
  <artifactId>hibernate-validator</artifactId>
  <version>5.1.3.Final</version>
  <scope>runtime</scope>
</dependency>

我是否正确使用了hibernate验证器?是否需要提供一些配置?是否有其他验证器可以替代使用?

来自wildfly启动的堆栈跟踪:

11:21:57,196 ERROR [org.jboss.msc.service.fail] (MSC service thread 1-4) MSC000001: Failed to start service jboss.deployment.unit."search.war".WeldStartService: org.jboss.msc.service.StartException in service jboss.deployment.unit."search.war".WeldStartService: Failed to start service
        at org.jboss.msc.service.ServiceControllerImpl$StartTask.run(ServiceControllerImpl.java:1904) [jboss-msc-1.2.2.Final.jar:1.2.2.Final]
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) [rt.jar:1.7.0_21]
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) [rt.jar:1.7.0_21]
        at java.lang.Thread.run(Thread.java:722) [rt.jar:1.7.0_21]

Caused by: org.jboss.weld.exceptions.DeploymentException: WELD-001408: 

** Unsatisfied dependencies for type Validator with qualifiers @Default
  at injection point [UnbackedAnnotatedField] @Inject private **
org.hibernate.validator.internal.cdi.interceptor.ValidationInterceptor.validator
  at org.hibernate.validator.internal.cdi.interceptor.ValidationInterceptor.validator(ValidationInterceptor.java:0)
WELD-001475: The following beans match by type, but none have matching qualifiers:
  - ValidatorBean [id=org.hibernate.validator.internal.cdi.ValidatorBean_hv]

        at org.jboss.weld.bootstrap.Validator.validateInjectionPointForDeploymentProblems(Validator.java:372)
        at org.jboss.weld.bootstrap.Validator.validateInjectionPoint(Validator.java:293)
        at org.jboss.weld.bootstrap.Validator.validateInterceptor(Validator.java:569)
        at org.jboss.weld.bootstrap.ConcurrentValidator$2.doWork(ConcurrentValidator.java:85)
        at org.jboss.weld.bootstrap.ConcurrentValidator$2.doWork(ConcurrentValidator.java:83)
        at org.jboss.weld.executor.IterativeWorkerTaskFactory$1.call(IterativeWorkerTaskFactory.java:60)
        at org.jboss.weld.executor.IterativeWorkerTaskFactory$1.call(IterativeWorkerTaskFactory.java:53)
        at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:334) [rt.jar:1.7.0_21]
        at java.util.concurrent.FutureTask.run(FutureTask.java:166) [rt.jar:1.7.0_21]
        ... 3 more

2 个答案:

答案 0 :(得分:1)

从JBoss EAP 6.2迁移后,我在Wildfly 9上遇到了完全相同的问题!和解决方法形式 https://issues.jboss.org/browse/WFLY-2708帮助了我。 因此,在 weld 子系统配置的活动standalone.xml文件中:

<subsystem xmlns="urn:jboss:domain:weld:2.0"/>

添加属性 require-bean-descriptor =&#34; true&#34; ,它将如下所示:

<subsystem xmlns="urn:jboss:domain:weld:2.0" require-bean-descriptor="true"/>

答案 1 :(得分:1)

抱歉(我知道您正在使用JBoss或Wildfly),但我只是为使用Liberty或Websphere服务器的用户添加了这个答案,因为相同的消息&#34; WELD-001408: Unsatisfied dependencies for type Validator with qualifiers @Default&# 34;也出现在这些服务器中。

无论如何,问题描述可以帮助您解决JBoss中的问题

问题描述

  

如果您的应用程序包含Validator.class类   (包括在内部jar文件中)Liberty可能会感到困惑   在应用程序的类文件和类之间   安装在自由内部的文件导致了   WELD-001408:类型Validator的不满意依赖项   限定符@Default例外。

我遇到了你的问题,但在 Liberty V16.0.0.3 中,我通过添加

修复了它

<cdi12 enableImplicitBeanArchives="false"/>

server.xml 文件

中的

以下是描述问题和修复问题的链接 http://www-01.ibm.com/support/docview.wss?uid=swg1PI71667

BTW已在 Liberty V16.0.0.4(现在最新版本)中修复