Как получить заголовки из одного маршрута в другой маршрут - Camel JavaDsl - PullRequest
2 голосов
/ 28 марта 2019

У меня есть конечная точка отдыха верблюда с двумя параметрами, и когда я отправляю запрос, он активирует первый маршрут ("direct: amq"), где я получаю сообщение от activeMq.

С заголовками все в порядке, но этот маршрут активирует другой маршрут ("direct: post)", а заголовки там отсутствуют.

Я хочу получить заголовок urlToPost с первого маршрута на второй.

 rest("/getFromActiveMq").produces("application/json")
    .get()
    .param()
    .name("urlToPost")
    .type(RestParamType.query)
    .dataType("String")
    .endParam()
    .param()
    .name("getactivemq")
    .type(RestParamType.query)
    .dataType("String")
    .endParam()
    .to("direct:amq");

from("direct:amq").streamCaching()
    .startupOrder(2)
    .log("My activemq is " + "${in.header.getactivemq}")
    .log("My urlToPost is " + "${in.header.urlToPost}")
    .setHeader("myHeader")
    .header("${in.header.urlToPost}")
    .log("My urlToPost Changed header is " + "${header.myHeader}")
    .process(exchange -> {
      String header = exchange.getIn().getHeader("urlToPost", String.class);
      System.out.println(header);
      exchange.getIn().setHeader("myShittyHeader", header);

      Map<String, Object> hdr = exchange.getIn()
          .getHeaders();
      for (Map.Entry<String, Object> entry : hdr.entrySet()) {
        System.out.println(entry.getKey() + "/" + entry.getValue());
      }
    })
    .pollEnrich()
    .simple("activemq://${in.header.getactivemq}")
    .onCompletion()
    .log("My body is : " + "${body}")
    .to("direct:post");

from("direct:post").tracing()
    .process(exchange -> exchange.getIn()
        .setBody(exchange.getIn()
            .getBody()))
    .convertBodyTo(String.class)
    .process(exchange -> {
      Map<String, Object> hdr = exchange.getIn()
          .getHeaders();
      for (Map.Entry<String, Object> entry : hdr.entrySet()) {
        System.out.println(entry.getKey() + "/" + entry.getValue());
      }
    })
    .log("My urlToPost BEFORE SETTING HEADERS is " + "${in.header.urlToPost}")
    .setHeader("Content-Type", constant("application/json"))
    .setHeader("Accept", constant("application/json"))
    .setHeader(Exchange.HTTP_METHOD, constant("POST"))
    .log("My urlToPost AFTER SETTING HEADERS is " + "${in.header.urlToPost}")
    // .log("My HTTP_URI is: " + "${in.header.urlToPost}")
    // .to("http4://urlToPost")
    // .to("direct:nothing");
    .enrich()
    .simple("http4://urlToPost");

Я обнаружил, что после:

.pollEnrich () .simple ( "ActiveMQ: // $ {in.header.getactivemq}")

Заголовки исчезли

1 Ответ

1 голос
/ 28 марта 2019

pollEnrich объединяет ваш текущий Exchange с другим сообщением. Это означает, что в действительности это Aggregator .

Если вы не предоставите стратегию агрегирования, Camel по умолчанию использует простое агрегирование тела . Это причина, почему вы теряете свои заголовки.

Вы должны настроить ранее существующую или реализовать собственную стратегию агрегирования, которая учитывает заголовки одного или обоих сообщений во время агрегации.

...