我有以下xml进来。
<?xml version="1.0" encoding="UTF-8"?>
<root>
<case>
<issue>
<issueid>123</issueid>
</issue>
<issue>
<issueid>456</issueid>
</issue>
</case>
<case>
<issue>
<issueid>789</issueid>
</issue>
</case>
</root>
xml的摘要是每个案例都会有多个问题。每个问题可以有一个来源。
现在,我必须使用<issueid>
值来处理每个问题并点击其余服务,以检索与该问题相关的源。
然后我必须按以下方式重构xml:
<?xml version="1.0" encoding="UTF-8"?>
<root>
<case>
<issue>
<issueid>123</issueid>
<source>s1</source>
</issue>
<issue>
<issueid>456</issueid>
<source>s2</source>
</issue>
</case>
<case>
<issue>
<issueid>789</issueid>
<source>s3</source>
</issue>
</case>
</root>
完成上述任务的最佳方法是什么,以便分割案例,拆分问题,为问题指定来源,汇总所有案例以及汇总与案例相关的所有问题变得更加容易?
有什么建议吗?
答案 0 :(得分:0)
你的问题不清楚。
Spring Integration提供了XPathMessageSplitter
组件,可以应用于第一级//case
。然后第二个XPathMessageSplitter
必须处理//issue
。流程中的下一个组件应该类似于XPathTransformer
,以便为您的服务提取//issueid
值。
后向逻辑有点棘手,因为Spring Integration中没有内置的xml-aggregator
。但您可以通过某些自定义MessageGroupProcessor
来实现这一目标,例如从组中的所有消息构建XML作为String。
答案 1 :(得分:0)
你的问题有点模糊,但无论如何我都会尽力回答。
让我们想起第一部分。你可以做类似下面的事情
<si:chain id="xmlInputchain" input-channel="xmlInputChannel" output-channel="aggregatorChannel">
<si:service-activator id="xmlRequestHandler" method="xmlRequestProcessing" ref="xmlRequestService" />
<si:splitter/>
<si:service-activator id="webService" method="webserviceMethod" ref="webServiceClient" />
</si:chain>
这将分解每个案例,并且在您的webserviceClient中,您可以针对每个问题调用webserivce并将信息存储在数组中并将其转发到aggregatorChannel
对于第二部分(aggregatorChannel),这个Spring页面有一些关于聚合的例子
http://docs.spring.io/spring-integration/docs/2.0.0.RC1/reference/html/aggregator.html