简体   繁体   中英

EJB 3.1 with CDI running into error 1408

I'm having the following error when I try to run a test with Arquilian in this configuration:

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));
    }
}
}

The test class:

@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;
}
}

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

Can you help-me?

You don't have the interfaces in your Arquillian deployment archive. You'll need to include everything that is used in those classes into Arquillian deployment.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM