Spring集成 - 在Xpath-splitter之后移动文件

时间:2015-12-03 19:43:15

标签: spring spring-integration splitter

我正在使用Spring集成,我有下一个案例:我正在使用 int-file:inbound-channel-adapter 读取XML文件,然后我拆分了使用 int-xml:xpath-splitter 的文件,我需要在分割后移动文件。

我想要 int-xml:xpath-splitter 的所有功能以及移动文件,我应该实现扩展XPathMessageSplitter的自定义拆分器吗?或者是否有其他方法可以使用开箱即用的组件?

感谢。

<int-xml:xpath-splitter id="salesTransSplitter" 
                   input-channel="salesInputChannel"
                   output-channel="splitterOutChannel" order="1">
    <int-xml:xpath-expression expression="/sales_transactions/trans"/>      
</int-xml:xpath-splitter>   

1 个答案:

答案 0 :(得分:1)

这样的事情应该有用......

<int-file:inbound ... channel="foo" />

<int:publish-subscribe-channel id="foo" />

<int-xml:xpath-splitter input-channel="foo" ... order="1" />

<int-service-activator input-channel="foo" order="2"
      expression="payload.renameTo(new java.io.File('/newDir/' + payload.name)" output-channel="nullChannel" />

如果您想测试重命名是否成功,请发送到nullChannel以外的其他频道 - 布尔值表示成功。

修改

对此感到抱歉;每个消费端点都应支持order,我将打开JIRA问题。

order并非绝对必要;如果不存在order,则将使用它们在配置中出现的顺序;我只是想明确一点。

(至少)有两种解决方法:

  1. BOTH 消费者中删除order属性,它们将按照它们在XML中出现的顺序进行调用。
  2. 将XPath拆分器配置为普通拆分器,支持支持订单...

    <int:splitter id="salesTransSplitter" order="1"
               input-channel="salesInputChannel"
               output-channel="splitterOutChannel" order="1">
        <bean class="org.springframework.integration.xml.splitter.XPathMessageSplitter">
            <constructor-arg value="/sales_transactions/trans" />
        </bean>
    </int-xml:xpath-splitter>