すべて、Axis2.1.5でWebサービスクライアントを呼び出すJUnitテストを作成しようとしていますが、WS-Addressingを使用するように正確に設定する方法について混乱しています。
wsdl2javaを使用してクライアントスタブを生成し、axis2バイナリディストリビューションのaxis2.xmlとモジュールリポジトリを使用しています。
私はWS-AddressingのMemberSubmissionバージョンを使用する必要があることを知っており、 (オプションを使用して)正しく設定されていると思いますが、ヘッダーが正しく生成されていないようです。(SOAPMonitorモジュールがどのように機能するかがわからないため、「そうです」と言います。そのためのヒントも歓迎します!)
ただし、私の主な混乱は、アドレス指定モジュールを「エンゲージ」するために正確に何が必要かということです。アドレス指定モジュールへの参照を持つaxis2.xmlファイルを使用してConfigurationContextを設定するだけで十分ですか?このような?:
//standard out of the box axis2 configs
ConfigurationContext myConfigContext = ConfigurationContextFactory
.createConfigurationContextFromFileSystem("C:/devapps/axis2-1.5.1/repository","C:/devapps/axis2-1.5.1/conf/axis2.xml");
Options options = new Options();
EndpointReference targetEPR = new EndpointReference(
"https://host:port/service.asmx");
options.setTo(targetEPR);
//I believe this is what I'm supposed to do to specify the
//MemberSubmission version of WS-Addressing
options.setProperty(AddressingConstants.WS_ADDRESSING_VERSION,
AddressingConstants.Submission.WSA_NAMESPACE);
//No idea of this is needed or not.
options.setProperty(AddressingConstants.INCLUDE_OPTIONAL_HEADERS,
Boolean.TRUE);
options.activate(myConfigContext);
options.setAction("someAction");
CaseDetailsServiceStub stub = new CaseDetailsServiceStub(
"https://host:port/service.asmx");
stub._getServiceClient().setOptions(options);
//I'm calling this from a Junit test
assertNotNull(stub.someAction(someParam));
上記のように設定したオプションを使用すると、ログファイルでモジュールがaxis2.xmlからロードされていることがわかります。
[INFO] Deploying module: addressing-1.5.1 - file:/C:/devapps/axis2-1.5.1/repository/modules/addressing-1.5.1.mar
しかし、アドレス指定ヘッダーを取得していないと思います。この時点でサーバーから返されるエラーは次のとおりです。
ヘッダー http://schemas.xmlsoap.org/ws/2004/08/addressing: 最終的な受信者に対するアクションが必要ですが、メッセージには含まれていません。
そのため、「魅力的な」モジュールを参照しているドキュメントもいくつか見ました。この行をコードに追加し、アドレス指定-1.5.1.marをクラスパスに追加しようとすると、次のようになります。
stub._getServiceClient().engageModule("addressing");
次のようなエラーが発生します。
モジュールをエンゲージできません:org.apache.axis2.AxisFaultにアドレス指定しています:モジュールをエンゲージできません:org.apache.axis2.client.ServiceClient.engageModule(ServiceClient.java:358)のsoapmonitor
ただし、ログには他の情報やスタックトレースはありません。そのため、混乱しています。
私が間違っていることについて何か考えはありますか?