骆驼路线返回类型变化

时间:2016-02-03 22:55:30

标签: json jackson apache-camel

我有一个Camel路由,它将返回自定义MyPojo.class或自定义RouteRequestException.class。这是路线:

.from("direct:myPojoTest")

// retrieve MyPojo
.to(myPojoQueue)

.choice()
   .when(header(Exchange.EXCEPTION_CAUGHT))
      .unmarshal().json(JsonLibrary.Jackson, RouteRequestException.class)
   .endChoice()
   .otherwise()
      .unmarshal().json(JsonLibrary.Jackson, MyPojo.class)
.end()

//.to("log:mypojo?level=DEBUG&showAll=true&multiline=true")

myPojoQueue返回的是一个JSON字符串,表示MyPojo实例或RouteRequestException。如果发回异常,则会在消息上设置Exchange.EXCEPTION_CAUGHT标头。

问题是如果我的路由以最后一个.end()(绑定到.choice())结束,最终返回调用者的是从myPojoQueue返回的JSON字符串,基本上使unmarshal()语句无效。但是,如果我取消注释.to(“log ...”)语句,则所需的unmarshal()会生效(在任何一种情况下)。

我见过的每个unmarshal()示例都会立即显示.to()。基于那个(以及我看到的问题)我猜测unmarshal()实际上并没有执行,直到调用另一个端点。有谁知道这是真的吗?我是否需要在()中添加“no-op”以使其工作(hacky)?

在这种情况下,我是否应该尝试以不同的方式解散POJO?

我还应该提到我正在使用Camel 2.15.2。

0 个答案:

没有答案