Используя 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
неверно. Где я ошибаюсь?