gpt4 book ai didi

java - wsimport 缺少单个操作的@WebMethod

转载 作者:行者123 更新时间:2023-11-29 08:06:06 27 4
gpt4 key购买 nike

我正在尝试为 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 服务类别。以下几点是正确的:

  • 绑定(bind)是文档/文字
  • 操作的 (getProductList()) 输入/输出消息每个包含一个 wsdl:part
  • 请求部分引用与操作同名的XSD元素
  • response部分指的是与operation同名的XSD元素+“Response”

所以你有void返回,但实际上有 4 个结果:

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

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

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;

关于java - wsimport 缺少单个操作的@WebMethod,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11152997/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com