Spring Integration DSL EnrichedHeaders не заменяется - PullRequest
0 голосов
/ 25 мая 2020

Используя Boot 2.2.6 и SI 5.2.5 Я пытаюсь обогатить заголовок объектом. Однако на втором проходе потока новый заголовок действительно содержит новый UUID сообщения (поэтому я знаю, что это новый заголовок), но обогащенный заголовок не заменяется новым объектом, а содержит предыдущий объект.

Например;

@Configuration
public class MyFlow {

  public static class Original {
    String original;
    UUID   uuid;

    public Original() { uuid = UUID.randomUUID(); }
    public void setOriginal(String s) { original = s; }
    public String getOriginal() { return original; }
  }

  @Bean IntegrationFlow doIt() {
    return IntegrationFlows
      .from("somewhere")
      .enrichHeaders(h -> h.header("ORIGINAL", new Original()))
      .handle((p, h) -> {
        System.err.println(h); // --1
        Original original = (Original) h.get("ORIGINAL");
        original.setOriginal(p.toString());
        System.err.println(h); // --2
      })
      .channel("next")
      .get();
  }
}

На первом проходе;

- 1 original.uuid = new UUID, original.original = null

- 2 original.uuid = то же, что и раньше, original.original = новая полезная нагрузка

На втором проходе;

- 1 original.uuid = то же, что и раньше, original.original = то же, что и раньше

- 2 original.uuid = то же, что и раньше, original.original = новая полезная нагрузка

Я хочу, чтобы Original был новым объектом. Я предполагаю, что определение class Original или enricherHeaders неверно. Где я ошибаюсь?

1 Ответ

1 голос
/ 25 мая 2020

Заголовки не перезаписываются по умолчанию.

h -> h.defaultOverwrite(true).header("ORIGINAL", new Original())

или

h -> h.header("ORIGINAL", new Original(), true);

Обычно вы используете первый с несколькими заголовками.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...