diff --git a/spring-integration-core/src/main/java/org/springframework/integration/support/MessageBuilder.java b/spring-integration-core/src/main/java/org/springframework/integration/support/MessageBuilder.java index 5b4b3a3596..98d6c13bd2 100644 --- a/spring-integration-core/src/main/java/org/springframework/integration/support/MessageBuilder.java +++ b/spring-integration-core/src/main/java/org/springframework/integration/support/MessageBuilder.java @@ -188,11 +188,9 @@ public final class MessageBuilder extends AbstractIntegrationMessageBuilder copyHeadersIfAbsent(Map headersToCopy) { if (headersToCopy != null) { for (Map.Entry entry : headersToCopy.entrySet()) { - if (!this.headerAccessor.isReadOnly(entry.getKey())) { - this.headerAccessor.setHeaderIfAbsent(entry.getKey(), entry.getValue()); - } - else if (logger.isInfoEnabled()) { - logger.info("The header [" + entry + "] is ignored for population because it is is readOnly."); + String headerName = entry.getKey(); + if (!this.headerAccessor.isReadOnly(headerName)) { + this.headerAccessor.setHeaderIfAbsent(headerName, entry.getValue()); } } } diff --git a/src/reference/asciidoc/message.adoc b/src/reference/asciidoc/message.adoc index 3182253c9f..eded7ca94c 100644 --- a/src/reference/asciidoc/message.adoc +++ b/src/reference/asciidoc/message.adoc @@ -373,7 +373,7 @@ In addition to the default strategy, two additional `IdGenerators` are provided; [[read-only-headers]] ===== Read-only Headers -The `MessageHeaders.ID` and `MessageHeaders.TIMESTAMP` are read-only headers and the cannot be overridden. +The `MessageHeaders.ID` and `MessageHeaders.TIMESTAMP` are read-only headers and they cannot be overridden. Since _version 4.3.2_, the `MessageBuilder` provides the `readOnlyHeaders(String... readOnlyHeaders)` API to customize a list of headers which should not be copied from an upstream `Message`. Just the `MessageHeaders.ID` and `MessageHeaders.TIMESTAMP` are read only by default.