axis2およびOC4Jライブラリの競合の解決
-
22-07-2019 - |
質問
Axis2 WebサービスをOC4J 10.1.3アプリサーバーにデプロイしようとしています。
以前は軸1.4を使用していましたが、すべてのファイルで独自の共有ライブラリを作成しました。 1.4に問題があり、1.5でパッチが適用されたため、現在それを使用していますが、すべてのライブラリが含まれているわけではありません。今回は、axis2.warをOC4Jサーバーにデプロイし、axis2管理ページを使用してWebサービスをデプロイしようとしています。
axis2を介してWebサービスをデプロイすると、 java.lang.NoSuchMethodError:javax.jws.WebMethod.exclude()Z
が発生しますが、競合するライブラリが見つかりません。 Axis2には新しいjax-wsライブラリがありますが、OC4Jアプリサーバー上の問題だと思います。 xml.jarを除外しました(古いJAXB 1.0ライブラリがあるため)。これにより、Linuxマシンではなくローカルマシンで問題が解決します。
最初にローカルフォルダーを検索するように展開計画を編集してみましたが、これによりサービスを展開できますが、サービスまたはWSDLにアクセスしようとすると、クラスキャスト例外とJXDocumentBuilderFactoryに関するエラーが表示されます(現時点では正確なエラーはありません)。
Linuxボックスの共有ライブラリとローカルマシンの共有ライブラリを比較し、それぞれで同じライブラリを使用しました(ただし、各jarのバージョンを確認しませんでした)。 axis2がOC4Jにデプロイされ、サービスをaxis2にデプロイする場合、axis2ライブラリ(jax-wsなど)を継承しませんか?
解決
これをorion-application.xmlに追加して、競合する継承ライブラリを削除してみてください:
<orion-application>
<imported-shared-libraries>
<remove-inherited name="PUT_HERE_THE_NAME_OF_THE_LIBRARY"/>
</imported-shared-libraries>
</orion-application>
詳細:削除および/またはデフォルトでインポートされたOracle共有ライブラリの置換
編集:
共有ライブラリを検索しましたが、そこにないことがわかりました。jws-api.jarはブート時にロードされ、簡単に削除できません。
OC4J JAX-WSライブラリを置き換える
OC4JはJAX-WSを予備的にサポートしていますが、残念ながらOC4Jの起動中に古いJAX-WS APIとOracleによる実装をロードすることを意味します。これは、OC4Jの起動の非常に早い段階で、共有ライブラリが実行される前でも発生します。
起動時OC4Jライブラリは、$ ORACLE_HOME / j2ee / home / oc4j.jarブートストラップjarのboot.xmlファイルで構成されます。これを取り除くには:
1-jarファイルを$ {oracle.home} / webservices / lib / jaxws
にコピーします
2-OC4J.jarファイルを解凍
3-Locate META-INF / boot.xml
4-この行のパスをjarに置き換えます:
<code-source
path="${oracle.home}/webservices/lib/jws-api.jar"
if="java.specification.version == /1\.[5-6]/"
/>
5-oc4j.jarの再パッケージ化(MANIFEST.MFを忘れないでください-jar -m META-INF / MANIFEST.MFを使用してください)
元の記事: WebサービスのOC4J構成