2017-01-11 4 views
2

Мой Arquillian тест выглядит следующим образом:Bean не вводили CDI и Arquillian испытания провалились, когда SolrServer используется

import static org.junit.Assert.assertNotNull; 
    import static org.junit.Assert.assertTrue;  
    import javax.enterprise.inject.spi.CDI; 
    import javax.inject.Inject;  
    import org.jboss.arquillian.junit.Arquillian; 
    import org.junit.Test; 
    import org.junit.runner.RunWith; 
    import org.wildfly.swarm.arquillian.DefaultDeployment; 

    @RunWith(Arquillian.class) 
    @DefaultDeployment(type = Type.WAR) 
    public class CDIArquillianTest { 

     @Inject 
     private SomeClass someclass; 

     @Test 
     public void testInjection() { 
      assertNotNull(someclass); 
      assertTrue(someclass.printI().contains("my string")); 
     } 

     @Test 
     public void testCDIContainerPresence() throws Exception { 
      assertNotNull(CDI.current()); 
     } 
    } 

Введенный класс:

import javax.enterprise.context.ApplicationScoped; 
    import org.apache.solr.client.solrj.SolrServer; 

    @ApplicationScoped 
    public class SomeClass{ 
     private SolrServer solrServer; 

     public SomeClass(){  
     } 

     public String printI(){ 
      String somestr = "my string"; 
      return somestr; 
     }  
    } 

Внутри него есть SolrServer класс, создает проблему. Без класса, все работает нормально. Сообщение об ошибке сообщает, что мой SomeClass был проигнорирован, потому что класс SolrServer не найден. Как я могу справиться с этой ошибкой? Должен ли я включать этот класс SolrServer вручную? Не можете использовать @DefaultDeployment здесь? Может быть, SolrServer как-то несовместим с CDI?

Сообщение об ошибке:

2017-01-11 15:59:17,956 ERROR [org.jboss.msc.service.fail] (MSC service thread 1-2) MSC000001: Failed to start service jboss.deployment.unit."CDIArquillianTest.jar".WeldStartService: org.jboss.msc.service.StartException in service jboss.deployment.unit."CDIArquillianTest.jar".WeldStartService: Failed to start service 
    at org.jboss.msc.service.ServiceControllerImpl$StartTask.run(ServiceControllerImpl.java:1904) 
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) 
    at java.lang.Thread.run(Thread.java:745) 
Caused by: org.jboss.weld.exceptions.DeploymentException: WELD-001408: Unsatisfied dependencies for type SomeClass with qualifiers @Default 
    at injection point [BackedAnnotatedField] @Inject private xx.CDIArquillianTest.someclass 
    at xx.CDIArquillianTest.someclass(CDIArquillianTest.java:0) 
WELD-001474: Class xx.SomeClass is on the classpath, but was ignored because a class it references was not found: org.apache.solr.client.solrj.SolrServer from [Module "deployment.CDIArquillianTest.jar:main" from Service Module Loader]. 

Некоторые более StackTrace:

2017-01-11 15:59:16,825 INFO [org.jboss.weld.Bootstrap] (Weld Thread Pool -- 2) WELD-000119: Not generating any bean definitions from xxSomeClass because of underlying class loading error: Type org.apache.solr.client.solrj.SolrServer from [Module "deployment.CDIArquillianTest.jar:main" from Service Module Loader] not found. If this is unexpected, enable DEBUG logging to see the full error. 
2017-01-11 15:59:16,825 DEBUG [org.jboss.weld.Bootstrap] (Weld Thread Pool -- 2) Catching: org.jboss.weld.resources.spi.ResourceLoadingException: Error while loading class xx.SomeClass 
    at org.jboss.weld.resources.ClassTransformer.getBackedAnnotatedType(ClassTransformer.java:186) 
    at org.jboss.weld.resources.ClassTransformer.getBackedAnnotatedType(ClassTransformer.java:194) 
    at org.jboss.weld.bootstrap.FastAnnotatedTypeLoader.loadAnnotatedType(FastAnnotatedTypeLoader.java:113) 
    at org.jboss.weld.bootstrap.FastAnnotatedTypeLoader.createContext(FastAnnotatedTypeLoader.java:102) 
    at org.jboss.weld.bootstrap.FastAnnotatedTypeLoader.loadAnnotatedType(FastAnnotatedTypeLoader.java:91) 
    at org.jboss.weld.bootstrap.BeanDeployer.addClass(BeanDeployer.java:98) 
    at org.jboss.weld.bootstrap.ConcurrentBeanDeployer$1.doWork(ConcurrentBeanDeployer.java:65) 
    at org.jboss.weld.bootstrap.ConcurrentBeanDeployer$1.doWork(ConcurrentBeanDeployer.java:62) 
    at org.jboss.weld.executor.IterativeWorkerTaskFactory$1.call(IterativeWorkerTaskFactory.java:63) 
    at org.jboss.weld.executor.IterativeWorkerTaskFactory$1.call(IterativeWorkerTaskFactory.java:56) 
    at java.util.concurrent.FutureTask.run(FutureTask.java:266) 
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) 
    at java.lang.Thread.run(Thread.java:745) 
    at org.jboss.threads.JBossThread.run(JBossThread.java:320) 
Caused by: java.lang.NoClassDefFoundError: Lorg/apache/solr/client/solrj/SolrServer; 
    at java.lang.Class.getDeclaredFields0(Native Method) 
    at java.lang.Class.privateGetDeclaredFields(Class.java:2583) 
    at java.lang.Class.getDeclaredFields(Class.java:1916) 
    at org.jboss.weld.annotated.slim.backed.SecurityActions.getDeclaredFields(SecurityActions.java:49) 
    at org.jboss.weld.annotated.slim.backed.BackedAnnotatedType$BackedAnnotatedFields.computeValue(BackedAnnotatedType.java:179) 
    at org.jboss.weld.annotated.slim.backed.BackedAnnotatedType$BackedAnnotatedFields.computeValue(BackedAnnotatedType.java:173) 
    at org.jboss.weld.util.LazyValueHolder.get(LazyValueHolder.java:35) 
    at org.jboss.weld.annotated.slim.backed.BackedAnnotatedType$EagerlyInitializedLazyValueHolder.<init>(BackedAnnotatedType.java:156) 
    at org.jboss.weld.annotated.slim.backed.BackedAnnotatedType$BackedAnnotatedFields.<init>(BackedAnnotatedType.java:173) 
    at org.jboss.weld.annotated.slim.backed.BackedAnnotatedType$BackedAnnotatedFields.<init>(BackedAnnotatedType.java:173) 
    at org.jboss.weld.annotated.slim.backed.BackedAnnotatedType.<init>(BackedAnnotatedType.java:62) 
    at org.jboss.weld.annotated.slim.backed.BackedAnnotatedType.of(BackedAnnotatedType.java:44) 
    at org.jboss.weld.resources.ClassTransformer$TransformClassToBackedAnnotatedType.load(ClassTransformer.java:83) 
    at org.jboss.weld.resources.ClassTransformer$TransformClassToBackedAnnotatedType.load(ClassTransformer.java:80) 
    at com.google.common.cache.LocalCache$LoadingValueReference.loadFuture(LocalCache.java:3527) 
    at com.google.common.cache.LocalCache$Segment.loadSync(LocalCache.java:2319) 
    at com.google.common.cache.LocalCache$Segment.lockedGetOrLoad(LocalCache.java:2282) 
    at com.google.common.cache.LocalCache$Segment.get(LocalCache.java:2197) 
    at com.google.common.cache.LocalCache.get(LocalCache.java:3937) 
    at com.google.common.cache.LocalCache.getOrLoad(LocalCache.java:3941) 
    at com.google.common.cache.LocalCache$LocalLoadingCache.get(LocalCache.java:4824) 
    at org.jboss.weld.util.cache.LoadingCacheUtils.getCacheValue(LoadingCacheUtils.java:49) 
    at org.jboss.weld.util.cache.LoadingCacheUtils.getCastCacheValue(LoadingCacheUtils.java:74) 
    at org.jboss.weld.resources.ClassTransformer.getBackedAnnotatedType(ClassTransformer.java:175) 
    ... 14 more 
Caused by: java.lang.ClassNotFoundException: org.apache.solr.client.solrj.SolrServer from [Module "deployment.CDIArquillianTest.jar:main" from Service Module Loader] 
    at org.jboss.modules.ModuleClassLoader.findClass(ModuleClassLoader.java:198) 
    at org.jboss.modules.ConcurrentClassLoader.performLoadClassUnchecked(ConcurrentClassLoader.java:363) 
    at org.jboss.modules.ConcurrentClassLoader.performLoadClass(ConcurrentClassLoader.java:351) 
    at org.jboss.modules.ConcurrentClassLoader.loadClass(ConcurrentClassLoader.java:93) 
    ... 38 more 

файл pom.xml:

<packaging>war</packaging> 

<properties> 
    <version.wildfly.swarm>2017.1.1</version.wildfly.swarm> 
    <version.wildfly.arquillian>1.1.10.Final</version.wildfly.arquillian> 
    <maven.compiler.source>1.8</maven.compiler.source> 
    <maven.compiler.target>1.8</maven.compiler.target> 
    <failOnMissingWebXml>false</failOnMissingWebXml> 
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> 
    <solr.version>4.10.3-cdh5.9.0</solr.version> 
</properties> 

<dependencyManagement> 
    <dependencies> 
     <dependency> 
      <groupId>org.wildfly.swarm</groupId> 
      <artifactId>bom-all</artifactId> 
      <version>${version.wildfly.swarm}</version> 
      <scope>import</scope> 
      <type>pom</type> 
     </dependency> 
     <dependency> 
      <groupId>org.jboss.arquillian</groupId> 
      <artifactId>arquillian-bom</artifactId> 
      <version>${version.wildfly.arquillian}</version> 
      <type>pom</type> 
      <scope>import</scope> 
     </dependency> 
    </dependencies> 
</dependencyManagement> 
<dependencies> 
    <!-- Java EE 7 dependency --> 
    <dependency> 
     <groupId>javax</groupId> 
     <artifactId>javaee-api</artifactId> 
     <version>7.0</version> 
     <scope>provided</scope> 
    </dependency> 


    <!-- Wildfly Swarm Fractions --> 
    <dependency> 
     <groupId>org.wildfly.swarm</groupId> 
     <artifactId>logging</artifactId> 
    </dependency> 
    <dependency> 
     <groupId>org.wildfly.swarm</groupId> 
     <artifactId>jaxrs-validator</artifactId> 
    </dependency> 
    <dependency> 
     <groupId>org.wildfly.swarm</groupId> 
     <artifactId>cdi</artifactId> 
    </dependency> 

    <dependency> 
     <groupId>org.apache.hadoop</groupId> 
     <artifactId>hadoop-core</artifactId> 
     <version>2.6.0-mr1-cdh5.7.4</version> 
     <scope>provided</scope> 
    </dependency> 
    <dependency> 
     <groupId>org.apache.hadoop</groupId> 
     <artifactId>hadoop-common</artifactId> 
     <version>2.6.0-cdh5.7.4</version> 
     <scope>provided</scope> 
    </dependency> 
    <!-- Solar --> 
    <dependency> 
     <groupId>org.apache.solr</groupId> 
     <artifactId>solr-solrj</artifactId> 
     <version>${solr.version}</version> 
    </dependency> 
    <dependency> 
     <groupId>org.apache.solr</groupId> 
     <artifactId>solr-core</artifactId> 
     <version>${solr.version}</version> 
    </dependency> 
    <dependency> 
     <groupId>org.apache.solr</groupId> 
     <artifactId>solr-cell</artifactId> 
     <version>${solr.version}</version> 
    </dependency> 


    <!-- Other Dependencies --> 
    <dependency> 
     <groupId>org.slf4j</groupId> 
     <artifactId>slf4j-api</artifactId> 
     <version>1.7.2</version> 
     <scope>provided</scope> 
    </dependency> 

    <!-- Test Dependencies --> 
    <dependency> 
     <groupId>junit</groupId> 
     <artifactId>junit</artifactId> 
     <version>4.12</version> 
     <scope>test</scope> 
    </dependency> 
    <dependency> 
     <groupId>org.wildfly.swarm</groupId> 
     <artifactId>arquillian</artifactId> 
     <scope>test</scope> 
    </dependency> 
    <dependency> 
     <groupId>org.jboss.arquillian.junit</groupId> 
     <artifactId>arquillian-junit-container</artifactId> 
     <scope>test</scope> 
    </dependency> 

    <dependency> 
     <groupId>org.skyscreamer</groupId> 
     <artifactId>jsonassert</artifactId> 
     <version>1.4.0</version> 
     <scope>test</scope> 
    </dependency> 
</dependencies> 

После ответа от Кена я добавил @DefaultDeployment (тип = тип. WAR) на тест arquilian, и теперь развертывание этого теста отлично работает, но тест не прошел при следующем сообщении (без SolrSer версия работает все время штраф):

java.lang.RuntimeException: Could not inject members 
      at org.jboss.arquillian.testenricher.cdi.CDIInjectionEnricher.injectClass(CDIInjectionEnricher.java:135) 
      at org.jboss.arquillian.testenricher.cdi.CDIInjectionEnricher.enrich(CDIInjectionEnricher.java:78) 
      at org.jboss.arquillian.test.impl.TestInstanceEnricher.enrich(TestInstanceEnricher.java:52) 
     ... 
      at io.netty.util.concurrent.SingleThreadEventExecutor$2.run(SingleThreadEventExecutor.java:112) 
      at io.netty.util.concurrent.DefaultThreadFactory$DefaultRunnableDecorator.run(DefaultThreadFactory.java:137) 
      at java.lang.Thread.run(Thread.java:745) 
     Caused by: org.jboss.arquillian.test.spi.ArquillianProxyException: org.jboss.weld.exceptions.IllegalArgumentException : WELD-001408: Unsatisfied dependencies for type SomeClass with qualifiers @Default 
      at injection point [BackedAnnotatedField] @Inject private xx.CDIArquillianTest.someclass 
      at xx.CDIArquillianTest.someclass(CDIArquillianTest.java:0) 
     [Proxied because : Original exception caused: class java.lang.ClassNotFoundException: org.jboss.weld.exceptions.IllegalArgumentException] 
      at org.jboss.weld.manager.InjectionTargetFactoryImpl.createInjectionTarget(InjectionTargetFactoryImpl.java:81) 
      at org.jboss.weld.manager.InjectionTargetFactoryImpl.createInjectionTarget(InjectionTargetFactoryImpl.java:69) 
      at org.jboss.weld.manager.BeanManagerImpl.createInjectionTarget(BeanManagerImpl.java:1110) 
      at org.jboss.weld.util.ForwardingBeanManager.createInjectionTarget(ForwardingBeanManager.java:201) 
      at org.jboss.arquillian.testenricher.cdi.CDIInjectionEnricher.injectNonContextualInstance(CDIInjectionEnricher.java:143) 
      at org.jboss.arquillian.testenricher.cdi.CDIInjectionEnricher.injectClass(CDIInjectionEnricher.java:125) 
      ... 115 more 
     Caused by: org.jboss.arquillian.test.spi.ArquillianProxyException: org.jboss.weld.exceptions.DeploymentException : WELD-001408: Unsatisfied dependencies for type SomeClass with qualifiers @Default 
      at injection point [BackedAnnotatedField] @Inject private xx.CDIArquillianTest.someclass 
      at xx.CDIArquillianTest.someclass(CDIArquillianTest.java:0) 
     [Proxied because : Original exception caused: class java.lang.ClassNotFoundException: org.jboss.weld.exceptions.DeploymentException] 
      at org.jboss.weld.bootstrap.Validator.validateInjectionPointForDeploymentProblems(Validator.java:359) 
      at org.jboss.weld.bootstrap.Validator.validateInjectionPoint(Validator.java:281) 
      at org.jboss.weld.bootstrap.Validator.validateProducer(Validator.java:417) 
      at org.jboss.weld.injection.producer.InjectionTargetService.validateProducer(InjectionTargetService.java:36) 
      at org.jboss.weld.manager.InjectionTargetFactoryImpl.validate(InjectionTargetFactoryImpl.java:135) 
      at org.jboss.weld.manager.InjectionTargetFactoryImpl.createInjectionTarget(InjectionTargetFactoryImpl.java:79) 
      ... 120 more 

ответ

2

Проблема, как представляется, что развертывание создается является JAR и не WAR, поэтому библиотеки Solr нет.

Вам нужно будет использовать:

@DefaultDeployment(type = WAR) 

вместо того, чтобы просто

@DefaultDeployment 
+0

Спасибо за ответ. Я сделал так, как вам было предложено: @DefaultDeployment (type = Type.WAR), и теперь развертывание теста Aquirian работает правильно, но, тем не менее, проверка JUnit не удалась. Я добавил сообщение трассировки к сообщению выше – Miroslaw

+0

Проект Github для воспроизведения проблемы: https://github.com/mielniczekm/cdi-simpleTest/tree/master – Miroslaw

Смежные вопросы