java - Arquillian 超过 Wildfly DeploymentException : WELD-001408: Unsatisfied dependencies

标签 java jakarta-ee testing wildfly jboss-arquillian

我有一个非常简单的测试:

@RunWith(Arquillian.class)
public class SimpleTest
{
    
    @Inject private SingleEntity singleEntity;
    
    @Deployment
    public static WebArchive createDeployment()
    {   
        return ShrinkWrap.create(WebArchive.class)
            .addClass(SingleEntity.class)
            .addAsWebInfResource(EmptyAsset.INSTANCE, ArchivePaths.create("beans.xml"));
    }
    
    @Test
    public void categorize()
    {
        assertNotNull(this.singleEntity);
    }
}

我只想注入(inject)一个SingleEntity 类型的对象。 SingleEntity 是单个 POJO:

public class SingleEntity
{
    private String id;
    private String description;
    
    public SingleEntity(String id, String description) {
        super();
        this.id = id;
        this.description = description;
    }

    //getters & setters
}

之后,我执行gradle test。我已经配置了测试,以便 Arquillian 在 Wildfly 嵌入式实例中执行它们:

<arquillian xmlns="http://jboss.org/schema/arquillian"  
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
    xsi:schemaLocation="http://jboss.org/schema/arquillian http://jboss.org/schema/arquillian/arquillian_1_0.xsd">  
  
    <container qualifier="jboss" default="true">  
        <configuration>  
        <!-- Supported property names: [managementPort, username, managementAddress, bundlePath, managementProtocol,   
                    cleanServerBaseDir, jbossHome, password, modulePath] -->  
            <property name="jbossHome">C:\servers\wildfly-Test-8.2.0.Final</property>
            <property name="modulePath">C:\servers\wildfly-Test-8.2.0.Final\modules\</property>
            <!-- <property name="managementPort">8888</property> -->  
        </configuration>  
    </container>  
</arquillian>  

这非常简单,但是,我收到一个异常,告诉我 SingleEntity 无法解析:

Caused by: org.jboss.weld.exceptions.DeploymentException: WELD-001408: Unsatisfied dependencies for type SingleEntity with qualifiers @Default

at injection point [BackedAnnotatedField] @Inject private com.jeusdi.arquillian.SimpleTest.singleEntity

at com.jeusdi.arquillian.SimpleTest.singleEntity(SimpleTest.java:0)

有什么想法吗? 感谢大家

最佳答案

通常,您不想注入(inject)实体。 JPA 基于类名,而 CDI 使用代理而不是具体类。这会导致注入(inject)不同的类。

现在这只是最佳实践。如果您尝试继续前进,您可能仍会遇到其他错误,但如果一切正常,您应该不会收到此错误。

您的实体没有 bean 定义注释。如果您使用的是 CDI 1.2(由 wildfly 8.2 提供),并且您的 beans.xml 没有明确列出 bean-discovery-mode=all 那么这个实体将不会被拾取。

关于java - Arquillian 超过 Wildfly DeploymentException : WELD-001408: Unsatisfied dependencies,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33185587/

相关文章:

java - 如何解决 android buildtools 错误

python - 我应该如何使用临时数据库测试 db 服务模块?

java - 是否有 Google App Engine 等效项可以让您将 SOAP 与 Java 结合使用并且是免费的,或者是 GAE 支持的 SOAP 库吗?

java - Scala 中不是 JSON 对象异常

java - 使 session spring 安全无效

java - REST如何返回接口(interface)列表

jsf - EJB - 外部库还是 JSF 项目内部?

java - spring-mvc 应用程序的模板和布局

testing - Perl、C#、C、Java 的 Lorem ipsum?

javascript - 使用 testPathPattern 更新 Jest 快照