1

http://v3.core.com.productserve.com/ProductServeService.wsdlで定義された Web サービス用の Java クライアントを生成しようとしています。

CXF と Axis2 の両方から Java の wsimport と wsdl2java を試しました。

例えば

wsimport -p productserve -XadditionalHeaders  http://v3.core.com.productserve.com/ProductServeService.wsdl

3 つすべてが同じ問題で ApiPortType.java を生成します。getProductList メソッドの戻り値の型は void であり、@WebResult アノテーションはありません。WSDL からの他のすべての操作は、Java コードに適切にマップされます。

WSDL を詳しく調べましたが、問題の原因と、3 つのツールすべてが操作の正しい戻り値の型を生成できない理由を特定できません。

何か案は?

4

1 に答える 1

5

この Web サービスは、ドキュメント リテラルでラップされた Web サービスのカテゴリに分類されます。次の点が当てはまります。

  • バインディングはドキュメント/リテラル​​です
  • 操作の (getProductList()) 入出力メッセージには、それぞれ 1 つの wsdl:part が含まれます
  • リクエスト部分は操作と同じ名前の XSD 要素を参照します
  • 応答部分は、操作 + 「応答」と同じ名前の XSD 要素を参照します。

したがってvoid、リターンがありますが、実際には 4 つの結果があります。

  • Holder<List<Product>> oProduct
  • Holder<Integer> iTotalCount
  • Holder<List<RefineByGroup>> oActiveRefineByGroup
  • Holder<List<RefineByGroup>> oRefineByGroup

CXF ( を使用wsimport) はWRAPPED操作のスタイルを生成しました。BARECXF を使用してスタイルを生成することもできます。

wsdl2java -bareMethods http://v3.core.com.productserve.com/ProductServeService.wsdl

この方法では、次の代わりに:

@WebMethod
@RequestWrapper(localName = "getProductList", targetNamespace = "http://v3.core.com.productserve.com/", className = "productserve.GetProductList")
@ResponseWrapper(localName = "getProductListResponse", targetNamespace = "http://v3.core.com.productserve.com/", className = "productserve.GetProductListResponse")
public void getProductList(
...

あなたが得るでしょう:

@WebResult(name = "getProductListResponse", targetNamespace = "http://v3.core.com.productserve.com/", partName = "return")
@WebMethod
public GetProductListResponse getProductList(
    @WebParam(partName = "parameters", name = "getProductList", targetNamespace = "http://v3.core.com.productserve.com/")
    GetProductList parameters
) throws ApiException;
于 2012-06-22T09:37:07.367 に答える