2012-12-06 11 views
6

Arpillian [1] kullanarak benim J2EE-App'i Eclipse [2] -IDE içindeki gömülü bir glassfish ortamında test etmek için kullanıyorum. Ben gösterdi talimatı ".addAsWebInfResource (...)" add kadarArquillian: beans.xml dosyası eklendiğinde "ArquillianServletRunner bulunamadı"

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); 
    } 
} 

testi ince yürütür. Bunu yaparken, aşağıdaki istisnası atılır:

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) 

beans.xml olmadan, tabii ki, CDI çalışmaz.

Bu özel durumdan nasıl kurtulabilirim?

Ben http://pastxt.com/P/7IT1VYWBUW

Çevre benim pom.xml yükledik: jdk1.7.0_02/Win7/Eclipse Juno SR1

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

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

+0

Üzerinde çalışabileceğim tekrarlanabilir bir test vakası var mı?Testiniz [GF adaptöründeki bu özelliğe benzer] iken (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), gördüğünüz başarısızlığı yeniden oluşturamıyorum. –

+0

Soruyu güncelledim - testclass bağımlılık olmaksızın en aza indirildi, pom.xml'm çevrimiçi olarak kullanılabilir; Bu ortamda benim tarafımda hata var. –

+0

Bu hatayı, farklı projelerde birkaç kez gördüm ve çoğu zaman, Açıklamalı ek açıklama yöntemindeki jar/war/ear kurulumunun neden olduğu. Testiniz için ihtiyacınız olan tüm bağımlılıkları ve tüm sınıfları kontrol edin. Özellikle EJB'yi kullanırsanız, @ EJB referansı olarak kullanılan ikinci veya üçüncü düzey bağımlılıklarda delin. –

cevap

5

ben POM'unuza ve testinize bir göz attınız. sorun aşağıdaki kayıt girişleri ile gidiş, GLASSFISH-16964 ile ilişkili olduğu görünmektedir:

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 

Sen slf4j-api ait V1.6.1 çekmek projenizde birkaç bağımlılıkları var. Bu gömülü GlassFish gerektirir ne ile çelişiyor gibi görünüyor - Ben gömülü GlassFish günlükleri ile gidiyor 1.5.10 olduğuna inanıyorum.

Bu sorunu çözmek için, GlassFish'i mutlu tutan sürüme geçin. Alt sürümü yönetilen bağımlılık olarak ekledim. Tabii

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

, bu slf4-API yeni sürümü bağlı diğer kütüphanelerden üzerinde bir etkisi olabilir, bu nedenle diğer konular için dikkat etmek gerekir.

Bunu çözmenin en iyi yolu, uzak veya yönetilen GlassFish Arquillian bağdaştırıcısını kullanmak olabilir.

+0

[BİLGİ] BAŞARI BAŞARI Teşekkür ederiz! –

+1

bağımlılık: ağaç arkadaşın! – cwash

+0

Ben aynı sorun var ve yukarıda verilen aynı çözümü denedim ama ben 'JavaArchive jar = ShrinkWrap.create (JavaArchive.class)' veya 'JavaArchive jar = ShrinkWrap.create (JavaArchive.class, sağlarsa aynı sorunu yaşıyorum "test.jar") Ama şunu sevdiğim zaman: 'JavaArchive jar = ShrinkWrap.create (JavaArchive.class," test ")' 'iyi çalışıyor ama herhangi bir fasulye veya ejb enjekte etmeye çalıştığımda iş. Herhangi bir fikrin var mı? – TinyOS

-1

Glassfish embedded 3.1.2 ile aynı problemi yaşadım. Fakat 3.1.2.2'de düzeltilmiş gibi görünüyor.

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

benim için web.xml için aşağıdaki hile vermedi ekleme:

<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. bir hata dağıtım sırasında oluştu belirtmek görünüyor. Mesaj - ne istediğiniz hakkında düşünebilir ve ifade edebilirsiniz - bu hata ile hiçbir ilgisi yoktur (kaynak: https://developer.jboss.org/thread/173340)! Konsolda ya da sistem özelliğinde java.util.logging.config.file, mesela sistem özelliğinde belirtilen bir dosyada yapılandırılmış bir konumda neyin yanlış olduğunu anlamak için günlüklere erişmeniz gerekir. Benim durumumda

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 

eklemek o com.google.guava:guava:23.0:test eksikti ve konu Shrinkwrap ait Asset.EMPTY olarak beans.xml ekleyerek bir ilgisi yok.

İlgili konular