Tôi đang làm việc với tệp WSDL của khách hàng sử dụng cùng định nghĩa phần tử cho các thông điệp đầu vào và đầu ra, nhưng tôi gặp sự cố khi nhận JAX-WS/JAXB để điều chỉnh phản hồi.jax-ws/wsimport tạo WebMethod với void return - cùng Yêu cầu/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>
Vì lý do nào đó, mã được tạo bởi wsimport có khoảng trống và thông số INOUT dường như không được cập nhật khi nhận được phản hồi.
/**
* 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);
Khi tôi gọi port.request(paramOne, paramTwo, requestList)
, tôi có thể thấy rằng các yêu cầu SOAP được gửi đến máy chủ, mà phản ứng với một phản ứng SOAP hợp lệ:
<soapenv:Envelope ...>
<soapenv:Header />
<soapenv:Body>
<requests ...>
<paramOne>1</paramOne>
<paramTwo>2</paramTwo>
<requestList>
<!-- various elements that JAXB has generated code for -->
Tuy nhiên, khi tôi chạy ứng dụng của tôi trong chế độ gỡ lỗi , Tôi có thể xem từng trường hợp RequestType
trong chế độ xem biến trình gỡ lỗi, nhưng vì RequestsType
có một số <xsd:choice>
với RequestData
hoặc ResponseData
, trường hợp sau là rỗng và RequestData
là như tôi đã cung cấp.
Tôi đã sử dụng thành công JAX-WS trên các dự án khác, nhưng trong những trường hợp đó, mã được tạo với loại trả về @WebResult
và không có giá trị được đặt tên sau WebResult. Trong dự án này, tôi nghĩ rằng tôi không nhận được WebResult vì JAX-WS đã quyết định rằng các kiểu yêu cầu và đáp ứng giống nhau và nó có thể tái sử dụng cùng một đối tượng - nhưng làm cách nào để cập nhật đối tượng đó với dữ liệu từ phản ứng?
Bạn có thể vui lòng đăng tài liệu WSDL của mình không? – Phani