web-dev-qa-db-fra.com

Impossible de terminer l'analyse des annotations pour l'application Web [/ app] en raison d'une erreur StackOverflowError

Je développe une application Spring MVC utilisant STS (plugin Eclipse) et maven.

Pour créer le projet, j'ai suivi l'assistant STS pour un nouveau "projet Spring MVC". Par la suite, j'ai ajouté des dépendances à d'autres projets et bibliothèques.

Cependant, lorsque j'essaie maintenant de déployer le projet sur le serveur vFabric intégré de STS, j'obtiens parfois une exception:

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

Lors de l'émission d'un "nettoyage Maven", suivi d'une "installation Maven" et d'un redémarrage du serveur, l'exception n'est parfois pas levée et l'application fonctionne correctement. Pourtant, la plupart du temps, cela ne fonctionne pas.

Je suppose qu'il n'est pas nécessaire d'analyser les dépendances de bouncycastle pour les annotations.
Puis-je en quelque sorte désactiver cette analyse pour certains bocaux?

J'ai déjà essayé d'ajouter metadata-complete="true" à mon web.xml et augmenter la taille de la pile sans résultat.

Que puis-je faire pour résoudre ce problème?

40
Matthias

Dans mon cas, le org.bouncycastle.asn1.DEREncodableVector class, qui était à l'origine de la dépendance cyclique, était desservie par deux bocaux dans le chemin de classe.

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

Exclus le pot indésirable (bcprov-jdk16-1.45.jar) et cela a bien fonctionné

57
amindri

Vous avez une dépendance cyclique. org.bouncycastle.asn1.ASN1EncodableVector dépend de org.bouncycastle.asn1.DEREncodableVector qui dépend de org.bouncycastle.asn1.ASN1EncodableVector lequel ... . Il s'agit d'un cycle infini et vous obtenez donc un StackOverflowException.

Si le plug-in Maven est installé dans Eclipse, regardez la hiérarchie des dépendances et recherchez ces classes. J'ai trouvé quelqu'un avec un problème similaire ici , il l'a résolu en regardant l'arbre de dépendance, puis en ajoutant une exclusion pour briser la dépendance cyclique.

19
g00glen00b

Je viens de rencontrer ce problème. D'autres donnent déjà la réponse à ce problème. Je dirais autre chose.

Je suppose que vous utilisez maven-shade-plugin ou quelque chose de similaire qui empaquette toutes les dépendances dans un pot Uber, non?

Vous pouvez voir dans grepcode que bcprov-jdk15on:1.52 définit DEREncodableVector comme

public class DEREncodableVector extends ASN1EncodableVector

Tandis que bcprov-jdk14:1.38 définit ASN1EncodableVector as

public class ASN1EncodableVector extends DEREncodableVector

Et avec maven-shade-plugin, il choisirait au hasard une classe lorsque deux ou plusieurs mêmes classes existent. Et quand il choisit cette combinaison, une dépendance cyclique se produit. S'il choisit d'autres combinaisons, votre application peut fonctionner correctement. Cela correspond à ce que vous avez décrit

Pourtant, la plupart du temps, cela ne fonctionne pas.

C'est un événement probabiliste.

4
user2473519

Cela m'arrivait en utilisant

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

J'ai mis cela à niveau

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

et cela semble l'avoir corrigé

3
Victor Grazi

J'ai cette erreur dans Tomcat 8 et jdk 1.8

04-Apr-2018 16:35:06.358 SEVERE [localhost-startStop-1] org.Apache.catalina.core.ContainerBase.addChildInternal ContainerBase.addChild: start: 
 org.Apache.catalina.LifecycleException: Failed to start component [StandardEngine[Catalina].StandardHost[localhost].StandardContext[/myapp]]
    at org.Apache.catalina.util.LifecycleBase.start(LifecycleBase.Java:167)
    at org.Apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.Java:752)
    at org.Apache.catalina.core.ContainerBase.addChild(ContainerBase.Java:728)
    at org.Apache.catalina.core.StandardHost.addChild(StandardHost.Java:734)
    at org.Apache.catalina.startup.HostConfig.deployDirectory(HostConfig.Java:1141)
    at org.Apache.catalina.startup.HostConfig$DeployDirectory.run(HostConfig.Java:1875)
    at Java.util.concurrent.Executors$RunnableAdapter.call(Executors.Java:511)
    at Java.util.concurrent.FutureTask.run(FutureTask.Java:266)
    at Java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.Java:1142)
    at Java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.Java:617)
    at Java.lang.Thread.run(Thread.Java:745)
Caused by: Java.lang.IllegalStateException: Unable to complete the scan for annotations for web application [/myapp] 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:2110)
    at org.Apache.catalina.startup.ContextConfig.processAnnotationsStream(ContextConfig.Java:2054)
    at org.Apache.catalina.startup.ContextConfig.processAnnotationsJar(ContextConfig.Java:2000)
    at org.Apache.catalina.startup.ContextConfig.processAnnotationsUrl(ContextConfig.Java:1970)
    at org.Apache.catalina.startup.ContextConfig.processAnnotations(ContextConfig.Java:1923)
    at org.Apache.catalina.startup.ContextConfig.webConfig(ContextConfig.Java:1163)
    at org.Apache.catalina.startup.ContextConfig.configureStart(ContextConfig.Java:775)
    at org.Apache.catalina.startup.ContextConfig.lifecycleEvent(ContextConfig.Java:299)
    at org.Apache.catalina.util.LifecycleBase.fireLifecycleEvent(LifecycleBase.Java:94)
    at org.Apache.catalina.core.StandardContext.startInternal(StandardContext.Java:5105)
    at org.Apache.catalina.util.LifecycleBase.start(LifecycleBase.Java:150)
    ... 10 more

04-Apr-2018 16:35:06.359 SEVERE [localhost-startStop-1] org.Apache.catalina.startup.HostConfig.deployDirectory Error deploying web application directory [/usr/Apache-Tomcat-8.5.24.Core/webapps/myapp]
 Java.lang.IllegalStateException: ContainerBase.addChild: start: org.Apache.catalina.LifecycleException: Failed to start component [StandardEngine[Catalina].StandardHost[localhost].StandardContext[/myapp]]
    at org.Apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.Java:756)
    at org.Apache.catalina.core.ContainerBase.addChild(ContainerBase.Java:728)
    at org.Apache.catalina.core.StandardHost.addChild(StandardHost.Java:734)
    at org.Apache.catalina.startup.HostConfig.deployDirectory(HostConfig.Java:1141)
    at org.Apache.catalina.startup.HostConfig$DeployDirectory.run(HostConfig.Java:1875)
    at Java.util.concurrent.Executors$RunnableAdapter.call(Executors.Java:511)
    at Java.util.concurrent.FutureTask.run(FutureTask.Java:266)
    at Java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.Java:1142)
    at Java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.Java:617)
    at Java.lang.Thread.run(Thread.Java:745)

Et j'ai trouvé deux pots avec le nom bcprov-jdk * .jar dans ma bibliothèque d'applications. J'ai supprimé tous ceux-ci et utilise bcprov-jdk15on-1.52.jar. De cette façon, mon problème a été résolu.

1
Ardeshir Ayati

J'ai eu le même problème et l'ai résolu finalement. Accédez à votre pom et recherchez bouncycastle Vous devriez voir plus d'un exclure l'un d'entre eux et il devrait le réparer

1
yonia

Vérifiez également votre dossier lib sous Tomcat pour vous assurer que la dépendance en double n'y est pas présente.

0
Thomas Raehalme

S'il est déjà exclu dans la configuration de construction et qu'une erreur existe toujours, vous pouvez essayer de nettoyer le répertoire de travail de votre projet avant de le construire.

maven clean

-

grails clean
0
Tesla_PH

Faire mvn clean dans le dossier de l'espace de travail jenkins (où mon projet s'exécute) et faire une build Jenkins (qui supprime l'ancien fichier war) a fonctionné pour moi.

0
veritas

J'ai eu le même problème que je supprime toutes les traces de la bibliothèque bouncycastle dans le fichier buildConfig. Aucune trace dans la dépendance ou exclut. Ajoutez simplement le plug-in dans crypto.2.0 et tout fonctionne bien!

0
NiBE

J'ai eu le même problème mais avec une solution différente. Mon conflit était avec bcprov-jdk15on-1.55.jar et tika-app-1.7.jar. Apparemment, Tika comprend un château gonflable, et dans ce cas, l'ancienne version du château gonflable qui provoque le conflit.

0
Jason Kiefer