3

嗨〜我正在使用骆驼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": "こんにちは"
      }
    ]
  }
}

我想用骆驼提取翻译文本。

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

我搜索骆驼文档。但无法理解。请给我一个提示来解决我的问题。

谢谢。

4

3 回答 3

4

有关以下信息,请参阅流缓存:http CachedOutputStream: //camel.apache.org/stream-caching.html

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

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

这将告诉 Camel 您希望将消息作为 aString并且它会自动将消息正文从CachedOutputStreamto 转换为String。然后,您可以通过常规 J​​ava 代码获取您想要的文本。

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

于 2018-03-14T06:52:12.713 回答
0

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

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

.convertBodyTo(String.class)

.process(新处理器() { ... }

于 2021-06-16T09:17:19.233 回答
0

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

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

经过2天的实验

于 2021-05-18T03:18:07.630 回答