2009-04-07 11 views
8

Tomcat内で動作しているWebサービスにアクセスしようとするとこのエラーが発生します。LinkageError JAXB 2.0 - > 2.1(Tomcat)

Caused by: java.lang.LinkageError: JAXB 2.0 API is being loaded from the bootstrap classloader, but this RI (from jar:file:/C:/software/tomcat6/webapps/messaging/WEB-INF/lib/jaxb-impl-2.1.5.jar!/com/sun/xml/bind/v2/model/impl/ModelBuilder.class) needs 2.1 API. Use the endorsed directory mechanism to place jaxb-api.jar in the bootstrap classloader. (See http://java.sun.com/j2se/1.5.0/docs/guide/standards/)

私はエラーのためにGoogleで検索し、それを解決する必要が何をした(私はJDKでJAXB-api.jarを、バージョン2.1/libに/承認し、承認/ JDK/JRE/libが入れ)が、それは表示されません。何か効果がある。

私はこれまでこれを持っていなかったので、何が変更されたのか分かりません。私はJDK 6u10を使用します。

+0

[同様の質問への私の答え](http://stackoverflow.com/a/8832530/505893)にも見てください。 – bluish

答えて

7

Java 6u10にはJAXB 2.1が含まれているため、まったく含める必要はありません(6u4以降に含まれています)。

今のところ、Webアプリケーションに含まれるJAXBと、JREに付属するバンドルされたJAXBの間に競合があるようです。 Webアプリケーション(C:/software/tomcat6/webapps/messaging/WEB-INF/lib/jaxb-impl-2.1.5.jar)からJAXB jarを削除して、組み込みバージョンに依存することができます。

1

$ JAVA_HOME/jre/lib/extディレクトリにjaxb jarファイルがある可能性はありますか?ここでは、ブートストラップローダの定義は次のとおりです。

Bootstrap - This class loader contains the basic runtime classes provided by the Java Virtual Machine, plus any classes from JAR files present in the System Extensions directory ($JAVA_HOME/jre/lib/ext). NOTE - Some JVMs may implement this as more than one class loader, or it may not be visible (as a class loader) at all.

(フォームhereを撮影したもの)

あなたは、システム内のJAXBの瓶(少なくともJAXB-APIおよびJAXB-のimplを持っているすべての場所を検索してください)、それらがWebアプリケーションのWEB-INF/libディレクトリまたはtomcatのlibディレクトリにあることを確認してください。

2

環境変数JAVA_ENDORSED_DIRSを定義することをお勧めします。次に、TomcatはこのJavaプロパティを使用します。

-Djava.endorsed.dirs=$JAVA_ENDORSED_DIRS 

保証されたjarファイルをロードするために使用します。したがって、フォルダを作成し、jaxb-api.jar v2.1をそこに置き、そのフォルダを指すように環境変数を定義します。

これは、JREが更新されたときにJVM全体に影響を与えず、プロセスを繰り返す必要がないため、グローバルな承認ディレクトリを使用するよりも優れています。

関連する問題