2016-03-22 4 views
1

CXF(2.7.18)に関する問題が突然発生しています。私はTomcat 8.0.28とJD​​K 1.8.0_66の下で走っています。CXFサービスコールが予期しない名前空間のアンマーシャリングエラーで失敗する

問題は最近、適切なヘッダーでサービスコールを受け付けないという問題が発生し始めたことです。こすることは、いくつかのシステムでは動作しますが、他のシステムでは動作しません。次のように

障害が提示:

Unmarshalling Error: unexpected element (uri:"http://www.namedomain.com", local:"loginRequest"). Expected elements are <{https://www.namedomain.com}loginRequest> 

予想外の要素が正しく名前空間の要素であることに注意してください。 「期待される」要素が間違っている - CXFまたはパイプラインの何かが名前空間URIを「https」に再マッピングしている

これを引き起こしている可能性があり、修正する方法はありますか?

答えて

0

問題を特定できました。これは以前のテストでは決して浮かび上がらなかった奇妙なことです。

ここに一般的な概要があります。このWSDLを利用する問題のアプリケーションは、定義からバインディングを生成し、パッケージ 'com.foo'に配置します。

アプリケーションは別のWSDLエンドポイントにも依存しますが、そのモジュールは別にビルドされましたが、衝突するパッケージ名は「com.foo」でした。

以前のテストでは、これは決して浮上しませんでした。

ある時点で、Java 8 & Tomcat 8に移行中に、この問題は特定のボックスで断続的に発生しましたが、他のものでは発生しませんでした。使用しているVMイメージに関する何かが、ロード順序に影響します。それは、我々が負荷の順序に依存していると言うわけではありませんが、衝突を見たことはありません。

外部ライブラリとアプリケーションライブラリの両方に、XmlSchemaアノテーションの名前空間の定義が競合するpackage-info.javaがありました。ロード順序は、Java 8/Tomcat 8の下のある時点で「変更」され、衝突が明白になりました。ロードされた最初のパッケージ情報がキャッシュされ、エラーが発生します。

解決策は、アプリケーションのWSDLバインディングコードの生成を変更して別のパッケージに配置し、衝突を回避することです。

関連する問題