0

Java 1.4 で xstream を使用していますが、要素に埋め込まれた xml に問題があります。

次のメッセージがあります。

<detail>
<SwiftMessage><SWIFT>hi<SWIFT/><SwiftMessage/>
<detail/>

要素データ hi は、SwiftMessage タグに保持される文字列です。Xstreamがこれらを見て、それらを置き換えていることがわかります

&lt;SWIFT&gt;hi&lt;SWIFT/&gt;

そうしないと、無効な xml が作成されます。私が知りたいのは、この文字列を引用して xstream がこれを行うのを防ぐ方法があるということです。別のシステムに送信されている JMS メッセージの一部であり、代替システムを好まない。

これについてのご意見をお待ちしております。

4

2 に答える 2

2

James が指摘したように、埋め込まれた XML は適切に閉じられていません。 「XML インジェクション」を防ぎます。

私の理解が正しければ、問題の原因は送信プロセスと受信プロセスが対称的ではないことsend( XStream.toXML( JMS.xml() ) )ですreceive( JMS.xml() )。受信手順を に変更するreceive( XStream.fromXML( JMS.xml() ) )XStream.fromXML()、 は XML を解析し、埋め込まれた XML を「エスケープ」から「オリジナル」に戻します。

于 2012-10-29T17:07:25.297 に答える
0

それはあなたの XML の正真正銘の例ですか? タグの終了が間違っています

<detail>
<SwiftMessage><SWIFT>hi<SWIFT/><SwiftMessage/>
<detail/>

そのはず:

<detail>
<SwiftMessage><SWIFT>hi</SWIFT></SwiftMessage>
</detail>

要素名の末尾にあるバックスラッシュは、HTML の br タグのように、要素が空であることを示します。<br/>

したがって、XML は次のように言っています: 詳細タグを開く、SwiftMessage タグを開く、SWIFT タグを開く、テキスト hi、空の SWIFT タグを追加する、空の SwiftMessage タグを追加する、空の詳細タグを追加する。タグは実際には閉じられていません。

受信アプリケーションは、SWIFT 要素が文字列ではなく有効な XML であることを期待していると思いますか? SWIFT 要素を追加する方法を示す必要がある場合があります。これを SwiftMessage 要素の値にフィードすると、文字列値として解釈される可能性が高く、これらの文字は要素を構築するために予約されているため、XML プロセッサが自動的にと で置き換え<ます&lt;>&gt;

それ以外の場合、SWIFT 要素を文字列値と見なしたい場合は、CDATA セクションを使用する必要があります。

于 2011-01-16T12:31:08.547 に答える