Spring integration 在Spring集成中有效地使用级联拆分器和聚合器
我有下面的xmlSpring integration 在Spring集成中有效地使用级联拆分器和聚合器,spring-integration,Spring Integration,我有下面的xml <?xml version="1.0" encoding="UTF-8"?> <root> <case> <issue> <issueid>123</issueid> </issue> <issue> <issueid>456</issueid> <
<?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>
123
456
789
xml的总结是,每个案例都有多个问题。每个问题可以有一个来源。
现在,我必须处理每个问题,并使用
值点击rest服务来检索与该问题相关的源。
然后,我必须按照以下方式重新构造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>
123
s1
456
s2
789
s3
完成上述任务的最佳方式是什么?这样,拆分案例、拆分问题、将问题的来源分配给问题、聚合所有案例以及聚合与案例相关的所有问题变得更加容易
有什么建议吗?你的问题不清楚 Spring Integration提供了
XPathMessageSplitter
组件,该组件可应用于第一级的//case
。第二个XPathMessageSplitter
必须处理//问题。流中的下一个组件应该类似于XPathTransformer
,以提取服务的//issueid
值
反向逻辑有点棘手,因为Spring集成中没有内置的xml聚合器。但是您可以通过一些定制的MessageGroupProcessor
来实现这一点,例如,从组中的所有消息将输出XML构建为字符串。您的问题有点模糊,但无论如何我都会尝试回答
让我们想想第一部分。你可以像下面这样做
<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页面有一些关于聚合的示例
我用java代码代替了MessageGroupProcessor
,完成了我的任务。MessageGroupProcessor
的实现也是java代码。但是,你已经找到了解决办法,这很好!