Dynamic 如何在SpringIntegration中轻松地将消息转换逻辑添加和删除到处理流中?

Dynamic 如何在SpringIntegration中轻松地将消息转换逻辑添加和删除到处理流中?,dynamic,spring-integration,type-conversion,Dynamic,Spring Integration,Type Conversion,我一直在玩Spring集成,我不知道如何最好地解决以下问题 假设有XML消息到达通道。这些消息可能有任意的结构,我想把它们转换成我的规范形式,所以我想为每种类型的结构编写自定义转换器,这样我就可以做任何我想做的处理和错误检查 显而易见的事情是连接一个路由器来查看消息并路由到一个合适的转换器,但我认为这意味着我需要将处理流硬编码到指向每个转换器的通道上 我希望避免在不同的转换器和路由逻辑中进行硬配置,我想到的另一种选择是使用一组转换器,这些转换器实现某种布尔canHandle(message),这

我一直在玩Spring集成,我不知道如何最好地解决以下问题

假设有XML消息到达通道。这些消息可能有任意的结构,我想把它们转换成我的规范形式,所以我想为每种类型的结构编写自定义转换器,这样我就可以做任何我想做的处理和错误检查

显而易见的事情是连接一个路由器来查看消息并路由到一个合适的转换器,但我认为这意味着我需要将处理流硬编码到指向每个转换器的通道上

我希望避免在不同的转换器和路由逻辑中进行硬配置,我想到的另一种选择是使用一组转换器,这些转换器实现某种
布尔canHandle(message)
,这样我们只需向每个转换器显示消息,直到有一个转换器“声明”消息或消息用完为止。通过这种方式,我似乎可以在不修改处理流的情况下将转换器注释到配置中


我是Spring集成的新手,我很可能是想错了。在Spring integration中是否有一种常规方法可以做到这一点,我是否错过了一些东西,或者我是否完全错了呢?

有多种方法可以做到这一点。首先想到的是带有选择器表达式的收件人列表路由器:

<recipient-list-router id="simpleDynamicRouter" input-channel="simpleDynamicInput">
    <recipient selector-expression="@handler1.canHandle(payload)" channel="toHandler1"/>
    <recipient selector-expression="@handler2.canHandle(payload)" channel="toHandler2"/>
    <recipient selector-expression="@handler3.canHandle(payload)" channel="toHandler3"/>    
</recipient-list-router>

<transformer ... ref="handler1" />
<transformer ... ref="handler2" />
<transformer ... ref="handler3" />

其中handler1等与您的实现和canHandle()方法有关

另一个选择是编写自己的自定义动态路由器;这里有一个这样做的例子