使用camel http处理CachedOutputStream

时间:2018-03-14 01:52:06

标签: apache-camel camel-http

嗨〜我正在使用camel http组件。我无法提取身体信息。

这是我的代码

.log(LoggingLevel.INFO, "ToUri ===> ${body}")
.toD("${body}")
.log(LoggingLevel.INFO, "Result ===> ${body}")
.process(new Processor() {


    public void process(Exchange exchange) throws Exception {

        long startTime = System.currentTimeMillis();
        Message inboundMessage = exchange.getIn();


        Object body = exchange.getIn().getBody();
        String msg = inboundMessage.getBody(String.class);

        System.out.println("body:"+body);
        System.out.println("getInBody msg:"+msg);
        System.out.println("getInBody body:"+body.toString());
    =======================================================================         
body : org.apache.camel.converter.stream.CachedOutputStream$WrappedInputStream@28936ba4
getInBody msg:
getInBody bodybodybody:org.apache.camel.converter.stream.CachedOutputStream$WrappedInputStream@28936ba4

日志是好的作品。像这样

09:56:53.523 INFO  route1 - ToUri ===> https://translation.googleapis.com/language/translate/v2?key=tesetKey&source=en&target=ja&q=hi
09:56:54.545 INFO  route1 - Result ===> {
  "data": {
    "translations": [
      {
        "translatedText": "こんにちは"
      }
    ]
  }
}

我想使用camel提取translatedText。

我该如何处理CachedOutputStream?这是什么?

我搜索骆驼文件并且无法理解。请给我一个解决我问题的提示。

感谢。

3 个答案:

答案 0 :(得分:1)

有关CachedOutputStreamhttp://camel.apache.org/stream-caching.html

的信息,请参阅流缓存

要从处理器获取消息正文作为字符串,您只需执行

 String body = exchange.getIn().getBody(String.class);

这会告诉Camel您希望邮件为String,它会自动将邮件正文从CachedOutputStream转换为String。然后,您可以通过常规Java代码获取所需的文本。

另请注意,您可以使用jsonpath来处理json数据并获取信息,但是它的语法可以稍微学习一下:http://camel.apache.org/jsonpath

答案 1 :(得分:0)

在调用处理器之前,您已经获取了流数据(使用 .log)。流数据显然只能获取一次。尝试删除日志步骤,您可以进入处理器:

.log(LoggingLevel.INFO, "Result ===> ${body}")
.process(new Processor() {

经过 2 天的实验

答案 2 :(得分:0)

你可以使用 convertBodyTo(Class type) 方法,就像这样

.log(LoggingLevel.INFO, "Result ===> ${body}")

.convertBodyTo(String.class)

.process(new Processor() { ... }