0

サーブレット内に新しい JAXB インスタンスを作成しようとすると、jaxb.properties が見つからないという JAXBException が発生します。JAXBContext.newInstance() への呼び出しでクラスローダーを明示的に渡そうとしていますが、それを理解できません。

クラスローダーは次のとおりです。

servlet classloader:    oc4j:10.1.3  
servlet parent classloader:     api:1.4.0  
this classloader:   RestTest.web.ExampleWebApp:0.0.0  
this classloader parent: RestTest.root:0.0.0   

JAXB で生成されたクラスは別のパッケージにあるため、私のサーブレットはパッケージ "com.xyz.ws" にあり、JAXB クラスはパッケージ "com.abc.123" にあります。`でサーブレットから新しいJAXBインスタンスを作成しています

JAXBContext.newInstance("com.abc.123", servletClassLoader)

(私も使ってみましたthis.getClass().getClassLoader()

4

2 に答える 2

1

パッケージに jaxb.properties ファイルはありcom.abc.123ますか? JAXB は、コンテキストを構築するために 1 つ必要です。

于 2009-08-21T13:30:39.570 に答える
0

これで問題が解決したようです(ここにあります):

ステップ 1: JAXB2.0 jar を D:\dev\oc4j10.1.3.0.0\j2ee\home\applib にコピーします (D:\dev\oc4j10.1.3.0.0 は oc4j のインストール場所です) (j2ee\home\applib Thisディレクトリは、すべてのプロジェクト (デプロイされたアプリケーション) の共通ライブラリ ファイルのプレースホルダです。追加されたファイルは、jaxb-api-2.0.jar、jaxb-impl-2.0.jar、jsr173_api-1.0.jar (JAXB2.0 jar はhttp ://jaxb.java.net/ )

ステップ 2: Enterprise Manager (WebBrowser) を介してアプリケーションをデプロイする場合、デプロイメント プランを変更します。

2.1 デプロイの最後のステップ (画面) で、デプロイ プランの編集というボタンをクリックして、デプロイ プランを変更できます。

2.2 ボタンをクリックすると、アプリケーション固有のプロパティが表示されます。リンクのimportedLibraries(importedLibrariesの編集)を選択し、「編集の削除」リンクをクリックして、名前oracle.xmlを入力し、「続行」をクリックしてデプロイメントを終了します。

エラーの理由は、xml.jar (JAXB 1.0) が変数名 oracle.xml の共有 libaray として存在することです ([Enterprise Manager] -> [管理] -> [共有ライブラリ] を参照してください。

上記の手順で達成したことは、アプリケーションのデフォルト (古いバージョンの JAXB) を削除し、OC4J に新しい JAXB2.0 実装 (jar) を強制的に読み込ませることです。

于 2009-08-21T13:52:29.947 に答える