2013-07-11 15 views
28

Sto sviluppando un'applicazione Spring MVC utilizzando STS (plug-in Eclipse) e Maven.Impossibile completare la scansione per le annotazioni per l'applicazione Web [/ app] a causa di StackOverflowError

Per la creazione del progetto, ho seguito il wizard STS per un nuovo "progetto Spring MVC". Successivamente, ho aggiunto alcune dipendenze ad altri progetti e librerie.

Tuttavia, quando ora sto provando a schierare il progetto al server vFabric integrato di STS, a volte ottengo un'eccezione:

SEVERE: ContainerBase.addChild: start: 
org.apache.catalina.LifecycleException: Failed to start component [StandardEngine[Catalina].StandardHost[localhost].StandardContext[/wsa]] 
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:154) 
    at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:901) 
    ... 
Caused by: java.lang.IllegalStateException: Unable to complete the scan for annotations for web application [/app] due to a StackOverflowError. Possible root causes include a too low setting for -Xss and illegal cyclic inheritance dependencies. The class hierarchy being processed was [org.bouncycastle.asn1.ASN1EncodableVector->org.bouncycastle.asn1.DEREncodableVector->org.bouncycastle.asn1.ASN1EncodableVector] 
    at org.apache.catalina.startup.ContextConfig.checkHandlesTypes(ContextConfig.java:2179) 
    ... 

Quando l'emissione di un "esperto di puliti", seguito da un "esperto di installazione "e un riavvio del server, a volte l'eccezione non viene generata e l'applicazione funziona correttamente. Eppure, il più delle volte, non funziona.

Suppongo che non sia necessario eseguire la scansione delle dipendenze del bouncycastle per le annotazioni.
Posso in qualche modo disabilitare questa scansione per alcuni vasi?

Ho già provato ad aggiungere metadata-complete="true" al mio web.xml e ad aumentare le dimensioni dello stack senza risultati.

Cosa posso fare per risolvere questo problema?

+1

* Le possibili cause principali includono un'impostazione troppo bassa per le dipendenze da -Xss e da eredità ciclica illegale. * Suppongo che il messaggio ti abbia già risposto. –

+0

Come detto: ho già aumentato le dimensioni dello stack. E non posso cambiare l'ereditarietà di alcune dipendenze esterne. Ho solo bisogno di un modo per escluderli dalla scansione. – Matthias

+0

Dove hai aumentato le dimensioni dello stack? –

risposta

0

Sono passato a Tomcat per scopi di sviluppo - finora, funziona senza modifiche.

16

Si ha una dipendenza ciclica. org.bouncycastle.asn1.ASN1EncodableVector dipende da org.bouncycastle.asn1.DEREncodableVector che dipende da org.bouncycastle.asn1.ASN1EncodableVector che .... Questo è un ciclo infinito e quindi stai ricevendo uno StackOverflowException.

Se il plug-in Maven è installato in Eclipse, controllare la gerarchia delle dipendenze e cercare queste classi. Ho trovato qualcuno con un problema simile here, l'ha risolto osservando l'albero delle dipendenze e quindi aggiungendo un'esclusione per interrompere la dipendenza ciclica.

+0

Grazie per la risposta. L'albero delle dipendenze sembra abbastanza normale per queste librerie (non riconosco alcuna dipendenza ciclica): '\ - org.apache.activemq: activemq-all: jar: 5.8.0: compila \ - org.apache.activemq : activemq-amqp: jar: 5.8.0: compila \ - org.apache.qpid: proton-jms: jar: 0.3.0-fuse-2: compila \ - org.apache.qpid: proton: jar: 0.3 .0-fuse-2: compila \ - org.bouncycastle: bcpkix-jdk15on: jar: 1.47: compila \ - org.bouncycastle: bcprov-jdk15on: jar: 1.47: compile' Devo provare ad escludere la libreria da usando il pom? O solo dalla distribuzione? – Matthias

+0

Vedo che hai due dipendenze 'org.bouncycastle *'. Puoi verificare se uno di loro dipende dall'altro? Prova a rimuovere uno di essi e verifica se il tuo codice funziona ancora. Se uno di questi dipende dall'altro, probabilmente scaricherà l'altro da solo. – g00glen00b

+0

Il problema è che queste sono solo dipendenze indirette, ad es.sono richiesti da un progetto richiesto che non posso cambiare. Così, ho aggiunto il gruppo "org.bouncycastle"/artefatto "bcprov-jdk16" all'elenco "esclusioni" di questa dipendenza nel mio file pom. Ancora senza fortuna, tuttavia. – Matthias

39

Nel mio caso la classe org.bouncycastle.asn1.DEREncodableVector, che stava causando la dipendenza ciclica, era servita da due vasi nel percorso della classe.

bcprov-jdk15on-1.47.jar e bcprov-jdk16-1.45.jar

Escluso il vaso indesiderato (bcprov-jdk16-1.45.jar) e ha funzionato bene

0

Ho avuto lo stesso problema che ho rimuovere ogni traccia di biblioteca bouncycastle nel file buildConfig. Nessuna traccia in dipendenza o esclusa. Basta aggiungere la spina in crypto.2.0 e tutto funziona bene!

1

Ho avuto lo stesso problema e l'ho risolto definitivamente. Vai al tuo pom e la ricerca di BouncyCastle Si dovrebbe vedere più di uno esclude uno di loro e che dovrebbe risolvere il problema

0

raddoppiare anche controllare la cartella lib sotto Tomcat per assicurarsi che la dipendenza duplicato non v'è presente.

2

Ho appena riscontrato questo problema. Altri già danno la risposta a questo problema. Direi qualcos'altro

Immagino che tu stia usando maven-shade-plugin o qualcosa di simile che impacchetta tutte le dipendenze in un vaso Uber, giusto?

Si può vedere da grepcode che bcprov-jdk15on:1.52 definisce DEREncodableVector come

public class DEREncodableVector extends ASN1EncodableVector 

Mentre bcprov-jdk14:1.38 definisce ASN1EncodableVector come

public class ASN1EncodableVector extends DEREncodableVector 

E con maven-shade-plugin, sarebbe in modo casuale scegliere una classe in cui due o più stesse classi esistono . E quando sceglie questa combinazione, avviene la dipendenza ciclica. Se sceglie altre combinazioni, l'applicazione potrebbe funzionare correttamente. Corrisponde a quello che hai descritto

Tuttavia, la maggior parte delle volte, non funziona.

È un evento probabilistico.

+0

Si noti che questa condizione può sorgere anche in base a 'pdfbox-app' che raggruppa la propria versione di Bouncy Castle. –

2

questo accadeva a me usando

 <groupId>org.bouncycastle</groupId> 
     <artifactId>bcpkix-jdk15on</artifactId> 
     <version>1.54</version> 

ho aggiornato che a

 <groupId>org.bouncycastle</groupId> 
     <artifactId>bcprov-jdk16</artifactId> 
     <version>1.46</version> 

e che sembra aver risolto

0

Se è già escluso nella configurazione di compilazione e l'errore esiste ancora, si può provare a pulire la directory di lavoro del progetto prima di costruire.

maven clean 

-

grails clean 
0

ho avuto lo stesso problema, ma con una soluzione diversa. Il mio conflitto era con bcprov-jdk15on-1.55.jar e tika-app-1.7.jar. Apparentemente tika include il castello gonfiabile, e in questo caso la versione più vecchia del castello gonfiabile che causa il conflitto.

Problemi correlati