9

wsimport を使用して一部のサービスのプロキシを生成すると、結果として得られる各ポートのメソッド シグネチャは、WSDL で指定された複合型を使用していないようです。しかし、他のいくつかのサービスではそうであることに気付きました。

これは複数のサービスで発生していますが、最新の例は Amazon の AWSEConsumerService ( WSDL へのリンク) です。wsimport を使用してサービス プロキシ コードを生成すると、ポートごとに次のようなメソッド シグネチャが取得されます。

@WebMethod(operationName = "ItemLookup", action = "http://soap.amazon.com/ItemLookup")
@RequestWrapper(localName = "ItemLookup", targetNamespace = "http://webservices.amazon.com/AWSECommerceService/2011-08-01", className = "com.aws.CommerceService.ItemLookup")
@ResponseWrapper(localName = "ItemLookupResponse", targetNamespace = "http://webservices.amazon.com/AWSECommerceService/2011-08-01", className = "com.aws.CommerceService.ItemLookupResponse")
public void itemLookup(
    @WebParam(name = "MarketplaceDomain", targetNamespace = "http://webservices.amazon.com/AWSECommerceService/2011-08-01")
    String marketplaceDomain,
    @WebParam(name = "AWSAccessKeyId", targetNamespace = "http://webservices.amazon.com/AWSECommerceService/2011-08-01")
    String awsAccessKeyId,
    @WebParam(name = "AssociateTag", targetNamespace = "http://webservices.amazon.com/AWSECommerceService/2011-08-01")
    String associateTag,
    @WebParam(name = "Validate", targetNamespace = "http://webservices.amazon.com/AWSECommerceService/2011-08-01")
    String validate,
    @WebParam(name = "XMLEscaping", targetNamespace = "http://webservices.amazon.com/AWSECommerceService/2011-08-01")
    String xmlEscaping,
    @WebParam(name = "Shared", targetNamespace = "http://webservices.amazon.com/AWSECommerceService/2011-08-01")
    ItemLookupRequest shared,
    @WebParam(name = "Request", targetNamespace = "http://webservices.amazon.com/AWSECommerceService/2011-08-01")
    List<ItemLookupRequest> request,
    @WebParam(name = "OperationRequest", targetNamespace = "http://webservices.amazon.com/AWSECommerceService/2011-08-01", mode = WebParam.Mode.OUT)
    Holder<OperationRequest> operationRequest,
    @WebParam(name = "Items", targetNamespace = "http://webservices.amazon.com/AWSECommerceService/2011-08-01", mode = WebParam.Mode.OUT)
    Holder<List<Items>> items);

このメソッドは、WSDL で指定された単一の複雑なパラメーター (この場合は ItemLookup オブジェクト) を受け取ると思います。私は根本的に何かを誤解していますか、それともコード生成で何か異常が起こっていますか?

4

1 に答える 1

8

AWS で同様の問題に遭遇しました。Java の API セットアップの説明に従いました (このpdfの 10 ページ)。

ステップ 2 (Eclipse 3.2 の場合) で、次の内容のファイル (推奨される名前は jaxws-custom.xml) を作成する必要があります。

<jaxws:bindings wsdlLocation="http://webservices.amazon.com/AWSECommerceService/AWSECommerceService.wsdl" xmlns:jaxws="http://java.sun.com/xml/ns/jaxws">
 <jaxws:enableWrapperStyle>false</jaxws:enableWrapperStyle>
</jaxws:bindings>

次に、オプション -b jaxws-custom.xml を指定して wsimport コマンドを実行します。

問題が正確に何であるかはわかりませんが、それでうまくいきました。

于 2011-11-09T18:44:51.427 に答える