8

すべて、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

ただし、ログには他の情報やスタックトレースはありません。そのため、混乱しています。

私が間違っていることについて何か考えはありますか?

4

3 に答える 3

7

addressign.marとsopamoniter.marをプロジェクトのlibまたはクラスパスに配置します。axis2キットからmarを見つけるのに役立ちます

于 2010-04-27T06:35:08.270 に答える
4

org.apache.axis2:addressing私のMavenプロジェクトでは、アーティファクトへの追加の依存関係を宣言する必要がありました。

<dependency>
    <groupId>org.apache.axis2</groupId>
    <artifactId>addressing</artifactId>
    <version>1.6.2</version>
    <classifier>classpath-module</classifier>
</dependency>
MyServiceStub stub = new MyServiceStub(targetEndpoint);
stub._getServiceClient().engageModule("addressing");

ただし、 MavenCentralでSoapMonitorclasspath-moduleのアーティファクトは表示されません。

于 2015-10-15T05:54:46.877 に答える
0

アドレスはSoapヘッダーに直接追加できます。

SOAPHeader soapHeader = soapEnvelope.getHeader();
soapHeader.declareNamespace("http://www.w3.org/2005/08/addressing", "wsa");
于 2021-07-21T06:37:38.657 に答える