2012-12-06 24 views
6

मैं एक्लिप्स [2] के अंदर एक एम्बेडेड ग्लासफ़िश पर्यावरण में अपने जे 2 ईई-ऐप का परीक्षण करने के लिए आर्किलीयन [1] का उपयोग कर रहा हूं।आर्किलियन: बीन्स.एक्सएमएल का कारण बनता है "आर्किलीयन सर्वलेटरनर नहीं मिला"

package test.java; 

import org.jboss.arquillian.container.test.api.Deployment; 
import org.jboss.arquillian.junit.Arquillian; 
import org.jboss.shrinkwrap.api.ArchivePaths; 
import org.jboss.shrinkwrap.api.ShrinkWrap; 
import org.jboss.shrinkwrap.api.asset.EmptyAsset; 
import org.jboss.shrinkwrap.api.spec.WebArchive; 
import org.junit.Assert; 
import org.junit.Test; 
import org.junit.runner.RunWith; 

@RunWith(Arquillian.class) 
public class ArquillianTest { 

    @Deployment 
    public static WebArchive createDeployment() { 
     return ShrinkWrap.create(WebArchive.class).addAsWebInfResource(EmptyAsset.INSTANCE, 
      ArchivePaths.create("beans.xml")); 
    } 

    @Test 
    public void test() { 
     Assert.assertNull(null); 
    } 
} 

परीक्षण तब तक ठीक निष्पादित करता है जब तक मैं दिखाया गया निर्देश ".addAsWebInfResource (...)" जोड़ता है। ऐसा करने पर, अपवाद को फेंक दिया जाता है:

java.lang.IllegalArgumentException: ArquillianServletRunner not found. Could not determine ContextRoot from ProtocolMetadata, please contact DeployableContainer developer. 
at org.jboss.arquillian.protocol.servlet.ServletUtil.determineBaseURI(ServletUtil.java:64) 
at org.jboss.arquillian.protocol.servlet.ServletURIHandler.locateTestServlet(ServletURIHandler.java:60) 
at org.jboss.arquillian.protocol.servlet.ServletMethodExecutor.invoke(ServletMethodExecutor.java:77) 
at org.jboss.arquillian.container.test.impl.execution.RemoteTestExecuter.execute(RemoteTestExecuter.java:120) 
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) 
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) 
at java.lang.reflect.Method.invoke(Unknown Source) 
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.execution.ClientTestExecuter.execute(ClientTestExecuter.java:57) 
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) 
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) 
at java.lang.reflect.Method.invoke(Unknown Source) 
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.test.impl.client.ContainerEventController.createContext(ContainerEventController.java:142) 
at org.jboss.arquillian.container.test.impl.client.ContainerEventController.createTestContext(ContainerEventController.java:129) 
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) 
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) 
at java.lang.reflect.Method.invoke(Unknown Source) 
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.createTestContext(TestContextHandler.java:89) 
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) 
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) 
at java.lang.reflect.Method.invoke(Unknown Source) 
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.createClassContext(TestContextHandler.java:75) 
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) 
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) 
at java.lang.reflect.Method.invoke(Unknown Source) 
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(Unknown Source) 
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) 
at java.lang.reflect.Method.invoke(Unknown Source) 
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.test.impl.EventTestRunnerAdaptor.test(EventTestRunnerAdaptor.java:111) 
at org.jboss.arquillian.junit.Arquillian$6.evaluate(Arquillian.java:263) 
at org.jboss.arquillian.junit.Arquillian$4.evaluate(Arquillian.java:226) 
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$5.evaluate(Arquillian.java:240) 
at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:263) 
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:68) 
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:47) 
at org.junit.runners.ParentRunner$3.run(ParentRunner.java:231) 
at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:60) 
at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:229) 
at org.junit.runners.ParentRunner.access$000(ParentRunner.java:50) 
at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:222) 
at org.jboss.arquillian.junit.Arquillian$2.evaluate(Arquillian.java:185) 
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) 

बीन्स.एक्सएमएल के बिना, निश्चित रूप से, सीडीआई काम नहीं करता है।

मैं इस अपवाद से कैसे बच सकता हूं?

मैं करने के लिए http://pastxt.com/P/7IT1VYWBUW

पर्यावरण मेरी pom.xml अपलोड कर दिया है: jdk1.7.0_02/Win7/ग्रहण जूनो SR1

[1] https://www.jboss.org/arquillian.html

[2] http://www.eclipse.org/

+0

क्या आपके पास एक पुन: उत्पन्न परीक्षण केस है जिसे मैं काम कर सकता हूं?जबकि आपका परीक्षण [जीएफ एडाप्टर में यह विशेष व्यक्ति] जैसा दिखता है (https://github.com/arquillian/arquillian-container-glassfish/blob/master/glassfish-embedded-3.1/src/test/java/org/ jboss/arquillian/कंटेनर/ग्लासफ़िश/एम्बेडेड_3_1/ऐप/एकीकरण WarTestCase.java), मैं जो विफलता आपको देखता हूं उसे पुन: पेश करने में असमर्थ हूं। –

+0

मैंने प्रश्न को अद्यतन किया है - टेस्टक्लास अब निर्भरताओं के बिना कम किया गया है, मेरा pom.xml ऑनलाइन उपलब्ध है; इस माहौल में मेरी तरफ से त्रुटि मौजूद है। –

+0

मैंने विभिन्न परियोजनाओं पर कई बार इस त्रुटि को देखा और अधिकांश समय यह @ परिनियोजन एनोटेटेड विधि में जार/युद्ध/कान सेटअप के कारण हुआ था। अपने परीक्षण के लिए आवश्यक सभी निर्भरताओं और सभी कक्षाओं की जांच करें। विशेष रूप से यदि आप ईजेबी का उपयोग करते हैं, तो दूसरी या तीसरी स्तर निर्भरताओं में ड्रिल करें जो @ ईजेबी संदर्भ के रूप में उपयोग किए जाते हैं। –

उत्तर

5

मैं आपके पीओएम और आपके परीक्षण पर एक नज़र डाली है। मुद्दा GLASSFISH-16964 से संबंधित प्रतीत होता है, निम्नलिखित लॉग प्रविष्टियों को देखते हुए:

SLF4J: The requested version 1.5.10 by your slf4j binding is not compatible with [1.6] 
SLF4J: See http://www.slf4j.org/codes.html#version_mismatch for further details. 
Dec 07, 2012 2:09:59 PM org.glassfish.api.ActionReport failure 
SEVERE: Exception while loading the app 
Dec 07, 2012 2:09:59 PM org.glassfish.deployment.admin.DeployCommand execute 
SEVERE: Exception while loading the app : org.slf4j.spi.LocationAwareLogger.log(Lorg/slf4j/Marker;Ljava/lang/String;ILjava/lang/String;Ljava/lang/Throwable;)V 

आप अपनी परियोजना में कुछ निर्भरता कि slf4j-api की v1.6.1 में खींच दिया है। यह एम्बेडेड ग्लासफ़िश के साथ संघर्ष करने के लिए प्रतीत होता है - मुझे विश्वास है कि यह 1.5.10 एम्बेडेड ग्लासफ़िश के लॉग द्वारा जा रहा है।

इस विशेष समस्या को हल करने के लिए, ग्लासफ़िश को खुश रखने वाले संस्करण में डाउनग्रेड करें। मैंने निचले संस्करण को एक प्रबंधित निर्भरता के रूप में जोड़ा।

<dependencyManagement> 
    <dependencies> 
     .... 
     <dependency> 
      <groupId>org.slf4j</groupId> 
      <artifactId>slf4j-api</artifactId> 
      <version>1.5.10</version> 
      <scope>test</scope> 
     </dependency> 
    </dependencies> 
</dependencies> 
बेशक

, इस अन्य पुस्तकालयों कि slf4-api के नए संस्करण पर निर्भर करते हैं पर एक प्रभाव हो सकता है, तो आप अन्य मुद्दों के लिए बाहर देखने के लिए होगा।

इसे हल करने का सबसे अच्छा तरीका दूरस्थ या प्रबंधित ग्लासफ़िश आर्किलियन एडाप्टर का उपयोग करना होगा।

+0

[INFO] सफल सफल धन्यवाद! –

+1

निर्भरता: पेड़ आपका मित्र है! – cwash

+0

मुझे एक ही समस्या है और मैंने ऊपर दिए गए एक ही समाधान की कोशिश की लेकिन मेरे पास एक ही समस्या है यदि मैं 'जावा आर्चिव जार = ShrinkWrap.create (JavaArchive.class)' या 'JavaArchive jar = ShrinkWrap.create (JavaArchive.class, "test.jar") ' लेकिन जब मुझे ऐसा लगता है: 'जावा आर्चिव जार = ShrinkWrap.create (JavaArchive.class," test ")' यह अच्छा काम करता है लेकिन जब मैं किसी भी बीन या ejb इंजेक्ट करने का प्रयास करता हूं काम। कोई विचार? – TinyOS

-1

मुझे ग्लासफ़िश एम्बेडेड 3.1.2 के साथ एक ही समस्या थी। लेकिन ऐसा लगता है कि 3.1.2.2 में तय किया गया है।

<dependency> 
    <groupId>org.glassfish.main.extras</groupId> 
    <artifactId>glassfish-embedded-all</artifactId> 
    <version>3.1.2.2</version> 
    <scope>provided</scope> 
</dependency> 
0

नीचे web.xml लिए किया था मेरे लिए चाल जोड़ना:

<servlet> 
    <servlet-name>ArquillianServletRunner</servlet-name> 
    <servlet-class>org.jboss.arquillian.protocol.servlet.runner.ServletTestRunner</servlet-class> 
</servlet> 
<servlet-mapping> 
    <servlet-name>ArquillianServletRunner</servlet-name> 
    <url-pattern>/ArquillianServletRunner</url-pattern> 
</servlet-mapping> 
0

ArquillianServletRunner not found. Could not determine ContextRoot from ProtocolMetadata, please contact DeployableContainer developer. संकेत मिलता है कि एक त्रुटि तैनाती के दौरान हुई लगती है। संदेश - आप जो चाहते हैं उसके बारे में सोच और व्यक्त कर सकते हैं - उस त्रुटि से कोई लेना देना नहीं है (स्रोत: https://developer.jboss.org/thread/173340)! आपको यह पता लगाने के लिए लॉग का उपयोग करना होगा कि क्या गलत है जो कंसोल पर है या किसी ऐसे स्थान पर जो सिस्टम प्रॉपर्टी java.util.logging.config.file में निर्दिष्ट फ़ाइल में कॉन्फ़िगर किया गया है, उदाहरण के लिए। जोड़ने

handlers=java.util.logging.ConsoleHandler 
java.util.logging.ConsoleHandler.formatter=java.util.logging.SimpleFormatter 
java.util.logging.SimpleFormatter.format=%4$s: %5$s%n 
java.util.logging.ConsoleHandler.level=FINEST 

मेरे मामले में यह com.google.guava:guava:23.0:test याद आ रही थी और इस मुद्दे को shrinkwrap की Asset.EMPTY रूप beans.xml जोड़ने से संबंधित नहीं था।

संबंधित मुद्दे