java.lang.Exception verifyerror: Attend un stackmap cadre à la direction de la cible
Compilé avec succès le projet et de construire aussi bien avec Maven. C'est mon premier projet maven. Mais je n'ai aucune idée de pourquoi j'obtiens l'erreur ci-dessous.
Deployeed la guerre sur tomcat et a frappé mon url et l'erreur ci-dessous apparaît dans mon navigateur.
java.lang.VerifyError: Expecting a stackmap frame at branch target 72
Exception Details:
Location:
com/ebetinc/frontend/presentation/components/Login.isToteAvailable(Ljava/lang/String;Lcom/ebetinc/frontend/dao/DatabaseDao;)Z @46: lookupswitch
Reason:
Expected stackmap frame at this location.
Bytecode:
0000000: 043d 2bb9 03a4 0100 4e2a c601 1c13 03a6
0000010: 2ab8 03aa 9900 0803 3da7 010d 2db8 03ad
0000020: 9900 692a 3a04 0236 0519 04b6 03b1 ab00
0000030: 0000 003a 0000 0002 0000 0626 0000 002c
0000040: 0000 0644 0000 001a 0019 0413 03b3 b603
0000050: b599 0017 0336 05a7 0011 1904 1303 b7b6
0000060: 03b5 9900 0604 3605 1505 ab00 0000 001c
0000070: 0000 0002 0000 0000 0000 001a 0000 0001
0000080: 0000 001a 033d a700 a02d b803 ba99 0099
0000090: 2a3a 0402 3605 1904 b603 b1ab 0000 006a
00000a0: 0000 0004 0000 af34 0000 0029 0000 af4c
00000b0: 0000 003a 0000 af4d 0000 004b 0015 51cb
00000c0: 0000 005c 1904 1303 bcb6 03b5 9900 3903
00000d0: 3605 a700 3319 0413 03be b603 b599 0028
00000e0: 0436 05a7 0022 1904 1303 c0b6 03b5 9900
00000f0: 1705 3605 a700 1119 0413 03c2 b603 b599
0000100: 0006 0636 0515 05aa 0000 001f 0000 0000
0000110: 0000 0003 0000 001d 0000 001d 0000 001d
0000120: 0000 001d 033d 1cac
Stackmap Table:
append_frame(@28,Integer,Object[#931])
append_frame(@73,Object[#200],Integer)
same_frame(@90)
same_frame(@104)
same_frame(@132)
chop_frame(@134,2)
same_frame(@137)
append_frame(@196,Object[#200],Integer)
same_frame(@213)
same_frame(@230)
same_frame(@247)
same_frame(@261)
same_frame(@292)
chop_frame(@294,2)
Quelqu'un peut jeter un peu d'intrants ? Merci pour toute aide.
Configuration:
Java 1.7
Maven 3+
OriginalL'auteur Suresh Atta | 2014-11-04
Vous devez vous connecter pour publier un commentaire.
Salut c'est lié à certains bytecode dans votre application. (voir cette note sur les modifications de compatibilité pour Java 7 http://www.oracle.com/technetwork/java/javase/compatibility-417013.html#incompatibilities, regardez là-bas quelques lignes ci-dessous pour JSR 202)
Vous pouvez soit
java
avec paramètre-XX:-UseSplitVerifier
modifier Même la réponse est déjà un peu vieux. En raison d'un cas actuel je ajouter une explication plus détaillée.
La
StackMapTable
attribut dans le fichier de classe a, même pas documenté à l'époque, introduit avec la version 6 de Java.Foo.java
La classe vérificateur n'a pas de vérifier si l'attribut a été dans la classe ou pas.
Suivant crée le fichier
Foo.class
sansStackMatTable
attribut.FooDump.java
de compiler et de l'exécuter
vérifier que le
StackMapTable
attribut n'est pas dans le fichierFooDemo.java
Avec Java 7 la classe de vérification a été changé.
Pour les fichiers de classe version 50 (Java 6) le chèque avait un basculement si la
StackMapTable
était manquant ou erroné (voir: jvm-4.10.1).Exécuter la vérification avec la
Foo
classe version de Java 6.Ce basculement ne se produit pas plus pour les fichiers de classe version 51 (Java 7).
Pour créer un
Foo
classe version de Java 7 modifiant le code deFooDump.java
.de compiler et de l'exécuter
vérifier que c'est une version de la classe 51
Dans Java 7, la vérification de type pour la
StackMapTable
attribut peut être désactivé à l'étape retour à la version 6 de Java mécanisme de basculement à l'aide de l'option UseSplitVerifier.Dans Java 8 la vérification de la
StackMapTable
attribut est obligatoire et l'optionUseSplitVerifier
a été supprimé.note D'utiliser toujours la version initiale de Java 6/7/8 a été fait par l'intention de montrer que le comportement était là depuis le début.
Vous pourriez trouver quelques suggestions pour le remettre en marche avec Java 8 ...
note Cela désactive le bytecode verifier. Gardez à l'esprit pour ne jamais désactiver le bytecode à la vérification dans un système de production.
OriginalL'auteur SubOptimal
J'ai eu le même problème l'exécution de Java 1.7 Application Web Java 1.7 Weblogic server 12C, tout en essayant de déployer l'erreur se produit:
De toutes les classes dans le cadre du projet, il est arrivé qu'avec la classe de instrumenté, aClassPathWithClassName (dans la sortie d'erreur ci-dessus).
Ma solution locale:
Recherchez javassist lib utilisée par l'application sur le POM et le mettre à jour. Ici, il a été 3.10.0.GA, changé de 3.24.1-GA.
OriginalL'auteur LucasNz