jax-ws/wsimport 生成 WebMethod with void return - 相同的 Request/ResponseWrapper
我正在使用客户端的 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 生成的代码具有 void 返回,并且在收到响应时,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);
当我调用 时,我可以看到 SOAP 请求被发送到服务器,服务器使用有效的 SOAP 响应进行响应:port.request( paramOne, paramTwo, requestList )
<soapenv:Envelope ...>
<soapenv:Header />
<soapenv:Body>
<requests ...>
<paramOne>1</paramOne>
<paramTwo>2</paramTwo>
<requestList>
<!-- various elements that JAXB has generated code for -->
但是,当我在调试模式下运行我的应用程序时,我可以在调试器变量视图中看到每个实例,但是由于具有 with 或 ,后者为 null,而后者为我提供的 。RequestType
RequestsType
<xsd:choice>
RequestData
ResponseData
RequestData
我已经在其他项目上成功地使用了 JAX-WS,但在这些情况下,它生成的代码具有以 WebResult 命名的非 void 返回类型。在这个项目中,我认为我没有得到WebResult,因为JAX-WS已经决定请求和响应类型是相同的,它可以重用相同的对象 - 但是我如何让它使用来自响应的数据来更新该对象?@WebResult