web-dev-qa-db-ja.com

Tomcat 7-サーブレット3.0:定数プールの無効なバイトタグ

  • Tomcat 7.0.16
  • Java 1.6.0_22
  • CentOS 5.6

Web.xmlをサーブレット3.0(以前は2.4を実行していたアプリから)に切り替えたところ、次のエラーが表示されています(org.Apache.Tomcat.utilのファインロギングをオンにしました)。

mtyson  FINE: Scanning JAR [file:/usr/Java/jdk1.6.0_22/jre/lib/ext/jcharset.jar] from classpath
mtyson  Jul 19, 2011 10:04:40 AM org.Apache.catalina.startup.HostConfig deployDirectory
mtyson  SEVERE: Error deploying web application directory ROOT
mtyson  org.Apache.Tomcat.util.bcel.classfile.ClassFormatException: Invalid byte tag in constant pool: 60

PDATE: Tomcat 7.0.19を試してみた-同じ結果

30
mtyson

それはあなたの問題ではないかもしれませんが、私のものは これと同じ -com.ibm.icu:icu4jの古いバージョンでした。ビルド構成ごとに変更して古い推移的な依存関係を除外し、明示的に最新バージョン(4.8)に依存することで問題を解決しました。

23
James A Wilson

追加中

metadata-complete="true" 

あなたのweb.xmlに問題をソートする必要があります

<web-app version="3.0"
         xmlns="http://Java.Sun.com/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://Java.Sun.com/xml/ns/javaee http://Java.Sun.com/xml/ns/javaee/web-app_3_0.xsd"
         metadata-complete="true">

これは、Tomcatにアノテーションのクラスをスキャンしないよう指示します。 http://www.tomcatexpert.com/blog/2011/10/12/how-use-fragments-and-annotations-configure-your-web-application

30
KeithM

ありがとう あなたの答えはジェームズ・A・ウィルソン -あなたが提案したようにicu4jを更新すると、私のweb.xmlでversion = "3.0"を維持することができます(長期的には好まれます)。

icu4j 2.6.1は動作しなかったバージョンでしたが、NEXTバージョン3.4.4にアップグレードするとこの問題は解決します。最新バージョンのicu4j(49.1)は、バージョン3.4.4よりも4MB大きいため、行っていません。

これは、推移的な依存関係バージョンをロックするためのMaven構成スニペットです(明示的な依存関係を追加せずに)。

<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>com.ibm.icu</groupId>
            <artifactId>icu4j</artifactId>
            <version>3.4.4</version>
        </dependency>
    </dependencies>
</dependencyManagement>
19
Steve Jones

これは、ビルドに含まれる互換性のないジャスパーjarであり、Tomcat 7のjasper.jarと競合することが判明しました。

3
mtyson

今日、私は同じ問題にぶつかりました。私の場合、依存関係はcom.google.code.findbugs:annotations:jar:1.3.8を介して発生していました。つまり、このライブラリはビルド時にのみ使用され、アノテーションを使用してfindbugの警告をオフにします。この場合、バージョンを変更する代わりに、依存関係スコープを変更するだけで、実行時にライブラリを取得しない方が安全です。

<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>com.ibm.icu</groupId>
            <artifactId>icu4j</artifactId>
            <scope>provided</scope>
        </dependency>
        ....
3
Assen Kolov

これはweb.xmlファイルを自分で解析するバグだと思います

これを使用すると私にとってはうまくいきます...

<web-app version="2.5" xmlns="http://Java.Sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://Java.Sun.com/xml/ns/javaee http://Java.Sun.com/xml/ns/javaee/web-app_3_0.xsd">

<session-config> <tracking-mode>COOKIE</tracking-mode> </session-config>

Web-app_3_0.xsdスキーマでversion = "2.5"を使用し、2.5ではなく3.0仕様の一部であるsession-config tracking-modeが存在することに注意してください(AFAIK)

2
Mark

私は1週間から同じ問題に直面していましたが、icu4j.2.1.jarファイルを最新バージョンのjarに置き換えるだけで解決しました。

1
Ashish Malhotra

フォルダーを削除し、jarを再ダウンロードすることで解決しました

0
Dez Udezue

バージョン2.6.1では。 com.ibm.icu.impl.data.LocaleElements_zh__PINYIN.classは無効です。唯一の解決策は更新することであり、他の解決策は単なる回避策です。

プロジェクトで次のテストを実行することで確認できます(icu-x.x.x.jarがクラスパスにある場合):

@Test public void testValidityOfLocaleElements_zh__PINYINJar() throws ClassNotFoundException { getClass().forName("com.ibm.icu.impl.data.LocaleElements_zh__PINYIN"); }

0
Michiel Rop

Java、Tomcat、またはプロジェクトの依存関係をアップグレードせずに、アプリケーションを少し変更するだけで、まったく同じエラーが発生し始めました。 icu4j 2.6.1があります

かなりの時間を費やしてicu4jをさまざまな新しいバージョンにアップグレードしようとした後(icuのバージョンが4.8.xから49.xx、50.xxなどに変わったことに気づき、驚くべきことに、誰かが4.9.0のビルド中にそれを太らせたに違いありません。 )、問題が見つかりました。

マイナーな変更により、hibernateにマップされる新しいクラス(クラスA)が送信されました。 HibernateはWARを開始すると初期化され、マッピングに対して永続オブジェクトをチェックします。コードベースに同じ名前と同じパッケージを持つ列挙型(クラスB)である別のクラスがありました。その重複クラスを修正すると、問題はなくなりました。

0
Ahmet Emre