0

我有以下骆驼路线:

RequestToOrderTransform requestToOrderTransform =
    new RequestToOrderTransform();

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

它使用 Camel-GAE 接收HttpServletRequest来自 GAE servlet ( processOrder) 的请求,然后将请求转换为OrderPOJO,最后处理该订单 ( OrderProcessor)。

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

public class RequestToOrderTransform implements Expression {
    @Override
    public <T> T evaluate(Exchange arg0, Class<T> arg1) {
        // ???

        return null;
    }
}

在这里,不知何故,我必须将一个HttpServletRequest(我相信这是我从 GAE servlet 消费者那里得到的)转换为我自己的OrderPOJO。但我不确定如何首先获得HttpServletRequest。收到请求后,我可以提取必要的参数,然后实例化我的新订单实例。但是后来我不确定如何处理,Order以便骆驼知道路由它而不是原来的HttpServletRequest.

所以我问:

  1. 如何获取我的实例HttpServletRequest(或我从 GAE servlet 端点获得的任何对象)?
  2. 如何设置我新实例化Order的实例,以便 Camel 使用它作为路由单元(到OrderProcessorbean)?

提前致谢!

4

1 回答 1

2

当您真正实现的只是消息翻译器时,编写表达式似乎是一种糟糕的方式。但无论如何,只要抓住身体作为绳子,然后用它做任何事情。

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

我不确定在这种情况下您从 GAE 获得什么数据,但如果它是结构化的(json、xml、平面文件、csv),您可能需要查看为您执行字符串到 java 对象转换的各种数据格式。

于 2013-01-26T09:42:12.353 回答