实现Camel转换

时间:2013-01-24 12:01:32

标签: java apache-camel esb middleware

我有以下Camel路线:

RequestToOrderTransform requestToOrderTransform =
    new RequestToOrderTransform();

from("ghttp:///processOrder")
    .transform(requestToOrderTransform)
    .bean(OrderProcessor.class)
    .to("direct:endOfRoute");

它使用Camel-GAE从GAE servlet(HttpServletRequest)接收processOrder,然后将请求转换为Order POJO,最后处理该顺序({{1 }})。

我想写自己的OrderProcessororg.apache.camel.Expression),到目前为止我有骨架/框架:

requestToOrderTransform

在这里,不知何故,我必须将public class RequestToOrderTransform implements Expression { @Override public <T> T evaluate(Exchange arg0, Class<T> arg1) { // ??? return null; } } (我相信是我从GAE servlet使用者那里获得的)转换为我自己的HttpServletRequest POJO。但我不知道如何首先获得Order。一旦我收到请求,我就可以提取出必要的参数,然后实例化我的新订单实例。但后来我不确定如何处理HttpServletRequest,以便Camel知道路由它而不是原始Order

所以我问:

  1. 如何获取HttpServletRequest的实例(或者我从GAE servlet端点获得的任何对象)?
  2. 如何设置新实例化的HttpServletRequest实例,以便Camel将其用作路由(到Order bean)的单位?
  3. 提前致谢!

1 个答案:

答案 0 :(得分:2)

编写表达式似乎是一种糟糕的方式,当你真正实现的只是一个消息翻译器。但无论如何,只要把身体当作绳子就可以随身携带。

arg0.getIn().getBody(String.class)

我不确定在这种情况下你从GAE获得了什么数据,但是如果它是结构化的(json,xml,平面文件,csv),你可能想要查看与java串联的various data formats对象转换为你。