This is an automated email from the ASF dual-hosted git repository. gnodet pushed a commit to branch CAMEL-22549-clear-deprecation-warnings in repository https://gitbox.apache.org/repos/asf/camel.git
commit 5fc83d2c2570210a8bb6550bef3ef32b1f023b5e Author: Guillaume Nodet <[email protected]> AuthorDate: Wed Apr 8 11:42:48 2026 +0200 CAMEL-22549: Add ExchangeHelper.createResponse() and refactor call sites Introduce createResponse(exchange) that creates a new empty response message and returns it, simplifying the common two-step pattern of setResponse() + getMessage(). Refactored 7 call sites across core and components to use the new utility. Co-Authored-By: Claude Opus 4.6 <[email protected]> --- .../apache/camel/component/cxf/jaxrs/CxfRsInvoker.java | 4 +--- .../component/cxf/transport/CamelDestination.java | 3 +-- .../org/apache/camel/component/http/HttpProducer.java | 4 +--- .../org/apache/camel/component/jcr/JcrProducer.java | 4 +--- .../spring/ws/filter/impl/BasicMessageFilterTest.java | 6 ++---- .../java/org/apache/camel/util/ExchangeHelperTest.java | 11 +++++++++++ .../apache/camel/support/DefaultExchangeHolder.java | 2 +- .../java/org/apache/camel/support/ExchangeHelper.java | 18 +++++++++++++++++- .../camel/support/processor/UnmarshalProcessor.java | 4 +--- 9 files changed, 36 insertions(+), 20 deletions(-) diff --git a/components/camel-cxf/camel-cxf-rest/src/main/java/org/apache/camel/component/cxf/jaxrs/CxfRsInvoker.java b/components/camel-cxf/camel-cxf-rest/src/main/java/org/apache/camel/component/cxf/jaxrs/CxfRsInvoker.java index cc2e1806cfbf..066f78cf4b8d 100644 --- a/components/camel-cxf/camel-cxf-rest/src/main/java/org/apache/camel/component/cxf/jaxrs/CxfRsInvoker.java +++ b/components/camel-cxf/camel-cxf-rest/src/main/java/org/apache/camel/component/cxf/jaxrs/CxfRsInvoker.java @@ -28,7 +28,6 @@ import org.apache.camel.AsyncCallback; import org.apache.camel.ExchangePattern; import org.apache.camel.ExchangeTimedOutException; import org.apache.camel.RuntimeCamelException; -import org.apache.camel.support.DefaultMessage; import org.apache.camel.support.ExchangeHelper; import org.apache.cxf.continuations.Continuation; import org.apache.cxf.continuations.ContinuationProvider; @@ -172,8 +171,7 @@ public class CxfRsInvoker extends JAXRSInvoker { cxfExchange.put(org.apache.camel.Exchange.class, camelExchange); if (response != null) { - ExchangeHelper.setResponse(camelExchange, new DefaultMessage(camelExchange.getContext())); - camelExchange.getMessage().setBody(response); + ExchangeHelper.createResponse(camelExchange).setBody(response); } CxfRsBinding binding = endpoint.getBinding(); binding.populateExchangeFromCxfRsRequest(cxfExchange, camelExchange, method, paramArray); diff --git a/components/camel-cxf/camel-cxf-transport/src/main/java/org/apache/camel/component/cxf/transport/CamelDestination.java b/components/camel-cxf/camel-cxf-transport/src/main/java/org/apache/camel/component/cxf/transport/CamelDestination.java index bc9d7ccda7ab..5a22444b3d55 100644 --- a/components/camel-cxf/camel-cxf-transport/src/main/java/org/apache/camel/component/cxf/transport/CamelDestination.java +++ b/components/camel-cxf/camel-cxf-transport/src/main/java/org/apache/camel/component/cxf/transport/CamelDestination.java @@ -29,7 +29,6 @@ import org.apache.camel.Processor; import org.apache.camel.component.cxf.common.header.CxfHeaderHelper; import org.apache.camel.component.cxf.transport.message.DefaultCxfMessageMapper; import org.apache.camel.spi.HeaderFilterStrategy; -import org.apache.camel.support.DefaultMessage; import org.apache.camel.support.ExchangeHelper; import org.apache.camel.support.service.ServiceHelper; import org.apache.camel.util.ObjectHelper; @@ -263,7 +262,7 @@ public class CamelDestination extends AbstractDestination implements Configurabl protected void propagateResponseHeadersToCamel(Message outMessage, Exchange camelExchange) { if (!ExchangeHelper.hasResponse(camelExchange)) { - ExchangeHelper.setResponse(camelExchange, new DefaultMessage(camelExchange.getContext())); + ExchangeHelper.createResponse(camelExchange); } // copy the camel in message header to the out message camelExchange.getMessage().getHeaders().putAll(camelExchange.getIn().getHeaders()); diff --git a/components/camel-http/src/main/java/org/apache/camel/component/http/HttpProducer.java b/components/camel-http/src/main/java/org/apache/camel/component/http/HttpProducer.java index 32345a26911e..0cedfe5d783c 100644 --- a/components/camel-http/src/main/java/org/apache/camel/component/http/HttpProducer.java +++ b/components/camel-http/src/main/java/org/apache/camel/component/http/HttpProducer.java @@ -49,7 +49,6 @@ import org.apache.camel.http.base.cookie.CookieHandler; import org.apache.camel.http.common.HttpHelper; import org.apache.camel.http.common.HttpProtocolHeaderFilterStrategy; import org.apache.camel.spi.HeaderFilterStrategy; -import org.apache.camel.support.DefaultMessage; import org.apache.camel.support.DefaultProducer; import org.apache.camel.support.ExchangeHelper; import org.apache.camel.support.GZIPHelper; @@ -356,8 +355,7 @@ public class HttpProducer extends DefaultProducer implements LineNumberAware { throws IOException, ClassNotFoundException { // separate response from request so response headers don't mix with request headers - ExchangeHelper.setResponse(exchange, new DefaultMessage(exchange.getContext())); - Message answer = exchange.getMessage(); + Message answer = ExchangeHelper.createResponse(exchange); populateResponseCode(answer, httpResponse, responseCode); // We just make the out message is not create when extractResponseBody throws exception diff --git a/components/camel-jcr/src/main/java/org/apache/camel/component/jcr/JcrProducer.java b/components/camel-jcr/src/main/java/org/apache/camel/component/jcr/JcrProducer.java index 0066b93ef167..2502d8037a7a 100644 --- a/components/camel-jcr/src/main/java/org/apache/camel/component/jcr/JcrProducer.java +++ b/components/camel-jcr/src/main/java/org/apache/camel/component/jcr/JcrProducer.java @@ -34,7 +34,6 @@ import org.apache.camel.Exchange; import org.apache.camel.Message; import org.apache.camel.RuntimeCamelException; import org.apache.camel.TypeConverter; -import org.apache.camel.support.DefaultMessage; import org.apache.camel.support.DefaultProducer; import org.apache.camel.support.ExchangeHelper; import org.apache.camel.util.ObjectHelper; @@ -68,8 +67,7 @@ public class JcrProducer extends DefaultProducer { } } node.addMixin("mix:referenceable"); - ExchangeHelper.setResponse(exchange, new DefaultMessage(exchange.getContext())); - exchange.getMessage().setBody(node.getIdentifier()); + ExchangeHelper.createResponse(exchange).setBody(node.getIdentifier()); session.save(); } else if (JcrConstants.JCR_GET_BY_ID.equals(operation)) { Node node = session.getNodeByIdentifier(exchange.getIn() diff --git a/components/camel-spring-parent/camel-spring-ws/src/test/java/org/apache/camel/component/spring/ws/filter/impl/BasicMessageFilterTest.java b/components/camel-spring-parent/camel-spring-ws/src/test/java/org/apache/camel/component/spring/ws/filter/impl/BasicMessageFilterTest.java index d2fc8b3747eb..36ea637fefda 100644 --- a/components/camel-spring-parent/camel-spring-ws/src/test/java/org/apache/camel/component/spring/ws/filter/impl/BasicMessageFilterTest.java +++ b/components/camel-spring-parent/camel-spring-ws/src/test/java/org/apache/camel/component/spring/ws/filter/impl/BasicMessageFilterTest.java @@ -90,8 +90,7 @@ public class BasicMessageFilterTest extends ExchangeTestSupport { @Test public void removeCamelInternalHeaderAttributes() throws Exception { - ExchangeHelper.setResponse(exchange, new DefaultMessage(exchange.getContext())); - exchange.getMessage().getHeaders().put(SpringWebserviceConstants.SPRING_WS_SOAP_ACTION, "mustBeRemoved"); + ExchangeHelper.createResponse(exchange).getHeaders().put(SpringWebserviceConstants.SPRING_WS_SOAP_ACTION, "mustBeRemoved"); exchange.getMessage().getHeaders().put(SpringWebserviceConstants.SPRING_WS_ADDRESSING_ACTION, "mustBeRemoved"); exchange.getMessage().getHeaders().put(SpringWebserviceConstants.SPRING_WS_ADDRESSING_PRODUCER_FAULT_TO, "mustBeRemoved"); @@ -115,8 +114,7 @@ public class BasicMessageFilterTest extends ExchangeTestSupport { @Test public void consumerWithHeader() throws Exception { - ExchangeHelper.setResponse(exchange, new DefaultMessage(exchange.getContext())); - exchange.getMessage().getHeaders().put("headerAttributeKey", "testAttributeValue"); + ExchangeHelper.createResponse(exchange).getHeaders().put("headerAttributeKey", "testAttributeValue"); exchange.getMessage().getHeaders().put("headerAttributeElement", new QName("http://shouldBeInHeader", "myElement")); filter.filterConsumer(exchange, message); diff --git a/core/camel-core/src/test/java/org/apache/camel/util/ExchangeHelperTest.java b/core/camel-core/src/test/java/org/apache/camel/util/ExchangeHelperTest.java index c27bb4d15685..a01176bc5d42 100644 --- a/core/camel-core/src/test/java/org/apache/camel/util/ExchangeHelperTest.java +++ b/core/camel-core/src/test/java/org/apache/camel/util/ExchangeHelperTest.java @@ -23,6 +23,7 @@ import java.util.Map; import org.apache.camel.ContextTestSupport; import org.apache.camel.Exchange; import org.apache.camel.ExchangePattern; +import org.apache.camel.Message; import org.apache.camel.NoSuchBeanException; import org.apache.camel.NoSuchHeaderException; import org.apache.camel.NoSuchPropertyException; @@ -296,6 +297,16 @@ public class ExchangeHelperTest extends ContextTestSupport { assertFalse(ExchangeHelper.hasResponse(exchange)); } + @Test + public void testCreateResponse() { + assertFalse(ExchangeHelper.hasResponse(exchange)); + Message response = ExchangeHelper.createResponse(exchange); + assertNotNull(response); + assertTrue(ExchangeHelper.hasResponse(exchange)); + assertSame(response, exchange.getMessage()); + assertNull(response.getBody()); + } + @Override @BeforeEach public void setUp() throws Exception { diff --git a/core/camel-support/src/main/java/org/apache/camel/support/DefaultExchangeHolder.java b/core/camel-support/src/main/java/org/apache/camel/support/DefaultExchangeHolder.java index 7c53b19e90a2..cc5c4d47218a 100644 --- a/core/camel-support/src/main/java/org/apache/camel/support/DefaultExchangeHolder.java +++ b/core/camel-support/src/main/java/org/apache/camel/support/DefaultExchangeHolder.java @@ -171,7 +171,7 @@ public class DefaultExchangeHolder implements Serializable { if (payload.outBody != null) { // reuse existing response message to preserve its type (e.g. JmsMessage) if (!ExchangeHelper.hasResponse(exchange)) { - ExchangeHelper.setResponse(exchange, new DefaultMessage(exchange.getContext())); + ExchangeHelper.createResponse(exchange); } exchange.getMessage().setBody(payload.outBody); if (payload.outHeaders != null) { diff --git a/core/camel-support/src/main/java/org/apache/camel/support/ExchangeHelper.java b/core/camel-support/src/main/java/org/apache/camel/support/ExchangeHelper.java index df7ef56311c4..808d4c66eca9 100644 --- a/core/camel-support/src/main/java/org/apache/camel/support/ExchangeHelper.java +++ b/core/camel-support/src/main/java/org/apache/camel/support/ExchangeHelper.java @@ -444,7 +444,7 @@ public final class ExchangeHelper { if (exchange.getPattern().isOutCapable()) { // explicitly create response if none exists (preserves old getOut() lazy-creation semantics) if (!hasResponse(exchange)) { - setResponse(exchange, new DefaultMessage(exchange.getContext())); + return createResponse(exchange); } return exchange.getMessage(); } else { @@ -1339,4 +1339,20 @@ public final class ExchangeHelper { exchange.setOut(response); } + /** + * Creates a new empty response message on the exchange and returns it. This is the non-deprecated equivalent of the + * lazy-creation side effect of {@link Exchange#getOut()}. + * <p> + * Typical usage: + * + * <pre> + * Message response = ExchangeHelper.createResponse(exchange); + * response.setBody(result); + * </pre> + */ + public static Message createResponse(Exchange exchange) { + setResponse(exchange, new DefaultMessage(exchange.getContext())); + return exchange.getMessage(); + } + } diff --git a/core/camel-support/src/main/java/org/apache/camel/support/processor/UnmarshalProcessor.java b/core/camel-support/src/main/java/org/apache/camel/support/processor/UnmarshalProcessor.java index 5e74d1607bd0..3634a777c32c 100644 --- a/core/camel-support/src/main/java/org/apache/camel/support/processor/UnmarshalProcessor.java +++ b/core/camel-support/src/main/java/org/apache/camel/support/processor/UnmarshalProcessor.java @@ -31,7 +31,6 @@ import org.apache.camel.spi.DataFormat; import org.apache.camel.spi.IdAware; import org.apache.camel.spi.RouteIdAware; import org.apache.camel.support.AsyncProcessorSupport; -import org.apache.camel.support.DefaultMessage; import org.apache.camel.support.ExchangeHelper; import org.apache.camel.support.service.ServiceHelper; import org.apache.camel.util.IOHelper; @@ -79,8 +78,7 @@ public class UnmarshalProcessor extends AsyncProcessorSupport if (allowNullBody && body == null) { // The body is null, and it is an allowed value so let's skip the unmarshalling; // use empty response (not in.copy()) so the null body is preserved - ExchangeHelper.setResponse(exchange, new DefaultMessage(exchange.getContext())); - out = exchange.getMessage(); + out = ExchangeHelper.createResponse(exchange); } else { // lets set up the out message before we invoke the dataFormat so that it can mutate it if necessary ExchangeHelper.setResponse(exchange, in.copy());
