Использование верблюжьей 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 (новый процессор () {...}

Другие вопросы по тегам