Pracuję z plikiem WSDL klienta, który używa tej samej definicji elementu dla komunikatów wejściowych i wyjściowych, ale mam problem z uzyskaniem JAX-WS/JAXB, aby anulować reakcję.jax-ws/wsimport generuje WebMethod z odwołaniem void - to samo żądanie/odpowiedźWrapper
<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>
Z jakiegoś powodu, kod generowany przez wsimport ma powrotu void, a params INOUT nie wydają się być aktualizowane po otrzymaniu odpowiedzi.
/**
* 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);
Kiedy zadzwonić port.request(paramOne, paramTwo, requestList)
, widzę, że żądanie SOAP jest wysyłany do serwera, który reaguje z poprawną odpowiedź SOAP:
<soapenv:Envelope ...>
<soapenv:Header />
<soapenv:Body>
<requests ...>
<paramOne>1</paramOne>
<paramTwo>2</paramTwo>
<requestList>
<!-- various elements that JAXB has generated code for -->
Jednak gdy uruchamiam moją aplikację w trybie debugowania Widzę każdą instancję RequestType
w widoku zmiennych debuggera, ale ponieważ RequestsType
ma <xsd:choice>
z RequestData
lub ResponseData
, ta ostatnia ma wartość null, a RequestData
jest taka, jak podałem.
Z powodzeniem użyłem JAX-WS w innych projektach, ale w tych przypadkach wygenerował kod z @WebResult
i bez odwrotnym typem zwracanym po WebResult. W tym projekcie, myślę, że nie dostaję WebResult, ponieważ JAX-WS zdecydował, że typy żądania i odpowiedzi są takie same i może ponownie użyć tego samego obiektu - ale jak mogę go zaktualizować ten obiekt danymi z odpowiedź?
Czy możesz wysłać swój dokument WSDL? – Phani