限制空体进入xml

时间:2015-07-27 06:13:19

标签: java java-ee apache-camel integration

<camel:route id="messageRoute">    
<camel:from ref="fromMessageQueue" />
<camel:processor ref="queueMessageProcessor" />
<camel:to ref="toMessageQueue" />
</camel:route>

在此代码段中,从q队列接收消息,然后在队列消息处理器中处理它,最后将其放入消息队列。在处理器中处理消息时,交换主体将设置为null。我需要阻止与null body的交换进入消息队列。

3 个答案:

答案 0 :(得分:1)

使用Exchange模式InOut即

<blockquote>
  <camel:route id="messageRoute">    
  <camel:from ref="fromMessageQueue" />
  <camel:processor ref="queueMessageProcessor" />
  **<setExchangePattern pattern="InOut"/>**
  <camel:to ref="toMessageQueue" />
  </camel:route>
</blockquote>

基本上你告诉Camel在同一条消息中,修改它,并发送(Out)回修改过的消息。

答案 1 :(得分:1)

@Amit:这是你可以做的,以避免NPE: 1.根据正文值设置Camel Process中的标题,例如 这里我根据In body内容设置标题IsNull。

public class QueueManagerProcessor implements Processor{

    @Override
    public void process(Exchange exchange) throws Exception {

        if(exchange.getIn().getBody()==null){
            exchange.getOut().setHeader("IsNull", "true");
        }else{
            exchange.getOut().setHeader("IsNull", "false");
        }
    }

}
  1. 在Route Builder中,您可以使用选项和条件

    来应用基于内容的路由
           <xpath>$IsNull = 'false'</xpath>
             <camel:to ref="toMessageQueue" />
    

答案 2 :(得分:1)

尝试使用simple languagecontent based router

<camel:route id="messageRoute">    
    <camel:from ref="fromMessageQueue" />
    <camel:processor ref="queueMessageProcessor" />
    <camel:choice>
        <camel:when>
            <camel:simple>${body} != null</camel:simple>
            <camel:to ref="toMessageQueue" />
        </camel:when>
    </camel:choice>
</camel:route>