2013-08-16 3 views
3

У меня следующее сообщение об ошибке при попытке запустить тест с Arquilian в этой конфигурации:EJB 3.1 с CDI нарваться ошибки 1408

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) 

боба:

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

Помогите мне?

+0

Я не думаю, что вам нужно «Именовать» там, в тестовой папке. «Именованный» просто создает управляемый bean-компонент JSF вместо 'ManagedBean'. – SRy

ответ

2

У вас нет интерфейсов в архиве развертывания Arquillian. Вам нужно будет включить все, что используется в этих классах в развертывание Arquillian.

+0

В Arquilian.xml? Можете ли вы привести пример? –

+0

Нет, в вашем методе '@ Deployment'. Этот метод создает архив, который развертывается на сервере и тестируется. Если в этом архиве нет всех классов, баночек, конфигурации и т. Д., Ему необходимо правильно запустить подмножество приложения, которое оно тестирует (например, в вашем случае он пропускает некоторые классы), он будет терпеть неудачу. – LightGuard