嗨〜我正在使用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?这是什么?
我搜索骆驼文件并且无法理解。请给我一个解决我问题的提示。
感谢。
答案 0 :(得分:1)
有关CachedOutputStream
:http://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() { ... }