![](/img/trans.png)
[英]DeploymentException: WELD-001408: Unsatisfied dependencies for type [] with qualifiers @Default
[英]Integration tests with Arquillian WELD-001408: Unsatisfied dependencies for type XXXX with qualifiers @Default
我正在使用 Arquillian 創建我的第一個 EJB 測試,考慮到具有相同問題的帖子數量,我面臨着一些似乎很常見的事情。 但是在嘗試了所有建議之后,我一直無法找到解決方案。
我在wildfly14上運行它。
我的測試班:
import org.jboss.arquillian.container.test.api.Deployment;
import org.jboss.arquillian.junit.Arquillian;
import org.jboss.shrinkwrap.api.ShrinkWrap;
import org.jboss.shrinkwrap.api.spec.WebArchive;
import org.junit.*;
import org.junit.Test;
import org.junit.runner.RunWith;
import javax.inject.*;
@RunWith(Arquillian.class)
public class LicenseManagerTest {
@Deployment
public static WebArchive createDeployment() {
WebArchive war = ShrinkWrap.create(WebArchive.class)
.addClasses(LicenseManager.class)
.addPackages(true, "package1", "package2");
return war;
}
@Inject
private LicenseManager licenseManager;
@Test
public void getAboutTest() {
Assert.assertNotNull(licenseManager.getAbout().getText());
}
}
EJB 經理:
import javax.ejb.Remote;
@Remote
public interface LicenseManager {
AboutDTO getAbout();
}
豆類:
@Stateless(name = "LicenseManagerEJB3")
@Remote(LicenseManager.class)
public class LicenseManagerBean implements LicenseManager{
@Override
public AboutDTO getAbout(){
*My code goes here*
}
}
Arquillian.xml
<?xml version="1.0"?>
<arquillian xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://jboss.org/schema/arquillian"
xsi:schemaLocation="http://jboss.org/schema/arquillian
http://jboss.org/schema/arquillian/arquillian_1_0.xsd">
<defaultProtocol type="Servlet 3.0"/>
<container qualifier="widlfly-managed" default="true">
<configuration>
<property name="jbossHome">target/wildFly-14.0.1.Final</property>
<!--<property name="managementAddress">127.0.0.1</property>-->
<!-- Port offset allows running the tests while a WildFly server is already running -->
<property name="javaVmArguments">-Djboss.socket.binding.port-offset=10000 -Xms512m -Xmx1024m -XX:MaxPermSize=512m --add-modules java.se</property>
<property name="managementPort">19990</property>
<property name="username">admin</property>
<property name="password">admin</property>
</configuration>
</container>
POM文件
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<artifactId>artifactName</artifactId>
<parent>
<groupId>package1</groupId>
<artifactId>artifactName</artifactId>
<version>0.0.1-SNAPSHOT</version>
<relativePath>../name1/pom.xml</relativePath>
</parent>
<properties>
<version.arquillian>1.4.1.Final</version.arquillian>
<version.wildfly>14.0.1.Final</version.wildfly>
</properties>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>2.3.2</version>
<configuration>
<archive>
<manifest>
<addClasspath>false</addClasspath>
</manifest>
</archive>
</configuration>
</plugin>
</plugins>
</build>
<dependencies>
<dependency>
<groupId>javax</groupId>
<artifactId>javaee-api</artifactId>
<version>7.0</version>
<scope>provided</scope>
</dependency>
<!-- Project dependencies -->
<dependency>
<groupId>org.jboss.arquillian</groupId>
<artifactId>arquillian-bom</artifactId>
<version>${version.arquillian}</version>
<scope>test</scope>
<type>pom</type>
</dependency>
<dependency>
<groupId>org.jboss.arquillian.junit</groupId>
<artifactId>arquillian-junit-container</artifactId>
<version>${version.arquillian}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.jboss.arquillian.core</groupId>
<artifactId>arquillian-core-api</artifactId>
<version>${version.arquillian}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.jboss.arquillian.protocol</groupId>
<artifactId>arquillian-protocol-servlet</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.wildfly</groupId>
<artifactId>wildfly-arquillian-container-managed</artifactId>
<version>8.2.1.Final</version>
<exclusions>
<exclusion>
<groupId>sun.jdk</groupId>
<artifactId>jconsole</artifactId>
</exclusion>
</exclusions>
<scope>test</scope>
</dependency>
</dependencies>
<profiles>
<profile>
<id>wildFlyManaged</id>
<activation>
<activeByDefault>true</activeByDefault>
</activation>
<build>
<testResources>
<testResource>
<directory>src/test/resources</directory>
</testResource>
</testResources>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<executions>
<execution>
<id>unpack</id>
<phase>process-test-classes</phase>
<goals>
<goal>unpack</goal>
</goals>
<configuration>
<artifactItems>
<artifactItem>
<groupId>org.wildfly</groupId>
<artifactId>wildfly-dist</artifactId>
<version>${version.wildfly}</version>
<type>zip</type>
<overWrite>false</overWrite>
<outputDirectory>target</outputDirectory>
</artifactItem>
</artifactItems>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
</profile>
</profiles>
在測試配置期間,幾個與我的混合依賴項的 EJB 啟動時沒有問題,但 LicenseManagerEJB3 沒有問題,並且在執行測試代碼時出現以下錯誤:
由以下原因引起:org.jboss.weld.exceptions.IllegalArgumentException:WELD-001408:在注入點 [BackedAnnotatedField] @Inject private package1.LicenseManagerTest.licenseManager at package1.LicenseManagerTest.licenseTestManager.javaManagerense(LicManagerense(LicManagerense) 處,帶有限定符@Default 的類型LicenseManager 的不滿意依賴項:0) 在 org.jboss.weld.core@3.0.5.Final//org.jboss.weld.manager.InjectionTargetFactoryImpl.createInjectionTarget(InjectionTargetFactoryImpl.java:83) 在 org.jboss.weld.core@3.0.5。 Final//org.jboss.weld.manager.InjectionTargetFactoryImpl.createInjectionTarget(InjectionTargetFactoryImpl.java:70) at org.jboss.weld.core@3.0.5.Final//org.jboss.weld.manager.BeanManagerImpl.createInjectionTarget(BeanManagerImpl.java:70) .java:1025) 在 org.jboss.weld.core@3.0.5.Final//org.jboss.weld.util.ForwardingBeanManager.createInjectionTarget(ForwardingBeanManager.java:204) 在部署.0d8da7a8-dc23-4657-ac07- 40964685a2c1.war//org.jboss.arquillian.testenricher.cdi.CDIInjectionEnricher.injectNonContextu alInstance(CDIInjectionEnricher.java:143) at deployment.0d8da7a8-dc23-4657-ac07-40964685a2c1.war//org.jboss.arquillian.testenricher.cdi.CDIInjectionEnricher.injectClass(CDI.java:12enrich5Cause ...作者:org.jboss.weld.exceptions.DeploymentException:WELD-001408:在注入點 [BackedAnnotatedField] @Inject private package1.LicenseManagerTest.licenseManager at package1.LicenseManagerTest.licenseManager(LicenseManagerTest.java: 0) 在 org.jboss.weld.core@3.0.5.Final//org.jboss.weld.bootstrap.Validator.validateInjectionPointForDeploymentProblems(Validator.java:378) 在 org.jboss.weld.core@3.0.5.Final //org.jboss.weld.bootstrap.Validator.validateInjectionPoint(Validator.java:290) at org.jboss.weld.core@3.0.5.Final//org.jboss.weld.bootstrap.Validator.validateProducer(Validator. java:425) 在 org.jboss.weld.core@3.0.5.Final//org.jboss.weld.injection.producer.InjectionTargetService.validateProducer(I njectionTargetService.java:36) 在 org.jboss.weld.core@3.0.5.Final//org.jboss.weld.manager.InjectionTargetFactoryImpl.validate(InjectionTargetFactoryImpl.java:153) 在 org.jboss.weld.core@3.0 .5.Final//org.jboss.weld.manager.InjectionTargetFactoryImpl.createInjectionTarget(InjectionTargetFactoryImpl.java:81) ... 147 更多
你知道我做錯了什么嗎? 謝謝
我認為您在部署中缺少beans.xml
,因此 CDI 在存檔中找不到任何 bean,因為未為存檔啟用 CDI。
嘗試通過以下方式將beans.xml
添加到您的部署中:
archive.addAsResource("META-INF/beans.xml);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.