EJB 3.1与CDI运行时出现错误1408。

3

在这个配置中,当我尝试使用Arquilian运行测试时,出现了以下错误:

org.jboss.weld.exceptions.DeploymentException: WELD-001408 Unsatisfied dependencies for type [JLTProcessorBeanRemote] with qualifiers [@Default] at injection point [[field] @Inject protected com.hp.atlantico.jlt.services.JLTProcessorBeanTest.processorBean]
            at org.jboss.weld.bootstrap.Validator.validateInjectionPoint(Validator.java:274)
            at org.jboss.weld.bootstrap.Validator.validateInjectionPoint(Validator.java:243)
            at org.jboss.weld.bootstrap.Validator.validateBean(Validator.java:106)
            at org.jboss.weld.bootstrap.Validator.validateRIBean(Validator.java:126)
            at org.jboss.weld.bootstrap.Validator.validateBeans(Validator.java:345)
            at org.jboss.weld.bootstrap.Validator.validateDeployment(Validator.java:330)
            at org.jboss.weld.bootstrap.WeldBootstrap.validateBeans(WeldBootstrap.java:366)
            at org.jboss.arquillian.container.weld.ee.embedded_1_1.mock.TestContainer.startContainer(TestContainer.java:273)
            at org.jboss.arquillian.container.weld.ee.embedded_1_1.WeldEEMockContainer.deploy(WeldEEMockContainer.java:105)
            at org.jboss.arquillian.container.impl.client.container.ContainerDeployController$3.call(ContainerDeployController.java:161)
            at org.jboss.arquillian.container.impl.client.container.ContainerDeployController$3.call(ContainerDeployController.java:128)
            at org.jboss.arquillian.container.impl.client.container.ContainerDeployController.executeOperation(ContainerDeployController.java:271)
            at org.jboss.arquillian.container.impl.client.container.ContainerDeployController.deploy(ContainerDeployController.java:127)
            at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
            at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
            at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
            at java.lang.reflect.Method.invoke(Method.java:601)
            at org.jboss.arquillian.core.impl.ObserverImpl.invoke(ObserverImpl.java:94)
            at org.jboss.arquillian.core.impl.EventContextImpl.invokeObservers(EventContextImpl.java:99)
            at org.jboss.arquillian.core.impl.EventContextImpl.proceed(EventContextImpl.java:81)
            at org.jboss.arquillian.container.impl.client.ContainerDeploymentContextHandler.createDeploymentContext(ContainerDeploymentContextHandler.java:78)
            at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
            at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
            at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
            at java.lang.reflect.Method.invoke(Method.java:601)
            at org.jboss.arquillian.core.impl.ObserverImpl.invoke(ObserverImpl.java:94)
            at org.jboss.arquillian.core.impl.EventContextImpl.proceed(EventContextImpl.java:88)
            at org.jboss.arquillian.container.impl.client.ContainerDeploymentContextHandler.createContainerContext(ContainerDeploymentContextHandler.java:57)
            at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
            at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
            at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
            at java.lang.reflect.Method.invoke(Method.java:601)
            at org.jboss.arquillian.core.impl.ObserverImpl.invoke(ObserverImpl.java:94)
            at org.jboss.arquillian.core.impl.EventContextImpl.proceed(EventContextImpl.java:88)
            at org.jboss.arquillian.container.impl.client.container.DeploymentExceptionHandler.verifyExpectedExceptionDuringDeploy(DeploymentExceptionHandler.java:50)
            at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
            at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
            at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
            at java.lang.reflect.Method.invoke(Method.java:601)
            at org.jboss.arquillian.core.impl.ObserverImpl.invoke(ObserverImpl.java:94)
            at org.jboss.arquillian.core.impl.EventContextImpl.proceed(EventContextImpl.java:88)
            at org.jboss.arquillian.core.impl.ManagerImpl.fire(ManagerImpl.java:135)
            at org.jboss.arquillian.core.impl.ManagerImpl.fire(ManagerImpl.java:115)
            at org.jboss.arquillian.core.impl.EventImpl.fire(EventImpl.java:67)
            at org.jboss.arquillian.container.impl.client.container.ContainerDeployController$1.perform(ContainerDeployController.java:95)
            at org.jboss.arquillian.container.impl.client.container.ContainerDeployController$1.perform(ContainerDeployController.java:80)
            at org.jboss.arquillian.container.impl.client.container.ContainerDeployController.forEachDeployment(ContainerDeployController.java:263)
            at org.jboss.arquillian.container.impl.client.container.ContainerDeployController.forEachManagedDeployment(ContainerDeployController.java:239)
            at org.jboss.arquillian.container.impl.client.container.ContainerDeployController.deployManaged(ContainerDeployController.java:79)
            at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
            at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
            at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
            at java.lang.reflect.Method.invoke(Method.java:601)
            at org.jboss.arquillian.core.impl.ObserverImpl.invoke(ObserverImpl.java:94)
            at org.jboss.arquillian.core.impl.EventContextImpl.invokeObservers(EventContextImpl.java:99)
            at org.jboss.arquillian.core.impl.EventContextImpl.proceed(EventContextImpl.java:81)
            at org.jboss.arquillian.core.impl.ManagerImpl.fire(ManagerImpl.java:135)
            at org.jboss.arquillian.core.impl.ManagerImpl.fire(ManagerImpl.java:115)
            at org.jboss.arquillian.core.impl.EventImpl.fire(EventImpl.java:67)
            at org.jboss.arquillian.container.test.impl.client.ContainerEventController.execute(ContainerEventController.java:101)
            at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
            at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
            at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
            at java.lang.reflect.Method.invoke(Method.java:601)
            at org.jboss.arquillian.core.impl.ObserverImpl.invoke(ObserverImpl.java:94)
            at org.jboss.arquillian.core.impl.EventContextImpl.invokeObservers(EventContextImpl.java:99)
            at org.jboss.arquillian.core.impl.EventContextImpl.proceed(EventContextImpl.java:81)
            at org.jboss.arquillian.test.impl.TestContextHandler.createClassContext(TestContextHandler.java:75)
            at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
            at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
            at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
            at java.lang.reflect.Method.invoke(Method.java:601)
            at org.jboss.arquillian.core.impl.ObserverImpl.invoke(ObserverImpl.java:94)
            at org.jboss.arquillian.core.impl.EventContextImpl.proceed(EventContextImpl.java:88)
            at org.jboss.arquillian.test.impl.TestContextHandler.createSuiteContext(TestContextHandler.java:60)
            at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
            at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
            at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
            at java.lang.reflect.Method.invoke(Method.java:601)
            at org.jboss.arquillian.core.impl.ObserverImpl.invoke(ObserverImpl.java:94)
            at org.jboss.arquillian.core.impl.EventContextImpl.proceed(EventContextImpl.java:88)
            at org.jboss.arquillian.core.impl.ManagerImpl.fire(ManagerImpl.java:135)
            at org.jboss.arquillian.core.impl.ManagerImpl.fire(ManagerImpl.java:115)
            at org.jboss.arquillian.test.impl.EventTestRunnerAdaptor.beforeClass(EventTestRunnerAdaptor.java:80)
            at org.jboss.arquillian.junit.Arquillian$2.evaluate(Arquillian.java:182)
            at org.jboss.arquillian.junit.Arquillian.multiExecute(Arquillian.java:314)
            at org.jboss.arquillian.junit.Arquillian.access$100(Arquillian.java:46)
            at org.jboss.arquillian.junit.Arquillian$3.evaluate(Arquillian.java:199)
            at org.junit.runners.ParentRunner.run(ParentRunner.java:300)
            at org.jboss.arquillian.junit.Arquillian.run(Arquillian.java:147)
            at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:50)
            at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
            at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:467)
            at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683)
            at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390)
            at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197)

豆子(The Bean):
@Named
@Stateless(mappedName = "JLTProcessorBean")
public class JLTProcessorBean implements JLTProcessorBeanRemote,
    JLTProcessorBeanLocal, JLTConst {

/** The connection factory. */
@Resource(mappedName = "java:/ConnectionFactory")
private ConnectionFactory connectionFactory;

/** The queue jdf2 process. */
@Resource(mappedName = "java:/jlt/jms/JDFProcessQueue")
private Queue queueJdf2Process;

/** The queue. */
@Resource(mappedName = "java:/jlt/jms/JLTProcessPageQueue")
private Queue queueJltConveter;

/** The queue response. */
@Resource(mappedName = "java:/jlt/jms/ResponseReturnQueue")
private Queue queueResponse;

/** The request dao. */
@EJB
protected RequestDAO requestDAO;

/** The logger. */
protected Logger logger = Logger.getLogger(JLTProcessorBean.class);

/** The Constant MISSING_PAGE_TO_PROCESS. */
protected static final String MISSING_PAGE_TO_PROCESS = "Request %s: Total Pages %d, Processed Pages %d";

/**
 * The file layers page partern. *
 * <FileName>-P<PageNumber>E<PageElement>S<PageLayer>.icf
 * */
private static String FILE_LAYERS_PAGE_PARTERN = "{0}-P{1}*.icf";

/** The file ini partern. */
private static String FILE_INI_PARTERN = "{0}.ini";

/**
 * Default constructor.
 */
public JLTProcessorBean() {
}

/** {@inheritDoc} */
@Override
public void processFile(String returnUrl, JDFNode doc, String queryEntry)
        throws JLTProcessorException {

    Connection connection = null;
    Session session = null;
    MessageProducer producer = null;

    try {
        JltFuncParam jltFuncParam = parserJdfDoc(doc.getJDFRoot());

        String jltFileName = getName(jltFuncParam.getInputFile());

        int descompressResult = JltService.getJltService().descompressJlt(
                jltFuncParam);

        if (descompressResult != 0) {
            String messageByCode = findMessageByCode(descompressResult);
            throw new JLTProcessorException(ERROR_DECOMPRESSING_FILE,
                    new Object[] { jltFileName, messageByCode });
        }

        Request request = redData(format(FILE_INI_PARTERN, jltFileName));

        request.setIdentifier(jltFuncParam.getId());
        request.setCreationDate(new Date());
        request.setUpdateDate(request.getCreationDate());
        request.setReturnUrl(returnUrl);
        request.setQueryEntry(queryEntry);
        request.setJobId(doc.getJobID(false));
        request.setOriginalJdf(doc.toXML().getBytes());

        request = requestDAO.saveOrUpdate(request);

        File outputDirectory = new File(
                getFullPath(jltFuncParam.getOutputFile()));

        String fileWildcard = "";

        ICFFuncParam icfFuncParam = null;

        connection = connectionFactory.createConnection();// 1ms
        session = connection
                .createSession(true, Session.SESSION_TRANSACTED);// 1ms
        producer = session.createProducer(queueJltConveter); // 1ms

        MapMessage objMessage = null;
        //
        Page page = null;

        for (int pageNumber = 0; pageNumber < request.getPageCount(); pageNumber++) {

            page = new Page();
            page.setPageNumber(pageNumber);
            icfFuncParam = new ICFFuncParam();

            fileWildcard = format(FILE_LAYERS_PAGE_PARTERN, jltFileName,
                    pageNumber);

            for (File file : listFiles(outputDirectory,
                    new WildcardFileFilter(fileWildcard), null)) {
                page.addLayer(new Layer(file.getAbsolutePath()));

            }

            page = requestDAO.saveOrUpdate(page);

            icfFuncParam.setConversionIntent(jltFuncParam
                    .getConversionIntent());
            icfFuncParam.setFileType(jltFuncParam.getFileType());
            icfFuncParam.setImageResolution(jltFuncParam
                    .getImageResolution());
            icfFuncParam.setIndigoTransparency(jltFuncParam
                    .isIndigoTransparency());

            //
            icfFuncParam.setOutputFile(outputDirectory.getAbsolutePath());
            //
            icfFuncParam.setCmykIcc(jltFuncParam.getCmykIcc());
            icfFuncParam.setRgbIcc(jltFuncParam.getRgbIcc());

            objMessage = session.createMapMessage();
            objMessage.setObject(ICF_PARAMS, icfFuncParam);
            objMessage.setObject(REQUEST_ID, request.getId());
            objMessage.setObject(PAGE_NUMBER, pageNumber);
            producer.send(objMessage);

        }

    } catch (Exception e) {
        throw new JLTProcessorException(e);
    } finally {
        try {
            producer.close();
            session.close();
            connection.close();
        } catch (JMSException e) {
            throw new EJBException(e);
        }

    }

}

/** {@inheritDoc} */
@Override
public String queueJdfToProcess(String returnURL, JDFDoc doc)
        throws JLTProcessorException {
    Connection connection = null;
    Session session = null;
    MessageProducer producer = null;

    try {
        connection = connectionFactory.createConnection();// 1ms
        session = connection
                .createSession(true, Session.SESSION_TRANSACTED);// 1ms
        producer = session.createProducer(queueJltConveter); // 1ms
        MapMessage mapMessage = session.createMapMessage();
        mapMessage.setString(RETURN_URL, returnURL);
        mapMessage.setObject(JDF_NODE, doc.getJDFRoot());
        producer.send(mapMessage);
        return mapMessage.getJMSMessageID();

    } catch (Exception e) {
        throw new JLTProcessorException(e);
    } finally {
        try {
            producer.close();
            session.close();
            connection.close();
        } catch (JMSException e) {
            throw new EJBException(e);
        }

    }

}

/** {@inheritDoc} */
@Override
public void verifyRequestCompletion(Request request)
        throws JLTProcessorException {

    Long processedPages = requestDAO.countProcessedPages(request.getId());

    if (processedPages.intValue() == request.getPageCount()) {

        JDFDoc doc = new JDFDoc(ElementName.JMF);
        JDFJMF jmf = doc.getJMFRoot();
        JDFMessage jdfMessage = jmf.appendMessageElement(
                EnumFamily.Command, EnumType.ReturnQueueEntry);
        JDFReturnQueueEntryParams returnParams = jdfMessage
                .appendReturnQueueEntryParams();
        returnParams.setQueueEntryID(request.getQueryEntry());

    } else {
        logger.warn(format(MISSING_PAGE_TO_PROCESS,
                request.getIdentifier(), request.getPageCount(),
                processedPages));
    }
}
}

测试类如下:
@RunWith(Arquillian.class)
public class JLTProcessorBeanTest {

@Inject @New
@Named
protected JLTProcessorBeanRemote processorBean;

@Deployment
public static JavaArchive createTestArchive() {
    return ShrinkWrap.create(JavaArchive.class)
            .addClasses(JLTProcessorBean.class)
            .addAsManifestResource(EmptyAsset.INSTANCE, "beans.xml");

}

@Test
public void queueJdfToProcessTest() throws JLTProcessorException {
    JDFDoc doc = new JDFDoc();
    processorBean.queueJdfToProcess("", doc);
}

/**
 * @param processorBean
 *            the processorBean to set
 */
public void setProcessorBean(JLTProcessorBeanRemote processorBean) {
    this.processorBean = processorBean;
}
}

Arquilian.xml文件

<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">

<!-- Uncomment to have test archives exported to the file system for inspection -->
<!-- <engine> -->
<!-- <property name="deploymentExportPath">target/</property> -->
<!-- </engine> -->


<!-- Example configuration for a remote JBoss Enterprise Application Platform 
    6 or AS 7 instance -->
<container qualifier="jboss" default="true">
    <!-- By default, arquillian will use the JBOSS_HOME environment variable. 
        Alternatively, the configuration below can be uncommented. -->
    <!--<configuration> -->
    <!--<property name="jbossHome">/path/to/jboss/as</property> -->
    <!--</configuration> -->
    <protocol type="Servlet 3.0" />
</container>

你能帮我吗?


我认为在测试用例中你不需要使用NamedNamed只是创建了一个JSF管理的bean,而不是ManagedBean - SRy
1个回答

2

您的Arquillian部署存档中没有接口。您需要将这些类中使用的所有内容包含到Arquillian部署中。


在Arquilian.xml文件中,你能提供一些例子吗? - Rodrigo Oliveira
不要在你的@Deployment方法中这样做。该方法创建一个归档文件,部署到服务器并进行测试。如果该归档文件没有所有必需的类、JAR包、配置等来正确运行应用程序子集(例如在您的情况下缺少一些类),则测试将失败。 - LightGuard

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接