Maison >Java >javaDidacticiel >\'Balise d'octet non valide dans le pool constant : 15\' - Pourquoi Tomcat 7 renvoie-t-il cette erreur lors de l'exécution sur Java 8 ?

\'Balise d'octet non valide dans le pool constant : 15\' - Pourquoi Tomcat 7 renvoie-t-il cette erreur lors de l'exécution sur Java 8 ?

Linda Hamilton
Linda Hamiltonoriginal
2024-11-04 13:07:301139parcourir

Balise d'octet non valide dans un pool constant : un problème Tomcat avec Java 8

Rencontre d'une erreur « Balise d'octet non valide dans un pool constant : 15 » lorsque vous tentez de porter une application Web de Tomcat 7 vers un autre serveur exécutant Tomcat 7 avec Java 8 ? Cet article aborde le problème et propose des solutions.

Description du problème :

Au démarrage de Tomcat, l'application peut rencontrer une erreur comme indiqué dans le journal catalina.out :

org.apache.tomcat.util.bcel.classfile.ClassFormatException: Invalid byte tag in constant pool: 15

Cause possible :

L'erreur survient en raison de l'introduction de nouveaux codes d'octet par Java 8 que BCEL, la bibliothèque d'analyse de classes utilisée par Tomcat 7, peut ne pas être capable de traiter efficacement.

Solution :

Solution officielle :

Selon la documentation de Tomcat, exécuter Tomcat 7 sur Java 8 devrait fonctionner correctement.

Problème d'analyse des annotations :

Cependant, si l'analyse des annotations est activée dans le fichier web.xml de l'application Web, des problèmes peuvent survenir en raison de l'incapacité de BCEL pour gérer les codes Java 8 octets. Dans de tels cas, des exceptions comme celle ci-dessous peuvent apparaître :

SEVERE: Unable to process Jar entry [jdk/nashorn/internal/objects/NativeString.class] from Jar [jar:file:/usr/lib/jvm/jdk1.8.0_5/jre/lib/ext/nashorn.jar!/] for annotations
org.apache.tomcat.util.bcel.classfile.ClassFormatException: Invalid byte tag in constant pool: 15

Solutions pour l'analyse des annotations :

  1. Désactiver l'analyse des annotations : Évitez d'activer l'analyse des annotations (définissez metadata-complete="true" sur false dans web.xml). Cela permet à Tomcat 7 de fonctionner normalement. Cependant, cette solution désactive l'analyse des annotations dans la webapp.
  2. Mettre à jour Tomcat : Mettez à niveau vers Tomcat 7.0.53 ou version ultérieure, qui inclut un compilateur mis à jour pour mieux prendre en charge Java 8.
  3. Exclure les fichiers Jar problématiques : Si l'analyse des annotations doit être utilisée et que votre code n'est pas basé sur Java 8, ajoutez la ligne suivante à /etc/tomcat7/catalina.properties :
junit.jar,junit-*.jar,ant-launcher.jar,\
jfxrt.jar,nashorn.jar

Cette modification garantit que Tomcat ignore les fichiers jar problématiques lors de l'analyse des annotations.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn