Home  >  Article  >  Java  >  \"Invalid Byte Tag in Constant Pool: 15\" - Why Does Tomcat 7 Throw This Error When Running on Java 8?

\"Invalid Byte Tag in Constant Pool: 15\" - Why Does Tomcat 7 Throw This Error When Running on Java 8?

Linda Hamilton
Linda HamiltonOriginal
2024-11-04 13:07:301021browse

Invalid Byte Tag in Constant Pool: A Tomcat Issue with Java 8

Encountering an "Invalid byte tag in constant pool: 15" error when attempting to port a webapp from Tomcat 7 to another server running Tomcat 7 with Java 8? This article dives into the issue and offers solutions.

Issue Description:

Upon starting Tomcat, the application may encounter an error as seen in the log catalina.out:

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

Possible Cause:

The error arises due to Java 8 introducing new byte codes that BCEL, the class parsing library used by Tomcat 7, may not be able to process effectively.

Solution:

Official Solution:

According to Tomcat documentation, running Tomcat 7 on Java 8 should work fine.

Annotation Scanning Issue:

However, if annotation scanning is enabled in the web application's web.xml file, issues may surface due to BCEL's inability to handle Java 8 byte codes. In such cases, exceptions like the one below may appear:

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 for Annotation Scanning:

  1. Disable Annotation Scanning: Avoid enabling annotation scanning (set metadata-complete="true" to false in web.xml). This allows Tomcat 7 to function normally. However, this solution disables the scanning of annotations in the webapp.
  2. Update Tomcat: Upgrade to Tomcat 7.0.53 or later, which includes a compiler updated to support Java 8 better.
  3. Exclude Problematic Jars: If annotation scanning must be used and your code is not Java 8 based, add the following line to /etc/tomcat7/catalina.properties:
junit.jar,junit-*.jar,ant-launcher.jar,\
jfxrt.jar,nashorn.jar

This modification ensures that Tomcat skips problematic jars during annotation scanning.

The above is the detailed content of \"Invalid Byte Tag in Constant Pool: 15\" - Why Does Tomcat 7 Throw This Error When Running on Java 8?. For more information, please follow other related articles on the PHP Chinese website!

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn