0

私はSpring Integrationを使用しています。以下のような文字列 (ペイロード) を取得します。

<Element>
<Sub-Element>5</Sub-Element>
</Element>

<Element><Sub-Element>上記の文字列が実際にどれで 始まるかをテストする必要があります<Element>\r\n <Sub-Element>.

<int:recipient-list-router id="customRouter" input-channel="routingChannel">
    <int:recipient channel="channel1" selector-expression="payload.startsWith('&lt;Element&gt;&lt;Sub-Element&gt;')"/>
    <int:recipient channel="channel2" selector-expression="!payload.startsWith('&lt;Element&gt;&lt;Sub-Element&gt;')"/>
</int:recipient-list-router>

理想的には、最初のルーターがテストに合格する必要がありますが、この場合は不合格です。\r \n などの SpEL に相当するものを見つけるのを手伝ってくれる人はいますか?

4

2 に答える 2

0

ありがとうゲイリー。したがって、作業リスト受信者ルーターは次のようになります

また

<recipient selector-expression="payload matches '(?s)&lt;Element&gt;(\s*)&lt;Sub&gt;(.*)'" channel="channel1"/>
<recipient selector-expression="!(payload matches '(?s)&lt;Element&gt;(\s*)&lt;Sub&gt;(.*)')" channel="channel2"/>

または

<recipient selector-expression="payload matches '(?s)&lt;Element&gt;(.*)&lt;Sub&gt;(.*)'" channel="channel1"/>
    <recipient selector-expression="!(payload matches '(?s)&lt;Element&gt;(.*)&lt;Sub&gt;(.*)')" channel="channel2"/>

キャプチャを保持する場合と保持し()ない場合があります。どちらも機能します。

于 2013-04-02T10:21:31.840 に答える
0

SpEL にはそれらのエスケープはありませんが、正規表現を使用して選択を行うことができます...

<recipient selector-expression="payload matches '&lt;Element&gt;\r\n&lt;Sub-Element&gt;.*'" channel="channel1"/>
<recipient selector-expression="!(payload matches '&lt;Element&gt;\r\n&lt;Sub-Element&gt;.*')" channel="channel2"/>

正規表現に慣れていない場合.*、末尾の は何にでも一致します (したがって、この正規表現は startsWith() と同等です)。

編集:

これは機能しますが、XML 文書の重要でない空白の特定の値に依存することは脆弱であることを指摘しておく必要があると思います。たとえば、クライアントが空白を使用するように変更したり、\n空白を使用しないように変更したりすると、アプリケーションが壊れます。<int-xml:xpath-router/>のようなものを代わりに使用することを検討する必要があります。

于 2013-03-28T18:43:14.070 に答える