2011-06-23 9 views
0

私はWebサービス開発者です。私のXMLリクエストのすべてで、別のWebサービスに送信します。私はSOAPエンベロープ、SOAPヘッダ、SOAPボディタグを追加する必要があります。応答で私はそれらを無視し、石鹸の体のちょうど子供を解析する必要があります。例:soapタグはJiBXを使用しています

要求:

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:v1="http://schemas.abc.com/v1.0"> 
    <soapenv:Header/> 
    <soapenv:Body> 
     <ns:webservice-abc-Request xmlns:ns="http://schemas.abc.com/v1.0"> 

応答:

<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> 
    <SOAP-ENV:Header/> 
    <SOAP-ENV:Body> 
     <ns:webservice-abc-Response xmlns:ns="http://schemas.abc.com/v1.0"> 

と私はこれらの石鹸タグを定義していない、明らかに両方の要求と応答handling.TheスキーマでのJiBXを使用しています。だから、私が現在やっていることは文字列としてリクエストを受け取り、適切な場所にこれらのSOAPタグを追加してリクエストを送信することです。

対応して、String操作を使用してSOAPタグを削除し、JiBXを使用して残りのメッセージを解析します。

私はよりよいアプローチを知り、これらのString操作を取り除きたいと思います。純粋にJiBXでこれらのことを実装したいと思います。方法はありますか?

ありがとうございました。

答えて

0

JiBXバインディングでflexible = 'true'を使用していますか?これにより、JiBXがSOAPエンベロープを解析しようとするのを防ぎ、SOAP本体のマッピングを定義することができます。

<binding> 
    <mapping name="Envelope" ns="http://schemas.xmlsoap.org/soap/envelope/" flexible="true" ordered="false"> 
     <structure name="Body" ns="http://schemas.xmlsoap.org/soap/envelope/"> 
      ... your envelope binding here! ... 
     </structure> 
    </mapping> 
</binding> 

第2に、Axis2などのWebサービスフレームワークを使用していますか? Axis2はこれらのヘッダを自動的に削除してSOAP本体に簡単に戻すことができます(OMElementとして簡単にStringに変換できます)。そこからJiBXを使用できます。

http://axis.apache.org/axis2/java/core/api/org/apache/axis2/client/ServiceClient.html

+0

たSOAPEnvelope#のgetBodyElementsは()サービスの1のために私のために動作します。すべてではない。私は見てみましょう。私はそれをリクエスト部分でどのように使用するのかを知る必要があります。応答は良いです。 – narayanan

関連する問題