我正在使用带有JPA的camel 2.10。 我的上下文中有2条路线。 路由1从JPA端点(db表)消耗,进行一些处理(在bean中),然后将消息转发到路由2.如果在处理期间出现问题,则bean返回NULL。
我想在路线2中做的第一件事是检查身体(从路线1转发)是否不是NULL。 因此,我看到了两种可能性: 1)在路线2中使用验证
<route id="route2">
...
<validate>
<simple>${body} != null</simple>
</validate>
2)使用interceptSendToEndpoint来避免将NULL消息发送到路由2全部:
<interceptSendToEndpoint uri="toRoute2" skipSendToOriginalEndpoint="true">
<when><simple>${body} == null</simple></when>
<transform>
<constant>Error Message</constant>
</transform>
<to uri="direct:logError"/>
</interceptSendToEndpoint>
您认为哪种方式更好?
感谢您的建议!
BR 的Matthias
答案 0 :(得分:1)
嗯,这是接口问题。
如果将NULL payload视为错误,我会抛出异常。通过修改处理bean和throw new RuntimeException("some error msg");
而不是return null;
来典型地。如果不可能,你总是可以将bean包装在另一个bean中,而不是返回null - 或者基本上是你在1中做的事情。如果你想做一些错误记录等,异常会挂钩到正常的错误处理程序。
使用截取可能非常强大,但也会使路线不那么明显 - 当您在几年后重新访问代码时。对于这样一个简单的场景来说,这有点过分了。