Axis2の名前空間/クラスパスの問題

ManoDestra:

私は、そのコード内から複数のWebサービスクライアントを呼び出すWebアプリケーションに取り組んでいます。

私は、各クライアントを生成する際に、各Webサービスは、いくつかの共通の名前空間は、しかし、私は現在、異なるパッケージにこれらの名前空間をマッピングしていました

たとえば、

Webサービスの1のnamespace1 - > com.company.webservice.client1.service

Webサービス2のnamespace1 - > com.company.webservice.client2.service

namespace1は、同じ名前空間のURLを指します。

WSDL2Javaののnamespace2packageオプションを使用します:

// Web Service Client 1's namespace parameter
--namespace2package http://www.multispeak.org/Version_3.0=com.company.webservice.client1.service

// Web Service Client 2's namespace parameter
--namespace2package http://www.multispeak.org/Version_3.0=com.company.webservice.client2.service

私は問題なく、これらのサービスのためのWebサービスのクライアントコードを生成することができると私はそう長く生成されたクライアントの瓶の一方のみが指定したWebサービスの呼び出しのためのクラスパス上にあるように、自分自身で各クライアントの罰金を呼び出すことができます。私はクラスパス上の両方のWebサービスクライアントのjarファイルを置く場合は、Webサービスクライアントの一方のみが(そのそれぞれのクライアントjarをクラスパス上の最初である1)が動作します。

以下の例外を除いて、それを呼び出すしようとすると、他のWebサービスクライアントは失敗します。

java.lang.ClassCastExceptionが:com.company.webservice.client1.service.impl.GetAllMetersResponseDocumentImplはcom.company.webservice.client2.service.GetAllMetersResponseDocumentにキャストすることはできません

私は上記の実際の値の一部を難読化しました。

だから、問題は、Axis2の/ XMLBeansのから解析する与えられたXMLに一致するように適切なクラスを検索する方法についてはしているようです。

両者が一致するように、私は名前空間のマッピングを変更することができ、それがその後罰金に動作します。しかし、の欠点は、私は、これらのクラスは、唯一それがクラスパス上に見つかった最初のクライアントjarからモデルからインスタンス化されることにより、同じパッケージ構造内の同じ生成されたコードを含む複数のWebサービスクライアントの瓶を持っているということです。

私は、各WebサービスクライアントJARの異なる名前空間を保つことができることを、このように行うための方法はありますか?

それとも私は単純に使用する名前空間という、それぞれの名前空間は、すべてのクライアントのために、同じパッケージにマッピングされていることを強制するつもりですか?

うまくいけば、問題は理にかなっているが、私はそれが支援する何かを提供する必要がある場合、私に知らせてください、私は詳細にこの質問を拡大していきますが、うまくいけばのWSDL2Javaを使用してのAxis2 / XMLBeansの/ウェブサービスクライアント生成の知識を持つ人がどうあるべき更に多くの情報なしでこれを答えることができ。

UPDATE 1:私は最終的に与えただけで、Webサービスのクライアントと同じパッケージにではなく、オーダーメイドにつき名前空間マッピングポイントのすべてを作り、クラスパス上のさまざまなJARファイル内の同じクラスの複数のコピーを持つの打撃を受けました。私が好きだろうが、少なくとも、それが動作しないようにエレガントなと。

誰も私が代わりに、各クライアントにコピー特注使用することができ、より良い解決策を考え出すことができる場合、私に知らせてください。

UPDATE 2:このアプローチは、均等に同じ名前空間を使用しているにもかかわらず、今のクラスパスの順序に依存し、コンパイル時エラーが発生し、名前空間のモデルの異なるバージョンを生成し、2つのWebサービスとして動作しません。だから... ...振り出しに戻ります...

Alexandarペトロフ:

私はあなたが各ジャーでGetAllMetersResponseDocumentの2つのバージョンを持っている感覚を持っています。何が起こっていることは、それがクラスのキャスト例外で終わる反対のjarファイルからインタフェースをロードしているということです。私が間違っている可能性があります。

これは、あなたがロードされたjarファイルのいずれかを持っているとき、それが動作する理由です。

あなたは再びお互いにキャストすることはできません同じ型の2つのオブジェクトで終わることができる2つのjarファイル用の2つの異なるクラスローダーで、その結果、クラスローダの分離を持つことができ、このオプションもあります。

UDATE Axis2のは、デフォルトで定義されたクラスローダの分離を持っている場合、私はちょうどactualyチェックし、それはありません。https://axis.apache.org/axis2/java/core/faq.html読んクラスローディングの問題を

また、私は読んで信じているサービスおよびモジュールの分離をこの記事からするお手伝いをします。https://www.developer.com/open/article.php/10930_3589126_2/Avoiding-Mistakes-Made-Using-Axis2.htm

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=171493&siteId=1