0

si-xml:xpath-router の使用を開始しましたが、障害に遭遇しました。正しいルーターを使用していますが、実装が間違っていますか? 間違ったルーターを使用している場合、デフォルト ルーター、ペイロード タイプ、または単純な SpEL 式のどれを使用すればよいですか?

使用事例:

ペイロード コンテンツに基づいてメッセージをルーティングする必要があります。リクエストには要素が含まれており、実行する必要がある「アクション」は、その属性の場合に含まれています。以下の属性「コマンド」を参照してください。

インバウンド要求の例 (Web サービスからのもの)。

<Request>
  <Records>
    <Record>
      <data key="name" value="Jack Bauer" />
      <data key="command" value="sendSMS" />
    </Record>
  </Records>
</Request>

疑似コードは次のとおりです。

  • マーシャルメッセージ。
  • xpath-router 経由の値に基づくルート

しかし、私はエラーが発生しています:

サポートされていないペイロード タイプ [javax.xml.transform.dom.DOMResult]


これを解決するために、私は試しました:

  • ResultToDocumentTransformer を使用して、Transformer Bean に属性「result-transformer」を追加します。エラー= チャネル名の解決に失敗しました ''

  • StringResult を使用して、トランスフォーマーに属性「result-type」を追加します。エラー= サポートされていないペイロード タイプ [org.springframework.xml.transform.StringResult]

  • 上記の両方を追加します。エラー= チャネル名の解決に失敗しました ''

  • true を使用して属性「evaluate-as-string」を追加します。エラー= サポートされていないペイロード タイプです。


以下の元の構成ファイル:

<gateway id="gateway" default-request-channel="requestChannel"
          service-interface="foo.SomeClass" />


<beans:bean id="marshaller"
    class="org.springframework.oxm.jaxb.Jaxb2Marshaller">
    <beans:property name="classesToBeBound">
        <beans:list>
            <beans:value>com.foo.Request</beans:value>
            <beans:value>com.foo.Record</beans:value>
            <beans:value>com.foo.Data</beans:value>
        </beans:list>
    </beans:property>
</beans:bean>

<chain input-channel="requestChannel">
  <poller max-messages-per-poll="10" task-executor="executor">
    <interval-trigger interval="5000" />
  </poller>

  <si-xml:marshalling-transformer marshaller="marshaller"/>

  <si-xml:xpath-router id="instockRouter" resolution-required="true">
    <si-xml:xpath-expression expression="/Request/Records/Record/data[@key='command']"/>
    <si-xml:mapping value="sendSMS" channel="SMSChannel"/>
  </si-xml:xpath-router>
</chain>

<task:executor id="executor" pool-size="8"/>
4

2 に答える 2

2

"=object-to-string-transformer />"マーシャリング後にSpringを使用できます。

于 2011-10-18T04:35:44.813 に答える
0

私が見ることができるものから:

  1. メッセージがゲートウェイに入り、それが requestChannel に転送されます
  2. org.springframework.oxm.jaxb.Jaxb2MarshallerrequestChannel の処理はチェーンに転送され、最初のステップでオブジェクトを使用してマーシャリングしますjavax.xml.transform.dom.DOMResult
  3. ペイロードがDOMResultタイプの場合、xpath-router を使用しようとします。

私の知る限り、XPath ルーターは、メッセージ ペイロードがプレーン XML を内部に含む文字列型の場合、正常に動作します。したがって、xpath ルーターを使用する前にメッセージをマーシャリングするのではなく、最初に xpath ルーターを使用することをお勧めします。

オブジェクトをマーシャリングする場合、それはDOMResult型になり、対処する必要がありますDOMResult(悲しいですが本当です:))

...とにかく、DOMResult はメッセージ ペイロードとして使用したいものではないと思います。マーシャリングとアンマーシャリングを間違えたのではないでしょうか?

于 2011-08-04T15:49:33.973 に答える