JAXB コンテキスト・ファクトリーの初期設定クラスを検査する

この規則は、V7.0 より前の WebSphere Application Server のバージョンからマイグレーションする場合に発生する可能性のある Java Architecture for XML Binding (JAXB) 初期設定クラスの変更および矛盾に関連したものです。 利用者アプリケーションに問題を発生させた 2 つの JAXB マイグレーション・シナリオがあります。 最初のシナリオは、WebSphere 6.1 Feature Pack for Web Services からマイグレーションされたアプリケーションに関連しています。 2 番目のシナリオは、JAXB 実装をパッケージ化し、WebSphere V7.0 以降にマイグレーションされる利用者アプリケーションに関連しています。

WebSphere V7.0 では、JAXB 2.1 は Java 6 ランタイムの一部として提供されます。 V7.0 より前では、WebSphere 6.1 Feature Pack for Web Services で JAXB 2.1 または 2.2 (V8.0) で使用されるものと異なる初期設定クラスを使用する JAXB 2.0 が提供されていました。 アプリケーションが古い初期設定クラスを使用することを指定した場合、アプリケーションの実行時に、「クラスが見つからない」という例外が生成されることがあります。 初期設定クラスは、javax.xml.bind.context.factory プロパティーを使用して定義できます。 古い初期設定クラスは com.sun.xml.bind.ContextFactory です。 javax.xml.bind.context.factory プロパティーで古いクラス名が設定されている場合、Java 6 で使用可能な JAXB ライブラリーを使用すると、java.lang.ClassNotFoundException を受け取ります。

この規則は、JAXBContext を取得するために使用される javax.xml.bind.JAXBContext.newInstance メソッドをスキャンします。 JAXB を使用している場合は、古いコンテキスト・ファクトリーが使用されていないかアプリケーションを確認してください。 この規則は Java コード内のストリング・リテラル「com.sun.xml.bind.ContextFactory」または「com.sun.xml.bind.DefaultJAXBContextImpl」も検出しますが、これらの値が設定されることが多いプロパティー・ファイルをスキャンしません。 これらは Java システム・プロパティーでも設定できます。

JAXB プロパティーは一般的に jaxb.properties ファイルからロードされます。 アプリケーションのプロパティー・ファイルを手動でスキャンし、古いコンテキスト・ファクトリーが定義されていないかどうかを判別します。

Eclipse内のプロパティー・ファイルをスキャンするには、 Search > File...を選択します。 Containing text フィールドで com.sun.xml.bind.ContextFactory と入力します。 File name patterns フィールドで *.properties と入力します。 さらにストリング com.sun.xml.bind.DefaultJAXBContextImpl の検索を繰り返します。

WebSphere V7 または V8 で JAXB を使用する場合、デフォルトの初期設定クラスは、javax.xml.bind.context.factory プロパティーが設定されていなければ、com.ibm.xml.xlxp2.jaxb.JAXBContextFactory です。

2 番目のシナリオの場合、JAXB 実装を V7 より前のアプリケーションの一部としてパッケージ化した利用者は、WebSphere V7.0 以降にマイグレーションするときに、今説明した問題または振る舞い変更に直面する可能性もあります。 これは、アプリケーションとともに提供される JAXB 実装ではなく、Java ランタイムの一部として提供される JAXB 2.1 または 2.2 バージョンがロードされる場合に発生します。 「 Enabling a third-party JAX-WS application in WebSphere Application Server V7」という記事では、JAXB 実装を引き続け使用したい場合に、クラス・ローダーの問題に対処する方法について説明しています。

追加情報については、以下を参照してください。