2017-07-19 15 views
0

製品ベンダーが、構文に関して正しくないSOAPメッセージで私のWebサービスを呼び出しています。 soapメッセージである理由は、販売データを運ぶペイロードの前に冗長なxml宣言があるからです。このインタフェースは、1日に500K件以上のトランザクションを転送することになっています。パフォーマンスを大幅に損なうことなく、2番目のxml宣言を取り除く際の私の選択肢は何ですか? この場合、XML宣言は最初ではないので、以下のようなものは適用できません。 XML構文以外にも、間違っています。soapペイロードから余分なxml宣言を削除する

<xsl:output method="xml" omit-xml-declaration="yes" /> 

SOAPメッセージ

<?xml version='1.0' encoding='UTF-8'?> 
<S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/"> 
<S:Body> 
<ns2:postTransaction xmlns:ns2="http://v1.ws.abc.dtv/"> 
<rawLogString> 
    <?xml version="1.0" encoding="UTF-8"?> <!--unwanted xml declaration--> 
    <Log><!--elements that carry sale data--> 
    </Log> 
</rawLogString> 
</ns2:postTransaction> 
</S:Body> 
</S:Envelope> 

答えて

1

んが、標準準拠のXMLやXSLツールは、それが奇形れるよう、あなたのサンプルSOAPメッセージを処理しません:だけがファイル内の1つのXML宣言とすることができ、もしそこに宣言であり、ファイル内の最初のものでなければなりません。空白でさえも前に来ることはできません。

これは、SOAPメッセージが準拠しているXMLまたはXSLツールによって送信されていないことを意味しています。この時点で

私のアドバイスは、2つのいずれかを行うには、次のようになります。

  1. は、ベンダーに連絡し、そのツールが無効なXMLを放出し、これは固定されなければならないことをしていることを説明しています。
  2. 不要なXML宣言を取り除く独自のプロセスを実装します。そうすると、はメッセージ全体を処理するためにXSLを使用できません。テキストベースの検索と置換ツールを使用する方がよいでしょう。たとえば、問題の宣言を見つけるために、次の正規表現を使用することができ、およびその他のコンテンツを維持しながら、$1でそれを置き換えることは、それを削除します:

    (>\s+)<\?xml [^>]+> 
    
+1

、かなり私は思ったが、直前に確認するために何を望みますか私は大きな男との戦い​​を選ぶ! – chemicalkt2

関連する問題