diff --git a/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/CxfEndpoint.java b/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/CxfEndpoint.java index 8b81383..14de4b3 100644 --- a/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/CxfEndpoint.java +++ b/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/CxfEndpoint.java @@ -63,6 +63,7 @@ import org.apache.camel.spi.HeaderFilterStrategyAware; import org.apache.camel.spi.UriEndpoint; import org.apache.camel.spi.UriParam; import org.apache.camel.spi.UriPath; +import org.apache.camel.util.CastUtils; import org.apache.camel.util.EndpointHelper; import org.apache.camel.util.ObjectHelper; import org.apache.camel.util.UnsafeUriCharactersEncoder; @@ -1081,10 +1082,22 @@ public class CxfEndpoint extends DefaultEndpoint implements HeaderFilterStrategy } message.setContent(List.class, content); - message.put(Header.HEADER_LIST, payload.getHeaders()); - } else { - super.setParameters(params, message); - } + // merge header list from request context with header list from CXF payload + List headerListOfRequestContxt = (List)message.get(Header.HEADER_LIST); + List headerListOfPayload = CastUtils.cast(payload.getHeaders()); + if (headerListOfRequestContxt == headerListOfPayload) { + // == is correct, we want to compare the object instances + // nothing to do, this can happen when the CXF payload is already created in the from-cxf-endpoint and then forwarded to a to-cxf-endpoint + } else { + if (headerListOfRequestContxt == null) { + message.put(Header.HEADER_LIST, payload.getHeaders()); + } else { + headerListOfRequestContxt.addAll(headerListOfPayload); + } + } + } else { + super.setParameters(params, message); + } message.remove(DataFormat.class); }