Использование верблюжьей http-обработки CachedOutputStream
Привет ~ Я использую компонент верблюда 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 и что это?
Я ищу верблюда док. и не могу понять. Пожалуйста, дайте мне подсказку, чтобы решить мою проблему.
Благодарю.
3 ответа
Смотрите потоковое кеширование для получения информации о CachedOutputStream
: http://camel.apache.org/stream-caching.html
Чтобы получить тело сообщения в виде строки от процессора, вы просто делаете
String body = exchange.getIn().getBody(String.class);
Это скажет верблюду, что вы хотите сообщение как String
и он будет автоматически скрывать тело сообщения от CachedOutputStream
в String
, Затем вы можете получить нужный текст через обычный код Java.
Также обратите внимание, что есть jsonpath, который вы можете использовать для работы с данными json и получения информации, однако его синтаксис может потребоваться немного для изучения: http://camel.apache.org/jsonpath
Вы уже взяли данные потока (с .log) перед вызовом процессора. Очевидно, потоковые данные могут быть получены только один раз. Попробуйте удалить шаг журнала, и вы можете попасть в процессор
.log(LoggingLevel.INFO, "Result ===> ${body}").process(new Processor() {
* после 2 дней экспериментов)
вы можете использовать для этого метод convertBodyTo (Class <?> type) , например
.log(LoggingLevel.INFO, "Результат ===> ${body}")
.convertBodyTo(String.class)
.process (новый процессор () {...}