2016-11-28 4 views
5

以下のようなSOAPメッセージレスポンスの処理方法は?ここSOAPレスポンス本体にノードがないプレーンテキストがあります

<S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/" xmlns:new="http://foo/bar"> 
    <S:Header/> 
    <S:Body>OK</S:Body> 
</S:Envelope> 

WSDLの私の定義は以下のとおりです。

<wsdl:operation name="MyRequest"> 
      <wsdl:input message="tns:MyRequest" name="MyRequest"> 
      </wsdl:input> 
      <wsdl:output message="tns:MyRequestResponse" name="MyRequestResponse"> 
      </wsdl:output> 
</wsdl:operation> 

<xs:element name="MyRequestResponse" type="xs:string"/> 

サービス:

@WebMethod(operationName = "MyRequest") 
@WebResult(name = "MyRequestResponse", targetNamespace = "http://foo/bar", partName = "parameters") 
@SOAPBinding(parameterStyle = SOAPBinding.ParameterStyle.BARE) 
public String MyRequest(
      @WebParam(name = "MyRequest", targetNamespace = "http://foo/bar", partName = "parameters") 
      MyRequest parameters); 

私はインターセプターを使用してノードと応答 'OK' をラップしようとしました。しかし、JAXB/WSDLレイヤー自体で処理することで、よりクリーンな方法があるのだろうかと思います。

+0

OKレスポンスを生成または使用しようとしていますか? – approxiblue

+0

私はMule ESBからそれを消費しようとしています。 – HanuAthena

+0

このSOAP応答は、あなたのWSDLによると**無効です**。 次のようなものを持っている必要があります <新しい:MyRequestResponseののxmlns:新しい= "のhttp:// fooの/バー"> OK \t あなたが実際にこの応答を生成するために、JAX-WS実装を使用しましたか? – cdan

答えて

3

これは、仕様に応じて有効なSOAP 1.1 Body要素ではありません。実際、それはSOAPレスポンスではありません。

有効なSOAP応答ではないため、複雑なパラメータを送信しないため、SOAPフレームワークを使用してこのようなサービスを呼び出すことはほとんどありません。

独自の形式のプレーンなHTTPサービスとして扱う方が意味があります。 HTTP POSTリクエストを送信し、レスポンスから本文内の「OK」部分を抽出します。名前空間接頭辞が変更されることが予想されない場合は、XMLを解析せずに行うこともできます。

「ハック」のように見えるにもかかわらず、フレームワークをハックして仕様外で動作させることを余儀なくされる設定よりもはるかにクリーンでメンテナンス可能な方法です。コードを調べて、あなたを追いかける人は、この片眼のSOAPを扱う背後にあるすべての歯車を理解する時間を費やさなければならないでしょう。

しかし、場合によっては仕様に準拠した有効な複合SOAP本体があり、場合によってはOKなどの無効な任意のコンテンツがあります。SOAP解析の再実装は正当化されず、インターセプタが無効なメッセージをインライン仕様と一緒に。混合されたケースでは、メッセージがインターセプタによって事前に処理され固定されていない限り、SOAP/WSDL仕様を使用してマップする簡単でクリーンな方法はないと思います。

0

hereを見ると、SOAPエンベロープの基本的なXSD形式がわかります。だからあなたの "OK"文字列を取って、それを文字列タグである本文の文字列要素に追加すれば、あなたは大丈夫です。

<xs:element name="message" type="xs:string"/> 

そしてXML用として

<message>OK</message> 

は、今のところ、あなたのXMLが有効ではありません。本文とヘッダーの要素にはデータ型が必要です。

+0

HanuAthenaは、既に受信した応答を制御できないとコメントで説明しました。あなたがここに書いたのは二日前に既に提案されたものです。 –

+0

ああ、それは見えませんでした。その答えは答えではありません。 –

+0

とにかく - 無効なxmlを入力として受け入れるsoapエンドポイントを実行することは期待できません –

関連する問題