1

我在 JPA 中使用骆驼 2.10。在我的上下文中,我有 2 条路线。路由 1 从 JPA 端点(db 表)消费,进行一些处理(在 bean 中),然后将消息转发到路由 2。如果在处理过程中出现问题,bean 返回 NULL。

我想在路由 2 中做的第一件事是检查正文(从路由 1 转发)是否不为 NULL。因此,我看到了 2 种可能性:1)在路线 2 中使用 validate

<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马蒂亚斯

4

1 回答 1

1

好吧,这是接口的问题。

如果 NULL 有效负载被认为是错误,我会改为抛出异常。通常通过修改处理 bean 而throw new RuntimeException("some error msg");不是 return null;. 如果不可能,您总是可以将 bean 包装在另一个抛出的 bean 中,而不是返回 null - 或者基本上做您在 1 中所做的事情。如果您想做一些错误记录等,异常也会挂接到正常的错误处理程序中。

使用拦截可能非常强大,但也会使路线不那么明显 - 当您在几年后重新访问代码时。对于这样一个简单的场景来说,这有点矫枉过正。

于 2012-11-12T21:03:40.103 回答