我正在尝试为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


这三个都产生具有相同问题的ApiPortType.java。 getProductList方法的返回类型为void,没有@WebResult批注。 WSDL中的所有其他操作都映射为java代码。

我已经详细研究了WSDL,但无法发现问题所在以及为什么所有3种工具都无法为操作生成正确的返回类型。

有任何想法吗?

最佳答案

该Web服务属于文档文字打包的Web服务的类别。以下几点是正确的:


装订是文件/文字
操作的(getProductList())输入/输出消息包含一个wsdl:part每个
请求部分引用与操作同名的XSD元素
响应部分指的是与操作+“响应”同名的XSD元素


因此,您有void返回,但实际上有4个结果:


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


CXF(使用wsimport)已生成WRAPPED样式的操作。您还可以使用CXF生成BARE样式:

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;

07-25 22:56
查看更多