2

ここここのチュートリアルに従って、maven と CXF を使用して WS にアクセスするクライアントを作成しました。SoapUI を使用して Web サービスを何度もテストし、結果を受け取りました。しかし、クライアントから同じ Web サービスを呼び出すと、常に空の応答が返されます。Web サービス側では、SoapUI とクライアント アプリケーションの両方の場合に、応答が適切に送信されることを確認しました。これは、クライアント側のコンソールに出力されるものです:

WS init successful. Service class instantiated.
In servlet Calling service now
Action is -- JAX-WS RI 2.1.6 in JDK 6: Stub for http://172.18.40.131:8080/AccountWithCXF/services/AccountSearchActionPort
In servlet after Calling service. list is -> []

誰か助けてくれませんか?

以下は WSDL です。

<?xml version='1.0' encoding='UTF-8'?><wsdl:definitions name="AccountSearchActionService" targetNamespace="http://webservice/" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:tns="http://webservice/" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <wsdl:types>
<schema xmlns="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:tns="http://webservice/" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<import namespace="http://webservice/" schemaLocation="http://172.18.40.131:8080/AccountWithCXF/services/AccountSearchActionPort?xsd=accountsearchaction_schema1.xsd"/>
</schema>
  </wsdl:types>
  <wsdl:message name="getAccountsResponse">
    <wsdl:part element="tns:getAccountsResponse" name="parameters">
    </wsdl:part>
  </wsdl:message>
  <wsdl:message name="getAccounts">
    <wsdl:part element="tns:getAccounts" name="parameters">
    </wsdl:part>
  </wsdl:message>
  <wsdl:portType name="AccountSearchAction">
    <wsdl:operation name="getAccounts">
      <wsdl:input message="tns:getAccounts" name="getAccounts">
    </wsdl:input>
      <wsdl:output message="tns:getAccountsResponse" name="getAccountsResponse">
    </wsdl:output>
    </wsdl:operation>
  </wsdl:portType>
  <wsdl:binding name="AccountSearchActionServiceSoapBinding" type="tns:AccountSearchAction">
    <soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/>
    <wsdl:operation name="getAccounts">
      <soap:operation soapAction="urn:GetAccounts" style="document"/>
      <wsdl:input name="getAccounts">
        <soap:body use="literal"/>
      </wsdl:input>
      <wsdl:output name="getAccountsResponse">
        <soap:body use="literal"/>
      </wsdl:output>
    </wsdl:operation>
  </wsdl:binding>
  <wsdl:service name="AccountSearchActionService">
    <wsdl:port binding="tns:AccountSearchActionServiceSoapBinding" name="AccountSearchActionPort">
      <soap:address location="http://172.18.40.131:8080/AccountWithCXF/services/AccountSearchActionPort"/>
    </wsdl:port>
  </wsdl:service>
</wsdl:definitions>

サーブレットの init() メソッドで Web サービス スタブを設定しています

public void init() throws ServletException {
   super.init();
   service = new AccountSearchActionService();
   System.out.println("WS init successful. Service class instantiated.");
}

Web サービスを呼び出すサーブレットのコード:

AccountSearchAction action = service.getAccountSearchActionPort();
System.out.println("Action is -- "+action);
List<Account> list = action.getAccounts(param);
System.out.println("In servlet after Calling service. list is -> "+list);

検索クエリ 'express' で SoapUI を使用してこの Web サービスを呼び出すと、次のような応答が得られます。

<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
   <soap:Body>
      <ns2:getAccountsResponse xmlns:ns2="http://webservice/">
         <ns2:return>
            <accountId>3067822</accountId>
            <accountName>FBB EXPRESS INC.</accountName>
         </ns2:return>
      </ns2:getAccountsResponse>
   </soap:Body>
</soap:Envelope>
4

1 に答える 1

0

これをデバッグする最も簡単な方法は、要求と応答の XML をキャプチャすることです。

これを行う 1 つの方法は、ロギング インターセプターを送信することです。

もう 1 つの方法は、tcpmon を使用して要求/応答と応答をキャプチャすることです。tcpmon はプロキシのように機能します。あるポートでリッスンするように設定してから、元のサービス host:port に転送します。クライアントが tcpmon ポートにリクエストを送信するようにします。

于 2012-09-13T10:39:08.440 に答える