ホームページ >Java >&#&チュートリアル >サーブレットの起動時に JBoss サーバーが java.lang.VerifyError をスローするのはなぜですか?
Java.lang.VerifyError: 根本原因の調査
悪名高い java.lang.VerifyError が再び発生、その不可解なエラー メッセージで根本的な問題がわかりにくくなっています。この記事では、この複雑なエラーが発生する潜在的な理由を詳しく掘り下げ、特に発生した問題に焦点を当てます:
シナリオ:
A java.lang.VerifyError は、JDK を使用してコンパイルされたサーブレットをホストする JBoss サーバーの起動時に発生します。 1.5.0_11。 JDK 1.5.0_15 で再コンパイルしても成功しません。メソッド名を変更すると、エラーが部分的に出力されたメソッド シグネチャに変換されます。
根本原因の調査:
1。ライブラリの不一致:
VerifyError は、多くの場合、コンパイル時と実行時に異なるライブラリを使用することが原因で発生します。報告されたケースと同様に、1 つのライブラリ (例: Xerces 1) でコンパイルし、実行時に別のライブラリ (例: Xerces 2) を使用すると、バイトコードの不一致が発生する可能性があります。
2.メソッド署名の不一致:
Java は、メソッド呼び出しが適切かどうか実行時にバイトコードを検証します。バイトコードが、String 型のメソッドの戻り値を List 型のフィールドに渡すなど、許可されていないアクションを実行しようとすると、VerifyError がスローされます。これらの不一致は、コンパイルと実行の間のクラスまたはメソッド定義の変更によって発生する可能性があります。
3.クラスローダーの問題:
サーバーのクラスローダーが予期しない動作をし、依存関係に違反する順序でクラスをロードすることがあります。これにより、同じクラスの複数のバージョンがロードされ、VerifyErrors が発生する可能性があります。
トラブルシューティングのヒント:
以上がサーブレットの起動時に JBoss サーバーが java.lang.VerifyError をスローするのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。