gpt4 book ai didi

java - jax-ws/wsimport 生成带有 void 返回的 WebMethod - 相同的 Request/ResponseWrapper

转载 作者:搜寻专家 更新时间:2023-10-30 19:53:44 26 4
gpt4 key购买 nike

我正在处理客户端的 WSDL 文件,该文件对输入和输出消息使用相同的元素定义,但我无法让 JAX-WS/JAXB 解码响应。

<wsdl:message name="invokeServiceRequest">
<wsdl:part element="impl:requests" name="multiRequestWrapper"/>
</wsdl:message>
<wsdl:message name="invokeServiceResponse">
<wsdl:part element="impl:requests" name="result"/>
</wsdl:message>
<wsdl:portType name="GCGatewayPortType">
<wsdl:operation name="requests">
<wsdl:input message="impl:invokeServiceRequest" name="invokeServiceRequest"/>
<wsdl:output message="impl:invokeServiceResponse" name="invokeServiceResponse"/>
</wsdl:operation>
</wsdl:portType>

由于某些原因,wsimport 生成的代码有一个无效的返回值,并且在收到响应时似乎没有更新 INOUT 参数。

/**
* This class was generated by the JAX-WS RI.
* JAX-WS RI 2.1.7-b01-
* Generated source version: 2.1
*/
...
@WebMethod
@RequestWrapper(localName = "requests", targetNamespace = "http://cg.test.com/", className = "com.test.cg.RequestsType")
@ResponseWrapper(localName = "requests", targetNamespace = "http://cg.test.com/", className = "com.test.cg.RequestsType")
public void requests(
@WebParam(name = "paramOne", targetNamespace = "http://cg.test.com/", mode = WebParam.Mode.INOUT)
Holder<String> paramOne,
@WebParam(name = "paramTwo", targetNamespace = "http://cg.test.com/", mode = WebParam.Mode.INOUT)
Holder<String> paramTwo,
@WebParam(name = "requestList", targetNamespace = "http://cg.test.com/", mode = WebParam.Mode.INOUT)
Holder<List<RequestType>> requestList);

当我调用 port.request( paramOne, paramTwo, requestList ) ,我可以看到 SOAP 请求已发送到服务器,服务器以有效的 SOAP 响应进行响应:

<soapenv:Envelope ...>
<soapenv:Header />
<soapenv:Body>
<requests ...>
<paramOne>1</paramOne>
<paramTwo>2</paramTwo>
<requestList>
<!-- various elements that JAXB has generated code for -->

但是,当我在 Debug模式下运行我的应用程序时,我可以看到每个 RequestType调试器变量 View 中的实例,但因为 RequestsType有一个 <xsd:choice>RequestDataResponseData ,后者为空,RequestData正如我提供的那样。

我已经在其他项目中成功使用了 JAX-WS,但在那些情况下,它生成的代码带有 @WebResult和以 WebResult 命名的非 void 返回类型。在这个项目中,我认为我没有得到 WebResult,因为 JAX-WS 已经决定请求和响应类型相同并且它可以重用同一个对象——但是我如何让它用来自回应?

最佳答案

您可以通过指示 JAX-WS 禁用包装来解决此问题。这是通过 JAX-WS 绑定(bind)文件完成的。

<jaxws:bindings xmlns:jaxws="http://java.sun.com/xml/ns/jaxws">
<jaxws:enableWrapperStyle>false</jaxws:enableWrapperStyle>
</jaxws:bindings>

关于java - jax-ws/wsimport 生成带有 void 返回的 WebMethod - 相同的 Request/ResponseWrapper,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10169072/

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