2

私はWebサービスを初めて使用します。私はいくつかの問題に直面しました。サーバー側では、spring-wsを使用しています。クライアント側では、jax-wsを使用しています。wsimportツールを使用して、wsdlに従ってJavaクラスを生成しました。

すべて正常に動作しますが、何らかの理由でjax-wsが配列を解析して正しくリストしないため、すべてのリストが空になります

私は絶対に、応答が正しく形式化されていることを確信しています。soapuiでテストしました。また、ロギングインターセプターを使用してアウトカミング応答をログに記録しています。

以下は応答の抜粋です

応答は次のようになります

<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">
   <SOAP-ENV:Header/>
   <SOAP-ENV:Body>
      <firstElementResponse>
         <name>hello world text</name>
         <name>hello world text</name>
         <name>hello world text</name>
      </firstElementResponse>
   </SOAP-ENV:Body>
</SOAP-ENV:Envelope>

およびwsdlのスニペット

<xs:complexType name="sayHelloResponseType">
  <xs:sequence>
    <xs:element maxOccurs="unbounded" minOccurs="0" name="name" type="xs:string"/>
  </xs:sequence>
</xs:complexType>

クライアントコードを生成するには、wsimportを使用します。

SayHelloResponseType resp = serv.sayHello(r);
List<String> name = resp.getName();
System.out.println(name.size());

ありがとうございました。どんな助けでも大歓迎です。

4

2 に答える 2

2

これは、wsdl shemaを計算しない、単なる無効な応答の本体のようです。spring-wsもjax-wsも例外をスローしません。警告なしに、無効なデータを解析してリストを空にします。

org.springframework.ws.soap.server.endpoint.interceptor.PayloadValidatingInterceptor私の日を救った

おそらく次回はそれを避けるためにjax-wsのロギングを微調整する必要があります

于 2010-08-30T16:51:17.830 に答える
0

名前空間が操作タグ内で定義されている場合、SOAPメッセージのCastorアンマーシャリングをどのように処理できますか?で同様の質問に答えました。--Spring-WSを使用している場合は、コントラクトファーストのWebサービスを作成しているので、そのコントラクトを実際に確定するようにしてください。すべての要素を名前空間に配置し、XSDスキーマが要素が修飾されることを期待していることを確認し、Castorマッピングでns-uriおよびns-prefixを宣言します。努力する価値があります。

于 2011-02-16T01:02:37.030 に答える