Estoy usando Arquillian[1] para las pruebas de mi J2EE-App incrustado glassfish medio ambiente dentro de 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);
    }
}

La prueba se ejecuta bien hasta que agregar la mostró instrucción «.addAsWebInfResource(…)». Al hacer esto, la siguiente excepción:

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)

Sin beans.xml, por supuesto, la CDI no funciona.

¿Cómo puedo evitar esta excepción?

He subido a mi pom.xml a http://pastxt.com/P/7IT1VYWBUW

Medio ambiente: jdk1.7.0_02 /Win7 /Eclipse Juno SR1

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

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

  • ¿Tiene usted una prueba reproducible caso de que podía trabajar ? Mientras que su prueba es similar a este en particular uno en el GF adaptador, yo soy incapaz de reproducir el error que ves.
  • He actualizado la pregunta – la testclass se minimiza sin dependencias de ahora, mi pom.xml está disponible en línea; el error existe en mi lado en este entorno.
  • Vi este error varias veces en diferentes proyectos y la mayoría del tiempo se fue causado por el jar//guerra de la oreja de instalación en el @ Despliegue anotado método. Comprobar todas las dependencias y todas las clases que necesita para su prueba. Especialmente si el uso de EJB, profundizar en el segundo o tercer nivel de las dependencias que se utilizan como @ EJB de referencia.

4 Comentarios

  1. 6

    He echado un vistazo a tu POM y su prueba. El problema parece estar relacionado con GLASSFISH-16964, pasando por las siguientes entradas de registro:

    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

    Tiene unas dependencias en el proyecto que tire en v1.6.1 de slf4j-api. Que parece entrar en conflicto con lo que GlassFish embebido requiere – creo que es 1.5.10 pasando por los registros de GlassFish embebido.

    Para resolver este problema en particular, un downgrade a la versión que se mantiene GlassFish feliz. He añadido la versión inferior como que una gestión de la dependencia.

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

    Por supuesto, esto podría tener un impacto en el resto de bibliotecas que dependen de la versión más reciente de slf4-api, así que usted tendrá que mirar hacia fuera para otras cuestiones.

    La mejor manera de resolver esto sería el uso de la distancia o gestionados GlassFish Arquillian adaptador.

    • [INFO] CONSTRUIR con ÉXITO Gracias!
    • dependencia:el árbol es tu amigo!
    • tengo el mismo problema y he intentado la misma solución dada anteriormente, pero tengo el mismo problema si me permite JavaArchive jar = ShrinkWrap.create(JavaArchive.class) o JavaArchive jar = ShrinkWrap.create(JavaArchive.class,"test.jar") Pero cuando me gusta esta : JavaArchive jar = ShrinkWrap.create(JavaArchive.class,"test") funciona bien, pero cuando trato de inyectar cualquier grano o ejb no funciona. Alguna idea?
    • Tengo el mismo problema. Degradación slf4j de la biblioteca no parece resolver el problema.
    • Alguna idea de cómo solucionarlo?
  2. 1

    ArquillianServletRunner not found. Could not determine ContextRoot from ProtocolMetadata, please contact DeployableContainer developer. parece indicar que ha ocurrido un error durante la implementación. El mensaje – que usted puede pensar y expresar acerca de lo que quiere, no tiene nada que ver con ese error (fuente: https://developer.jboss.org/thread/173340)! Usted necesita para acceder a los registros de averiguar lo que está mal, que se encuentran en la consola o en un lugar que está configurado en un archivo que se especifica en el sistema de propiedad java.util.logging.config.file, por ejemplo, añadir

    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

    En mi caso fue falta com.google.guava:guava:23.0:test y el problema no estaba relacionado con la adición de beans.xml como Asset.EMPTY de los Paquetes.

  3. 0

    Tuve el mismo problema con Glassfish incrustado 3.1.2. Pero parece ser fijo en 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>
  4. 0

    La adición de la siguiente para la web.xml hice el truco para mí :

    <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>

Dejar respuesta

Please enter your comment!
Please enter your name here