Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/349.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 当使用SolrServer时,未注入CDI和Arquillian测试的Bean失败_Java_Solr_Cdi_Jboss Arquillian_Wildfly Swarm - Fatal编程技术网

Java 当使用SolrServer时,未注入CDI和Arquillian测试的Bean失败

Java 当使用SolrServer时,未注入CDI和Arquillian测试的Bean失败,java,solr,cdi,jboss-arquillian,wildfly-swarm,Java,Solr,Cdi,Jboss Arquillian,Wildfly Swarm,我的Arquillian测试如下所示: 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.Arquilli

我的Arquillian测试如下所示:

    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

问题似乎在于所创建的部署是一个JAR而不是WAR,这就是为什么不存在solr库的原因

您需要使用:

@DefaultDeployment(type = WAR)
而不仅仅是

@DefaultDeployment

谢谢你的回复。我按照您的建议做了:@DefaultDeployment(type=type.WAR),现在Aquirian测试的部署工作正常,但JUnit测试仍然失败。我将跟踪消息添加到post UpperGitHub项目中,以重现该问题:
@DefaultDeployment(type = WAR)
@DefaultDeployment