入力メッセージと出力メッセージに同じ要素定義を使用するクライアントのWSDLファイルを使用していますが、JAX-WS/JAXBを使用して応答を非整列化します。何らかの理由でjax-ws/wsimportは、void return - 同じRequest/ResponseWrapperを使用してWebMethodを生成します。
<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
はRequestData
またはResponseData
の<xsd:choice>
を持っているため、後者はnullであり、RequestData
は私が提供したとおりです。
私は他のプロジェクトでJAX-WSをうまく使いましたが、その場合は@WebResult
のコードを生成し、WebResultの名前を付けた非void型の戻り値を返します。このプロジェクトでは、JAX-WSが要求と応答の型が同じで、同じオブジェクトを再利用できると判断したため、WebResultを取得していないと思いますが、どうすればそのオブジェクトを応答?
WSDLドキュメントを投稿してください。 – Phani