Spring integration 在Spring集成中有效地使用级联拆分器和聚合器

Spring 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

<?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代码。但是,你已经找到了解决办法,这很好!