2012-12-06 4 views
6

Ich verwende Arquillian [1] zum Testen meiner J2EE-App in einer eingebetteten Glassfish-Umgebung in Eclipse [2] -IDE.Arquillian: Hinzufügen von beans.xml verursacht "ArquillianServletRunner nicht gefunden"

Der Test wird ordnungsgemäß ausgeführt, bis ich die angezeigte Anweisung ".addAsWebInfResource (...)" hinzufüge. Wenn dies getan wird, wird folgende Ausnahme ausgelöst:

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) 

Ohne beans.xml, natürlich nicht CDI nicht.

Wie kann ich diese Ausnahme vermeiden? jdk1.7.0_02/Win7/Eclipse-Juno SR1

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

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

+0

Haben Sie einen reproduzierbaren Testfall, an dem ich arbeiten könnte?Während Ihr Test ähnlich aussieht [dieses spezielle in der GF-Adapter] (https://github.com/arquillian/arquillian-container-glassfish/blob/master/glassfish-embedded-3.1/src/test/java/org/ jboss/arquillian/container/glassfish/embedded_3_1/app/IntegrationWarTestCase.java), ich kann den Fehler, den Sie sehen, nicht reproduzieren. –

+0

Ich habe die Frage aktualisiert - die Testklasse ist jetzt ohne Abhängigkeiten minimiert, meine pom.xml ist online verfügbar; In dieser Umgebung existiert ein Fehler auf meiner Seite. –

+0

Ich habe diesen Fehler mehrere Male bei verschiedenen Projekten gesehen und meistens wurde er durch das jar/war/ear Setup in der @ Deployment Annotated Methode verursacht. Überprüfen Sie alle Abhängigkeiten und alle Klassen, die Sie für Ihren Test benötigen. Insbesondere wenn Sie EJB verwenden, führen Sie einen Drilldown in den Abhängigkeiten der zweiten oder dritten Ebene durch, die als @ EJB-Referenz verwendet werden. –

Antwort

5

I:

ich meine pom.xml zu http://pastxt.com/P/7IT1VYWBUW

Umwelt hochgeladen habe mir dein POM und deinen Test angesehen. Das Problem scheint zu GLASSFISH-16964 bezogen werden, durch die folgenden Protokolleinträge gehen:

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 

Sie haben ein paar Abhängigkeiten in Ihrem Projekt, das in v1.6.1 von slf4j-api ziehen. Das scheint zu widersprechen, was Embedded GlassFish erfordert - ich glaube, es ist 1.5.10 geht durch die Protokolle von eingebetteten GlassFish.

Um dieses spezielle Problem zu beheben, führen Sie ein Downgrade auf die Version durch, die GlassFish weiterhin glücklich macht. Ich habe die niedrigere Version als verwaltete Abhängigkeit hinzugefügt.

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

Natürlich könnte diese Auswirkungen auf den anderen Bibliotheken, die auf der neueren Version von slf4-api ab, so dass Sie für andere Ausgaben achten müssen.

Der beste Weg, dies zu lösen, wäre die Verwendung des Remote- oder verwalteten GlassFish Arquillian-Adapters.

+0

[INFO] BUILD SUCCESSFUL Vielen Dank! –

+1

Abhängigkeit: Baum ist dein Freund! – cwash

+0

Ich habe das gleiche Problem und ich versuchte die gleiche Lösung oben, aber ich habe das gleiche Problem, wenn ich 'JavaArchive jar = ShrinkWrap.create (JavaArchive.class)' oder 'JavaArchive jar = ShrinkWrap.create (JavaArchive.class, "test.jar") ' Aber wenn ich das mag:' JavaArchiv jar = ShrinkWrap.create (JavaArchive.class, "test") 'es funktioniert gut, aber wenn ich versuche, jede Bohne oder ejb injizieren es nicht Arbeit. Irgendeine Idee? – TinyOS

-1

Ich hatte das gleiche Problem mit Glassfish Embedded 3.1.2. Aber es scheint in 3.1.2.2 behoben zu sein.

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

Hinzufügen der unten an der web.xml für mich der Trick:

<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. scheint anzuzeigen, dass ein Fehler bei der Bereitstellung aufgetreten. Die Nachricht - Sie können darüber nachdenken und ausdrücken, was Sie wollen - hat nichts mit diesem Fehler zu tun (Quelle: https://developer.jboss.org/thread/173340)! Sie müssen auf die Protokolle zugreifen, um herauszufinden, was nicht stimmt, die sich entweder auf der Konsole oder an einem Ort befinden, der in einer Datei konfiguriert ist, die in der Systemeigenschaft java.util.logging.config.file, z.

hinzufügen
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 

In meinem Fall ist es fehlte com.google.guava:guava:23.0:test und das Problem war in keinem Zusammenhang beans.xml als Asset.EMPTY von Shrinkwrap zu addieren.