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"/>