我開始使用si-xml:xpath-router,但遇到了障礙。我使用正確的路由器但錯誤的實施?如果我使用不正確的路由器,我應該使用哪一個路由器,即默認路由器,有效載荷類型,還是簡單的SpEL表達式?如何使用Spring Integration 2.0.5基於內容路由消息?
使用案例:
我需要基於路由的負載內容的消息。請求包含一個元素,我需要執行的'action'包含在其中一個屬性中,請參閱下面的屬性「命令」。
示例入站請求(來自Web服務)。
<Request>
<Records>
<Record>
<data key="name" value="Jack Bauer" />
<data key="command" value="sendSMS" />
</Record>
</Records>
</Request>
的僞碼是:
- 馬歇爾消息。基於值
- 路線,通過XPath的路由器
但我發現了錯誤:
不受支持的有效載荷類型[javax.xml.transform.dom.DOMResult中]
爲了解決這個問題,我曾嘗試:
使用ResultToDocumentTransformer向變換器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"/>
我的確有一個想法是接受請求消息並將其轉換爲一個簡單的POJO,其中包含'name'和'command'字段。然後,我可以寫一個SpEL表達式,如'payload.command' –