2010-12-03 25 views
4

私はSpring WSクライアントを持っています。 wsimportを介してWSDLスタブを生成しました。Spring WS無効なコンテンツタイプ

私がリクエストを送信しようとすると、私は無効なコンテンツタイプの例外を取得:

SEVERE:SAAJ0537:コンテンツタイプが無効です。 SOAPメッセージではなくエラーメッセージである可能性があります スレッド "main"の例外org.springframework.ws.soap.SoapMessageCreationException:InputStreamからメッセージを作成できませんでした:無効なContent-Type:text/html。これはSOAP応答の代わりにエラーメッセージですか?ネストされた例外はcom.sun.xml.messaging.saaj.SOAPExceptionImpl:無効なContent-Type:text/htmlです。これはSOAP応答の代わりにエラーメッセージですか?

送信したメッセージに無効なコンテンツタイプが含まれているか、受信した応答に無効なコンテンツタイプが含まれていることを示していますか?クライアント側の場合は、どのようにコンテンツタイプを設定しますか?

私はSoap UI経由でWebサービスを模擬しようとしました。私は正しい応答を送って受け取ることができます。

編集:私のログに

、要求が送信されていることを示しています:

DEBUG [org.springframework.ws.client.MessageTracing.sent] - 送信要求

その後、私はその例外を受け取ります:

スレッド "main" org.springframework.ws.soap.SoapMesの例外sageCreationException:

答えて

5

問題を解決しました。

私はSOAPコンテンツを送信していないことが判明しました。 SOAPヘッダーが正しく設定されています。しかし、SOAP本文は空です。この問題を解決するために、私が要求しているコンテンツを添付する必要がありました。

GetDeletedRequest request = new GetDeletedRequest(); 
JAXBElement res = (JAXBElement) webServiceTemplate.marshalSendAndReceive(request, new WebServiceMessageCallback() {...} 

後::前

私は春のWS実装にAXIS 1.xのクライアントの実装を移植するに焦点を当てていたので、この間違いは、私が見落とした

GetDeletedRequest request = new GetDeletedRequest(); 
request.setGetDeletedFilter(deleteFilter); // This is the content that I'm missing! 
JAXBElement res = (JAXBElement) webServiceTemplate.marshalSendAndReceive(request, new WebServiceMessageCallback() {...} 

Arjen Poustmaを含む一部の人々は、送信されているものを盗聴するためにtcpmonの使用を提案しました。私はそれを正しく設定して実行することはできませんでした(これは別の無関係の問題です)。しかし、これは私のアプリケーションによって送信されているものを最初に調べるアイデアを与えました。

私は周りを見渡して、無効なコンテンツタイプについてのSpringフォーラムで同様の問題をWS Client using JAXB for marshallingに見ました。最後のポスターは、Web Service Client with Spring-WSで提供された例のように、CommonsHttpMessageSenderを使用するように提案されました(これは良いものです)。私はこの同じ問題を抱えてます私のような別の男が存在することになる1日を知っているので、私はここに私の経験を文書化しています

<property name="messageSender"> 
    <bean class="org.springframework.ws.transport.http.CommonsHttpMessageSender" /> 
</property> 

:CommonsHttpMessageSenderで、私の全体のSOAPエンベロープをプリントアウトすることができました。