Я работаю с WSDL-файлом клиента, который использует те же определения элемента для входных и выходных сообщений, но у меня возникают проблемы с получением JAX-WS/JAXB, чтобы отменить ответ.jax-ws/wsimport создает WebMethod с возвратом void - тот же Request/ResponseWrapper
<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 PARAMS, кажется, не обновляется, когда будет получен ответ.
/**
* 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 -->
Однако, когда я бегу мое приложение в режиме отладки , Я вижу каждый экземпляр RequestType
в представлении переменных отладчика, но потому, что RequestsType
имеет <xsd:choice>
с RequestData
или ResponseData
, последний имеет значение null, а RequestData
- как я уже говорил.
Я успешно использовал JAX-WS для других проектов, но в этих случаях он сгенерировал код с @WebResult
и не-void возвращаемым типом, названным в честь WebResult. В этом проекте я думаю, что я не получаю WebResult, потому что JAX-WS решил, что типы запросов и ответов одинаковы, и он может повторно использовать один и тот же объект, но как я могу заставить его обновить этот объект с данными из ответ?
Не могли бы вы разместить свой документ WSDL? – Phani