如何避免null body分多步进入下一个processor

How to avoid null body from entering into next processor in multiple steps

如何限制空主体在一个公共位置进入多个处理器。在下面的代码中,我如何才能在一个地方定义它,而不是在每个处理器上进行空体检查?

<choice>
    <when>
        <simple>${body} != null</simple>
        <process ref="processor1" />
        <choice>
            <when>
                <simple>${body} != null</simple>
                <process ref="processor2" />
                <!-- Splitter -->
                <split>
                    <simple>body</simple>
                    <process ref="processor3" />
                </split>
            </when>   
        </choice>
    </when>
</choice>     

评论里的代码会显示的很烂,所以我post一个答案。 在处理器中做它是一个简单的空检查,没有哲学

public class SomeProcessor implements Processor {

    public void process(Exchange exchange) {
        if(exchange.getIn().getBody() != null){
            // Your processing here
            // Is only performed
            // When body is not null
            // Otherwise null body is being resent
        }
    }

}

编辑(回复评论): 这是不可能的 AFAIK,也不是正确的方法。 Router 你已经在使用的是它应该如何执行。 如果你想丢弃你的消息,我认为这可行(不过我没有检查):

<choice>
    <when>
        <simple>${body} == null</simple>
        #<stop />
        # OR
        #<to uri="wherever-you-want-to-send-nonvalid-messages" />
    </when>
    <otherwise>
        <camel:process ref="processor1" />
        <camel:process ref="processor2" />
        <camel:process ref="processor3" />
        <to uri="where-you-want-to-send-valid-messages" />
    </otherwise>

</choice>

它只会在第一个处理器之前检查空值,显然,所以如果第二个处理器给出空值消息,它不会被丢弃。

我建议您将根全部保留在一起,从而使进一步的空检查变得过时。停止对当前消息进行路由处理的一种快速简便的方法是在 exchange 对象上设置 Exchange.ROUTE_STOP 属性 AND return null:

exchange.getProperty(Exchange.ROUTE_STOP, Boolean.TRUE)

通过添加 <stop> 标签,您可以做到这一点。

<choice>
    <when>
        <simple>${body} != null</simple>
        <stop></stop>            
    </when>   
    <otherwise>
        <process ref="processor2" />
        <!-- Splitter -->
        <split>
        <simple>body</simple>
        <process ref="processor3" />
        </split>
    <otherwise>
</choice>