Arquillian: Hinzufügen beans.xml Ursachen "ArquillianServletRunner nicht gefunden"
Ich bin mit Arquillian[1] zum testen meine J2EE-Anwendung in ein embedded-glassfish-Umgebung in Eclipse[2]-IDE.
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);
}
}
Den test führt problemlos bis ich hinzufügen, das zeigte instruction ".addAsWebInfResource(...)". Wenn Sie dies tun, 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, die CDI nicht funktioniert.
Wie kann ich verhindern, dass ich diese Ausnahme?
Hochgeladen habe ich meine pom.xml zu http://pastxt.com/P/7IT1VYWBUW
Umgebung: jdk1.7.0_02 /Win7 /Eclipse-Juno-SR1
[1] https://www.jboss.org/arquillian.html
- Haben Sie einen reproduzierbaren Testfall, dass ich arbeiten konnte ? Während Ihr test sieht ähnlich aus wie diese insbesondere eine, die in der GF-adapter, ich bin nicht in der Lage um den Fehler zu reproduzieren, was Sie sehen.
- Ich habe aktualisiert die Frage - die Testklasse ist minimal, ohne Abhängigkeiten nun, mein pom.xml ist online verfügbar; Fehler vorhanden ist, auf meiner Seite, in dieser Umgebung.
- Ich sah diesen Fehler mehrmals an verschiedenen Projekten, und die meisten der Zeit es verursacht wurde durch die jar/war/ear-setup in der @ Deployment annotierten Methode. Überprüfen Sie alle Abhängigkeiten und alle Klassen, die Sie für Ihren test. Insbesondere bei der Verwendung von EJB -, drill-down in der zweiten oder Dritten Ebene Abhängigkeiten verwendet werden, da @ EJB-Referenz.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Habe ich einen Blick auf Ihre POM und deinen test. Das Problem scheint mit GLASSFISH-16964, gehen durch die folgende log-Einträge:
Haben Sie ein paar Abhängigkeiten in Ihrem Projekt ziehen, dass in v1.6.1
slf4j-api
. Das scheint Widerspruch mit dem, was embedded-GlassFish erfordert - ich glaube, es ist1.5.10
gehen durch die Protokolle der embedded-GlassFish.Zum beheben dieses Besondere Problem, ein downgrade auf die version, die hält GlassFish glücklich. Ich fügte hinzu, die niedrigere version als managed Abhängigkeit.
Natürlich, könnte dies Auswirkungen auf die anderen Bibliotheken, die abhängig von der neueren version von slf4-api, so müssen Sie aufpassen, für andere Fragen.
Der beste Weg zur Lösung wäre die Verwendung der remote-oder managed-GlassFish-adapter Bereitstellt.
JavaArchive jar = ShrinkWrap.create(JavaArchive.class)
oderJavaArchive jar = ShrinkWrap.create(JavaArchive.class,"test.jar")
Aber wenn ich dies so tun :JavaArchive jar = ShrinkWrap.create(JavaArchive.class,"test")
es funktioniert gut, aber wenn ich versuche zu injizieren bean oder ejb-es funktioniert nicht. Irgendeine Idee?ArquillianServletRunner not found. Could not determine ContextRoot from ProtocolMetadata, please contact DeployableContainer developer.
scheint, um anzuzeigen, dass ein Fehler aufgetreten während der Bereitstellung. Die Nachricht - Sie können denken und aussprechen, was Sie wollen - hat nichts damit zu tun, dass Fehler (Quelle: https://developer.jboss.org/thread/173340)! Benötigen Sie Zugriff auf die logs, um herauszufinden, was falsch ist, die entweder auf der Konsole oder an einem Ort, die konfiguriert ist, die in einer Datei angegeben werden die in der system propertyjava.util.logging.config.file
z.B. hinzufügenIn meinem Fall war es fehlende
com.google.guava:guava:23.0:test
und das Problem wurde unabhängig von hinzufügenbeans.xml
alsAsset.EMPTY
von Shrinkwrap.Ich hatte das gleiche problem mit Glassfish embedded 3.1.2. Aber es scheint behoben zu sein, der in 3.1.2.2.
Hinzufügen, die unten auf der web.xml hat den trick für mich :