|
对于最新稳定版本,请使用 Spring Integration 7.0.0! |
XML 消息的拆分
XPathMessageSplitter支持以下以下信息字符串或公文负载。
分流器使用提供的XPath表达式将有效载荷拆分为多个节点。
默认情况下,这会导致节点实例成为新消息的有效载荷。
当每条消息都应该是公文,你可以设置创建文档旗。
其中 a字符串有效载荷被传递,有效载荷被转换后再拆分,再转换回若干字符串消息。
XPath分流器实现消息处理器因此应与合适的端点一起配置(详见下文示例后的命名空间支持示例,提供更简单的配置替代方案)。
以下示例配置了一个使用以下条件的豆子XPathMessageSplitter:
<bean id="splittingEndpoint"
class="org.springframework.integration.endpoint.EventDrivenConsumer">
<constructor-arg ref="orderChannel" />
<constructor-arg>
<bean class="org.springframework.integration.xml.splitter.XPathMessageSplitter">
<constructor-arg value="/order/items" />
<property name="documentBuilder" ref="customisedDocumentBuilder" />
<property name="outputChannel" ref="orderItemsChannel" />
</bean>
</constructor-arg>
</bean>
XPath分路器命名空间支持允许你创建带有输入通道和输出通道的消息端点,如下示例所示:
<!-- Split the order into items and create a new message for each item node -->
<int-xml:xpath-splitter id="orderItemSplitter"
input-channel="orderChannel"
output-channel="orderItemsChannel">
<int-xml:xpath-expression expression="/order/items"/>
</int-xml:xpath-splitter>
<!-- Split the order into items, create a new document for each item-->
<int-xml:xpath-splitter id="orderItemDocumentSplitter"
input-channel="orderChannel"
output-channel="orderItemsChannel"
create-documents="true">
<int-xml:xpath-expression expression="/order/items"/>
<int:poller fixed-rate="2000"/>
</int-xml:xpath-splitter>
从4.2版本开始,XPathMessageSplitter暴露了输出属性(例如:OutputKeys.OMIT_XML_DECLARATION) 性质javax.xml.transform.Transformer当请求发生时有效载荷不是类型org.w3c.dom.Node.
以下示例定义了一个性质,并与输出性质财产:
<util:properties id="outputProperties">
<beans:prop key="#{T (javax.xml.transform.OutputKeys).OMIT_XML_DECLARATION}">yes</beans:prop>
</util:properties>
<xpath-splitter input-channel="input"
output-properties="outputProperties">
<xpath-expression expression="/orders/order"/>
</xpath-splitter>
从这里开始版本4.2这XPathMessageSplitter暴露了迭 代作为布尔标志(默认为true).
这使得下游流中分割节点能够“流式传输”。
与迭 代模式设置为true,每个节点在迭代过程中都会被变换。
什么时候false,所有元素先进行变换,然后分割节点开始发送到输出通道。
(你可以把区别看作“变换,发送,变换,发送”和“变换,变换,发送,发送”。)
更多信息请参见Splitter。