2015-06-12 19 views
6

sto ottenendo il seguente errorejava.util.ServiceConfigurationError durante l'esecuzione di test utilizzando Arquillian + omnifaces

"java.util.ServiceConfigurationError: javax.servlet.ServletContainerInitializer: Provider org.omnifaces.ApplicationInitializer not found"

durante l'esecuzione di test Arquillian.

ho messo il banco di prova più semplice che ho potuto qui: https://www.dropbox.com/s/kou5v8kqs5g4g4m/test.zip?dl=0

+0

Stai usando Arquillian + Maven o Arquillian standalone? Il problema indica almeno che la libreria OmniFaces è mancante nel classpath di runtime di Arquillian. – BalusC

+0

Sto usando Arquillian + Maven, mentre sembra un problema di classpath, la parte strana è che org.omnifaces.ApplicationInitializer si trova nello stesso jar di META-INF/services/javax.servlet.ServletContainerInitializer, dal momento che quel servizio è cosa sta causando il caricamento di ApplicationInitializer. Ho trovato il problema e pubblicherò presto la soluzione. – LoneWolf

risposta

7

Dopo il tentativo di eseguire una guerra costruita e funzionante su wildfly standalone, sono riuscito a ridurre il problema a Arquillian, dopo aver testato Arquillian + Glassfish incorporato e correndo senza problemi, ho capito che il problema era Arquillian + Wildfly, un po 'più google e ho trovato problemi simili relativi all'uso di Wildfly embedded con Arquillian e che Wildfly gestito con Arquillian funziona bene, il motivo per cui non posso davvero dirlo sembra una sorta di bug, ma sembra anche un consiglio generale on-line di utilizzare contenitori gestiti o remoti per i test di Arquillian invece di quelli incorporati.

Quindi la soluzione è molto semplice basta rimosso questo:

<dependency> 
     <groupId>org.wildfly</groupId> 
     <artifactId>wildfly-arquillian-container-embedded</artifactId> 
     <version>8.2.0.Final</version> 
     <scope>test</scope> 
    </dependency> 
    <dependency> 
     <groupId>org.wildfly</groupId> 
     <artifactId>wildfly-embedded</artifactId> 
     <version>8.2.0.Final</version> 
     <scope>provided</scope> 
    </dependency> 

e ha aggiunto questo:

<dependency> 
     <groupId>org.wildfly</groupId> 
     <artifactId>wildfly-arquillian-container-managed</artifactId> 
     <version>8.2.0.Final</version> 
     <scope>test</scope> 
    </dependency> 

La soluzione finisce per non essere utilizzando wildfly embedded con Arquillian, ma è riuscito invece.