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());

Reply via email to