You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by or...@apache.org on 2023/02/14 12:53:45 UTC

[camel] branch main updated (6c65866e7c1 -> a91ba7e68ed)

This is an automated email from the ASF dual-hosted git repository.

orpiske pushed a change to branch main
in repository https://gitbox.apache.org/repos/asf/camel.git


    from 6c65866e7c1 CAMEL-19033: camel-jbang - Add trace command
     new 72c146dc9ea CAMEL-15105: decouple the ExtendedExchange from the Exchange
     new db69991c067 CAMEL-15105: convert setting notify events in camel-cdi and camel-management
     new 67cf609766e CAMEL-15105: rework usages of ExtendedExchange in ExchangeHelper
     new 04ac187cf48 CAMEL-15105: rework handling addOnCompletions on Exchanges in camel-core module
     new 43a6574cbd6 CAMEL-15105: rework handling addOnCompletions on Exchanges in several components
     new 812786f9d92 CAMEL-15105: rework handoverCompletions in AbstractExchange
     new dbbf0060ad9 CAMEL-15105: rework setting history properties the camel-core code
     new cd3f7313842 CAMEL-15105: rework managing error handling properties in the exchange
     new 57d5f57077a CAMEL-15105: rework handling the unit of work
     new ceaffab948b CAMEL-15105: rework redelivery handling
     new 5e7f751fccb CAMEL-15105: adapt the RedeliveryErrorHandler to the new extension interface
     new 85e12ebe270 CAMEL-15105: rework setting from route/endpoint properties
     new d5989c41660 CAMEL-15105: adapt the DefaultConsumer to the new extension interface
     new 7e6da1de5bb CAMEL-15105: adapt DefaultConsumerTemplate to the new extension interface
     new 44e139333ae CAMEL-15105: adapt DefaultNettyHttpBinding to the new extension interface
     new d2e8b0fcef3 CAMEL-15105: adapt camel-salesforce to the new extension interface
     new 5d4c96d306c CAMEL-15105: code cleanups in the camel-core
     new a3c41472a7d CAMEL-15105: adapt and cleanup camel-components to the new extension interface
     new 70b31903962 CAMEL-15105: adapt and cleanup camel-core to the new extension interface
     new 48fd93058a8 CAMEL-15105: adapted the copy exchange logic in AbstractExchange
     new aec1d1d0596 CAMEL-15105: removed the extended exchange imports
     new 94b807e5c5e CAMEL-15105: deprecated and cleaned up the ExtendedExchange API interface
     new a91ba7e68ed CAMEL-15105: remove unnecessary adapt to Exchange

The 23 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.


Summary of changes:
 .../camel/attachment/DefaultAttachmentMessage.java |  31 ++-
 .../camel/component/aws2/s3/AWS2S3Consumer.java    |   5 +-
 .../camel/component/aws2/sqs/Sqs2Consumer.java     |   5 +-
 .../component/azure/cosmosdb/CosmosDbConsumer.java |   3 +-
 .../azure/eventhubs/EventHubsConsumer.java         |   3 +-
 .../azure/servicebus/ServiceBusConsumer.java       |   3 +-
 .../component/azure/storage/blob/BlobConsumer.java |   3 +-
 .../azure/storage/datalake/DataLakeConsumer.java   |   3 +-
 .../azure/storage/queue/QueueConsumer.java         |   3 +-
 .../aggregate/cassandra/CassandraCamelCodec.java   |   3 +-
 .../language/csimple/joor/OriginalSimpleTest.java  |  12 +-
 .../camel/dataformat/csv/CsvUnmarshaller.java      |   3 +-
 .../jaxrs/CxfRsConsumerClientDisconnectedTest.java |   3 +-
 .../component/cxf/jaxrs/CxfRsStreamCacheTest.java  |   3 +-
 .../component/cxf/jaxws/DefaultCxfBinding.java     |   3 +-
 .../jaxws/CxfConsumerClientDisconnectedTest.java   |   3 +-
 .../cxf/jaxws/CxfConsumerStreamCacheTest.java      |   3 +-
 .../component/directvm/DirectVmProcessor.java      |   3 +-
 .../disruptor/AbstractSynchronizedExchange.java    |   5 +-
 .../component/disruptor/DisruptorConsumer.java     |   5 +-
 .../component/disruptor/DisruptorProducer.java     |   5 +-
 .../DisruptorInOutChainedWithOnCompletionTest.java |   3 +-
 ...sruptorWaitForTaskCompleteOnCompletionTest.java |   3 +-
 .../DisruptorWaitForTaskNeverOnCompletionTest.java |   3 +-
 .../camel/component/file/GenericFileConsumer.java  |   3 +-
 .../component/file/remote/RemoteFileConsumer.java  |   3 +-
 .../mail/stream/GoogleMailStreamConsumer.java      |   3 +-
 .../google/pubsub/GooglePubsubConsumer.java        |   3 +-
 .../pubsub/consumer/CamelMessageReceiver.java      |   3 +-
 .../google/storage/GoogleCloudStorageConsumer.java |   3 +-
 .../apache/camel/component/hdfs/HdfsConsumer.java  |   3 +-
 .../apache/camel/component/http/HttpProducer.java  |   3 +-
 .../component/huaweicloud/obs/OBSConsumer.java     |   3 +-
 .../ignite/cache/IgniteCacheProducer.java          |   3 +-
 .../camel/component/ironmq/IronMQConsumer.java     |   3 +-
 .../apache/camel/component/jdbc/JdbcProducer.java  |   5 +-
 .../component/jetty/CamelContinuationServlet.java  |   4 +-
 .../org/apache/camel/component/jpa/JpaHelper.java  |   3 +-
 .../kamelet/KameletConsumerUoWIssueTest.java       |   3 +-
 .../component/kamelet/KameletUoWIssueTest.java     |   3 +-
 .../camel/component/leveldb/LevelDBCamelCodec.java |   3 +-
 .../apache/camel/component/mail/MailConsumer.java  |   3 +-
 .../faulttolerance/FaultToleranceProcessor.java    |   7 +-
 .../camel/component/minio/MinioConsumer.java       |   5 +-
 .../netty/http/DefaultNettyHttpBinding.java        |   9 +-
 .../component/netty/http/NettyHttpProducer.java    |   5 +-
 .../camel/component/netty/NettyProducer.java       |   3 +-
 .../slot/PgReplicationSlotConsumer.java            |   3 +-
 .../apache/camel/pgevent/PgEventConsumerTest.java  |   8 +-
 .../http/vertx/VertxPlatformHttpConsumer.java      |   3 +-
 .../http/JettyCustomPlatformHttpConsumer.java      |   3 +-
 .../engine/DefaultCamelReactiveStreamsService.java |   3 +-
 .../reactor/engine/ReactorStreamsService.java      |   3 +-
 .../resilience4j/ResilienceProcessor.java          |   5 +-
 .../rxjava/engine/RxJavaStreamsService.java        |   3 +-
 .../salesforce/SalesforceConsumerTest.java         |   8 +-
 .../apache/camel/component/seda/SedaConsumer.java  |   8 +-
 .../apache/camel/component/seda/SedaProducer.java  |   3 +-
 .../apache/camel/component/sjms/SjmsTemplate.java  |  13 +-
 .../spring/ws/SpringWebserviceConsumer.java        |   3 +-
 ...lClientDataSourceOnExceptionRedeliveryTest.java |   3 +-
 ...ransactionalClientDataSourceRedeliveryTest.java |   3 +-
 .../apache/camel/component/sql/SqlProducer.java    |   3 +-
 .../processor/aggregate/jdbc/JdbcCamelCodec.java   |   3 +-
 .../aggregate/tarfile/TarAggregationStrategy.java  |   5 +-
 .../org/apache/camel/component/vm/VmConsumer.java  |   6 +-
 .../apache/camel/component/xslt/XsltBuilder.java   |   4 +-
 .../aggregate/zipfile/ZipAggregationStrategy.java  |   5 +-
 .../src/main/java/org/apache/camel/Exchange.java   |   5 +
 ...xtendedExchange.java => ExchangeExtension.java} | 179 ++++++++---------
 .../java/org/apache/camel/ExtendedExchange.java    | 220 +--------------------
 .../main/java/org/apache/camel/PooledExchange.java |   2 +-
 .../java/org/apache/camel/SafeCopyProperty.java    |   4 +-
 .../camel/impl/engine/CamelInternalProcessor.java  |  34 ++--
 .../engine/DefaultAsyncProcessorAwaitManager.java  |   5 +-
 .../camel/impl/engine/DefaultConsumerTemplate.java |   3 +-
 .../impl/engine/DefaultInflightRepository.java     |   3 +-
 .../camel/impl/engine/DefaultUnitOfWork.java       |  10 +-
 .../engine/PooledProcessorExchangeFactory.java     |   9 +-
 .../impl/event/ExchangeFailureHandledEvent.java    |   5 +-
 .../org/apache/camel/processor/CatchProcessor.java |  18 +-
 .../java/org/apache/camel/processor/Enricher.java  |   5 +-
 .../camel/processor/FatalFallbackErrorHandler.java |   7 +-
 .../apache/camel/processor/MulticastProcessor.java |   8 +-
 .../camel/processor/OnCompletionProcessor.java     |  42 ++--
 .../org/apache/camel/processor/PipelineHelper.java |  10 +-
 .../org/apache/camel/processor/PollEnricher.java   |   5 +-
 .../camel/processor/RecipientListProcessor.java    |   3 +-
 .../java/org/apache/camel/processor/Splitter.java  |   3 +-
 .../processor/aggregate/AggregateProcessor.java    |   7 +-
 .../ShareUnitOfWorkAggregationStrategy.java        |  12 +-
 .../aggregate/UseLatestAggregationStrategy.java    |   6 +-
 .../processor/errorhandler/NoErrorHandler.java     |   3 +-
 .../errorhandler/RedeliveryErrorHandler.java       |  69 +++----
 .../processor/idempotent/IdempotentConsumer.java   |   3 +-
 .../camel/processor/resume/ResumableProcessor.java |   3 +-
 .../transformer/ProcessorTransformer.java          |   3 +-
 .../apache/camel/builder/xml/XsltBuilderTest.java  |   3 +-
 .../seda/SedaDiscardIfNoConsumerTest.java          |   3 +-
 .../seda/SedaInOutChainedWithOnCompletionTest.java |   3 +-
 .../SedaWaitForTaskCompleteOnCompletionTest.java   |   3 +-
 .../seda/SedaWaitForTaskNewerOnCompletionTest.java |   3 +-
 .../converter/stream/CachedOutputStreamTest.java   |   3 +-
 .../DefaultAsyncProcessorAwaitManagerTest.java     |   3 +-
 .../org/apache/camel/impl/DefaultExchangeTest.java |   5 +-
 .../impl/engine/CamelPostProcessorHelperTest.java  |   5 +-
 .../org/apache/camel/issues/GertJBIIssueTest.java  |   7 +-
 .../apache/camel/language/simple/SimpleTest.java   |  11 +-
 .../camel/processor/EnrichWithUnitOfWorkTest.java  |   5 +-
 .../processor/MDCOnCompletionOnCompletionTest.java |   3 +-
 .../camel/processor/OnCompletionContainsTest.java  |  15 +-
 .../processor/OnCompletionShouldBeLastTest.java    |   7 +-
 .../processor/RouteAwareSynchronizationTest.java   |   3 +-
 .../camel/processor/UnitOfWorkHelperTest.java      |   4 +-
 .../BodyOnlyAggregationStrategyTest.java           |   5 +-
 .../processor/async/AsyncEndpointDelayUoWTest.java |   7 +-
 .../async/AsyncEndpointUoWFailedTest.java          |   8 +-
 .../processor/async/AsyncEndpointUoWTest.java      |   7 +-
 .../camel/management/PublishEventNotifier.java     |   5 +-
 .../converter/stream/FileInputStreamCache.java     |   3 +-
 .../org/apache/camel/support/AbstractExchange.java | 173 ++++------------
 .../BridgeExceptionHandlerToErrorHandler.java      |   3 +-
 .../org/apache/camel/support/DefaultConsumer.java  |  13 +-
 .../camel/support/EventDrivenPollingConsumer.java  |   3 +-
 .../java/org/apache/camel/support/EventHelper.java |  19 +-
 .../org/apache/camel/support/ExchangeHelper.java   |  26 ++-
 .../camel/support/ExtendedExchangeExtension.java   | 216 ++++++++++++++++++++
 .../org/apache/camel/support/MessageHelper.java    |   7 +-
 .../camel/support/builder/ExpressionBuilder.java   |   2 +-
 .../jetty/JettySimulateFailoverRoundRobinTest.java |   3 +-
 130 files changed, 682 insertions(+), 893 deletions(-)
 copy core/camel-api/src/main/java/org/apache/camel/{ExtendedExchange.java => ExchangeExtension.java} (92%)
 create mode 100644 core/camel-support/src/main/java/org/apache/camel/support/ExtendedExchangeExtension.java


[camel] 16/23: CAMEL-15105: adapt camel-salesforce to the new extension interface

Posted by or...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

orpiske pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/camel.git

commit d2e8b0fcef34139b0e4adba6b8dcb5cf6ed9441c
Author: Otavio Rodolfo Piske <an...@gmail.com>
AuthorDate: Wed Jan 11 16:25:22 2023 +0100

    CAMEL-15105: adapt camel-salesforce to the new extension interface
---
 .../apache/camel/component/salesforce/SalesforceConsumerTest.java | 8 +++++---
 1 file changed, 5 insertions(+), 3 deletions(-)

diff --git a/components/camel-salesforce/camel-salesforce-component/src/test/java/org/apache/camel/component/salesforce/SalesforceConsumerTest.java b/components/camel-salesforce/camel-salesforce-component/src/test/java/org/apache/camel/component/salesforce/SalesforceConsumerTest.java
index 0244a912421..6bdfde0c6f4 100644
--- a/components/camel-salesforce/camel-salesforce-component/src/test/java/org/apache/camel/component/salesforce/SalesforceConsumerTest.java
+++ b/components/camel-salesforce/camel-salesforce-component/src/test/java/org/apache/camel/component/salesforce/SalesforceConsumerTest.java
@@ -25,8 +25,9 @@ import java.util.Objects;
 import com.fasterxml.jackson.annotation.JsonProperty;
 import org.apache.camel.AsyncProcessor;
 import org.apache.camel.CamelContext;
+import org.apache.camel.Exchange;
+import org.apache.camel.ExchangeExtension;
 import org.apache.camel.ExtendedCamelContext;
-import org.apache.camel.ExtendedExchange;
 import org.apache.camel.component.salesforce.api.dto.PlatformEvent;
 import org.apache.camel.component.salesforce.internal.streaming.SubscriptionHelper;
 import org.apache.camel.spi.ClassResolver;
@@ -84,7 +85,8 @@ public class SalesforceConsumerTest {
 
     SalesforceEndpointConfig configuration = new SalesforceEndpointConfig();
     SalesforceEndpoint endpoint = mock(SalesforceEndpoint.class);
-    ExtendedExchange exchange = mock(ExtendedExchange.class);
+    Exchange exchange = mock(Exchange.class);
+    ExchangeExtension exchangeExtension = mock(ExchangeExtension.class);
     org.apache.camel.Message in = mock(org.apache.camel.Message.class);
     AsyncProcessor processor = mock(AsyncProcessor.class);
     ExtendedCamelContext context = mock(ExtendedCamelContext.class);
@@ -108,7 +110,7 @@ public class SalesforceConsumerTest {
         when(context.getExchangeFactory()).thenReturn(exchangeFactory);
         when(exchangeFactory.newExchangeFactory(any())).thenReturn(exchangeFactory);
         when(exchangeFactory.create(endpoint, true)).thenReturn(exchange);
-        when(exchange.adapt(ExtendedExchange.class)).thenReturn(exchange);
+        when(exchange.getExchangeExtension()).thenReturn(exchangeExtension);
         when(exchange.getIn()).thenReturn(in);
         final SalesforceComponent component = mock(SalesforceComponent.class);
         when(endpoint.getComponent()).thenReturn(component);


[camel] 19/23: CAMEL-15105: adapt and cleanup camel-core to the new extension interface

Posted by or...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

orpiske pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/camel.git

commit 70b31903962acc5dd61426938a0f12d4d12f0fd9
Author: Otavio Rodolfo Piske <an...@gmail.com>
AuthorDate: Wed Nov 23 09:27:14 2022 +0100

    CAMEL-15105: adapt and cleanup camel-core to the new extension interface
---
 .../engine/DefaultAsyncProcessorAwaitManager.java  |  5 ++-
 .../camel/impl/engine/DefaultUnitOfWork.java       |  5 ++-
 .../engine/PooledProcessorExchangeFactory.java     |  9 +++--
 .../org/apache/camel/processor/CatchProcessor.java | 14 ++++----
 .../java/org/apache/camel/processor/Enricher.java  |  3 +-
 .../camel/processor/FatalFallbackErrorHandler.java |  3 +-
 .../apache/camel/processor/MulticastProcessor.java |  6 ++--
 .../camel/processor/OnCompletionProcessor.java     | 42 +++++++++++-----------
 .../org/apache/camel/processor/PipelineHelper.java | 10 +++---
 .../errorhandler/RedeliveryErrorHandler.java       |  3 +-
 .../transformer/ProcessorTransformer.java          |  3 +-
 .../org/apache/camel/impl/DefaultExchangeTest.java |  2 +-
 .../java/org/apache/camel/support/EventHelper.java | 19 +++++-----
 .../org/apache/camel/support/MessageHelper.java    |  3 +-
 14 files changed, 55 insertions(+), 72 deletions(-)

diff --git a/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/DefaultAsyncProcessorAwaitManager.java b/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/DefaultAsyncProcessorAwaitManager.java
index b89f0cbd924..4e725fe8fee 100644
--- a/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/DefaultAsyncProcessorAwaitManager.java
+++ b/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/DefaultAsyncProcessorAwaitManager.java
@@ -27,7 +27,6 @@ import java.util.concurrent.atomic.AtomicLong;
 import org.apache.camel.AsyncProcessor;
 import org.apache.camel.Exchange;
 import org.apache.camel.ExtendedCamelContext;
-import org.apache.camel.ExtendedExchange;
 import org.apache.camel.RuntimeCamelException;
 import org.apache.camel.StaticService;
 import org.apache.camel.spi.AsyncProcessorAwaitManager;
@@ -200,7 +199,7 @@ public class DefaultAsyncProcessorAwaitManager extends ServiceSupport implements
                 }
                 exchange.setException(new RejectedExecutionException(
                         "Interrupted while waiting for asynchronous callback for exchangeId: " + exchange.getExchangeId()));
-                exchange.adapt(ExtendedExchange.class).setInterrupted(true);
+                exchange.getExchangeExtension().setInterrupted(true);
                 entry.getLatch().countDown();
             }
         }
@@ -312,7 +311,7 @@ public class DefaultAsyncProcessorAwaitManager extends ServiceSupport implements
 
         @Override
         public String getNodeId() {
-            return exchange.adapt(ExtendedExchange.class).getHistoryNodeId();
+            return exchange.getExchangeExtension().getHistoryNodeId();
         }
 
         public CountDownLatch getLatch() {
diff --git a/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/DefaultUnitOfWork.java b/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/DefaultUnitOfWork.java
index 3c6cb7af9d6..55385cfcb40 100644
--- a/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/DefaultUnitOfWork.java
+++ b/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/DefaultUnitOfWork.java
@@ -28,7 +28,6 @@ import java.util.function.Predicate;
 import org.apache.camel.AsyncCallback;
 import org.apache.camel.Exchange;
 import org.apache.camel.ExtendedCamelContext;
-import org.apache.camel.ExtendedExchange;
 import org.apache.camel.Message;
 import org.apache.camel.PooledExchange;
 import org.apache.camel.Processor;
@@ -320,7 +319,7 @@ public class DefaultUnitOfWork implements UnitOfWork {
 
     @Override
     public void beginTransactedBy(Object key) {
-        exchange.adapt(ExtendedExchange.class).setTransacted(true);
+        exchange.getExchangeExtension().setTransacted(true);
         getTransactedBy().add(key);
     }
 
@@ -329,7 +328,7 @@ public class DefaultUnitOfWork implements UnitOfWork {
         getTransactedBy().remove(key);
         // we may still be transacted even if we end this section of transaction
         boolean transacted = isTransacted();
-        exchange.adapt(ExtendedExchange.class).setTransacted(transacted);
+        exchange.getExchangeExtension().setTransacted(transacted);
     }
 
     @Override
diff --git a/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/PooledProcessorExchangeFactory.java b/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/PooledProcessorExchangeFactory.java
index 48dcc697cbf..634d2db3cd7 100644
--- a/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/PooledProcessorExchangeFactory.java
+++ b/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/PooledProcessorExchangeFactory.java
@@ -20,7 +20,6 @@ import org.apache.camel.Endpoint;
 import org.apache.camel.Exchange;
 import org.apache.camel.ExchangePattern;
 import org.apache.camel.ExchangePropertyKey;
-import org.apache.camel.ExtendedExchange;
 import org.apache.camel.PooledExchange;
 import org.apache.camel.Processor;
 import org.apache.camel.spi.ProcessorExchangeFactory;
@@ -59,7 +58,7 @@ public class PooledProcessorExchangeFactory extends PrototypeProcessorExchangeFa
 
     @Override
     public Exchange createCopy(Exchange exchange) {
-        ExtendedExchange answer = (ExtendedExchange) pool.poll();
+        Exchange answer = pool.poll();
         if (answer == null) {
             if (statisticsEnabled) {
                 statistics.created.increment();
@@ -82,7 +81,7 @@ public class PooledProcessorExchangeFactory extends PrototypeProcessorExchangeFa
 
     @Override
     public Exchange createCorrelatedCopy(Exchange exchange, boolean handover) {
-        ExtendedExchange answer = (ExtendedExchange) pool.poll();
+        Exchange answer = pool.poll();
         if (answer == null) {
             if (statisticsEnabled) {
                 statistics.created.increment();
@@ -91,7 +90,7 @@ public class PooledProcessorExchangeFactory extends PrototypeProcessorExchangeFa
             answer = new DefaultPooledExchange(exchange);
             // if creating a copy via constructor (as above) then the unit of work is also
             // copied over to answer, which we then must set to null as we do not want to share unit of work
-            answer.setUnitOfWork(null);
+            answer.getExchangeExtension().setUnitOfWork(null);
         } else {
             if (statisticsEnabled) {
                 statistics.acquired.increment();
@@ -107,7 +106,7 @@ public class PooledProcessorExchangeFactory extends PrototypeProcessorExchangeFa
         answer.getIn().setMessageId(null);
         if (handover) {
             // Need to hand over the completion for async invocation
-            answer.handoverCompletions(exchange);
+            answer.getExchangeExtension().handoverCompletions(exchange);
         }
         // set a correlation id so we can track back the original exchange
         answer.setProperty(ExchangePropertyKey.CORRELATION_ID, exchange.getExchangeId());
diff --git a/core/camel-core-processor/src/main/java/org/apache/camel/processor/CatchProcessor.java b/core/camel-core-processor/src/main/java/org/apache/camel/processor/CatchProcessor.java
index 64be8c6814a..90f7c0bad17 100644
--- a/core/camel-core-processor/src/main/java/org/apache/camel/processor/CatchProcessor.java
+++ b/core/camel-core-processor/src/main/java/org/apache/camel/processor/CatchProcessor.java
@@ -21,7 +21,6 @@ import java.util.List;
 import org.apache.camel.AsyncCallback;
 import org.apache.camel.Exchange;
 import org.apache.camel.ExchangePropertyKey;
-import org.apache.camel.ExtendedExchange;
 import org.apache.camel.Predicate;
 import org.apache.camel.Processor;
 import org.apache.camel.RollbackExchangeException;
@@ -98,13 +97,12 @@ public class CatchProcessor extends DelegateAsyncProcessor implements Traceable,
         }
 
         // must remember some properties which we cannot use during doCatch processing
-        ExtendedExchange ee = (ExtendedExchange) exchange;
-        final boolean stop = ee.isRouteStop();
-        ee.setRouteStop(false);
-        final boolean rollbackOnly = ee.isRollbackOnly();
-        ee.setRollbackOnly(false);
-        final boolean rollbackOnlyLast = ee.isRollbackOnlyLast();
-        ee.setRollbackOnlyLast(false);
+        final boolean stop = exchange.isRouteStop();
+        exchange.setRouteStop(false);
+        final boolean rollbackOnly = exchange.isRollbackOnly();
+        exchange.setRollbackOnly(false);
+        final boolean rollbackOnlyLast = exchange.isRollbackOnlyLast();
+        exchange.setRollbackOnlyLast(false);
 
         // store the last to endpoint as the failure endpoint
         if (exchange.getProperty(ExchangePropertyKey.FAILURE_ENDPOINT) == null) {
diff --git a/core/camel-core-processor/src/main/java/org/apache/camel/processor/Enricher.java b/core/camel-core-processor/src/main/java/org/apache/camel/processor/Enricher.java
index f4acc5d4a20..8563056ab43 100644
--- a/core/camel-core-processor/src/main/java/org/apache/camel/processor/Enricher.java
+++ b/core/camel-core-processor/src/main/java/org/apache/camel/processor/Enricher.java
@@ -26,7 +26,6 @@ import org.apache.camel.ExchangePattern;
 import org.apache.camel.ExchangePropertyKey;
 import org.apache.camel.Expression;
 import org.apache.camel.ExtendedCamelContext;
-import org.apache.camel.ExtendedExchange;
 import org.apache.camel.spi.EndpointUtilizationStatistics;
 import org.apache.camel.spi.IdAware;
 import org.apache.camel.spi.ProcessorExchangeFactory;
@@ -210,7 +209,7 @@ public class Enricher extends AsyncProcessorSupport implements IdAware, RouteIdA
         if (isShareUnitOfWork()) {
             target.setProperty(ExchangePropertyKey.PARENT_UNIT_OF_WORK, source.getUnitOfWork());
             // and then share the unit of work
-            target.adapt(ExtendedExchange.class).setUnitOfWork(source.getUnitOfWork());
+            target.getExchangeExtension().setUnitOfWork(source.getUnitOfWork());
         }
         return target;
     }
diff --git a/core/camel-core-processor/src/main/java/org/apache/camel/processor/FatalFallbackErrorHandler.java b/core/camel-core-processor/src/main/java/org/apache/camel/processor/FatalFallbackErrorHandler.java
index 168797155da..7208ebd943e 100644
--- a/core/camel-core-processor/src/main/java/org/apache/camel/processor/FatalFallbackErrorHandler.java
+++ b/core/camel-core-processor/src/main/java/org/apache/camel/processor/FatalFallbackErrorHandler.java
@@ -22,7 +22,6 @@ import java.util.Deque;
 import org.apache.camel.AsyncCallback;
 import org.apache.camel.Exchange;
 import org.apache.camel.ExchangePropertyKey;
-import org.apache.camel.ExtendedExchange;
 import org.apache.camel.Processor;
 import org.apache.camel.spi.ErrorHandler;
 import org.apache.camel.support.processor.DelegateAsyncProcessor;
@@ -71,7 +70,7 @@ public class FatalFallbackErrorHandler extends DelegateAsyncProcessor implements
             // mark this exchange as already been error handler handled (just by having this property)
             // the false value mean the caught exception will be kept on the exchange, causing the
             // exception to be propagated back to the caller, and to break out routing
-            exchange.adapt(ExtendedExchange.class).setErrorHandlerHandled(false);
+            exchange.getExchangeExtension().setErrorHandlerHandled(false);
             exchange.setProperty(ExchangePropertyKey.ERRORHANDLER_CIRCUIT_DETECTED, true);
             callback.done(true);
             return true;
diff --git a/core/camel-core-processor/src/main/java/org/apache/camel/processor/MulticastProcessor.java b/core/camel-core-processor/src/main/java/org/apache/camel/processor/MulticastProcessor.java
index d4602468844..8816113e1ab 100644
--- a/core/camel-core-processor/src/main/java/org/apache/camel/processor/MulticastProcessor.java
+++ b/core/camel-core-processor/src/main/java/org/apache/camel/processor/MulticastProcessor.java
@@ -44,7 +44,6 @@ import org.apache.camel.Endpoint;
 import org.apache.camel.Exchange;
 import org.apache.camel.ExchangePropertyKey;
 import org.apache.camel.ExtendedCamelContext;
-import org.apache.camel.ExtendedExchange;
 import org.apache.camel.Navigate;
 import org.apache.camel.Processor;
 import org.apache.camel.Producer;
@@ -786,8 +785,7 @@ public class MulticastProcessor extends AsyncProcessorSupport
         // also we would need to know if any error handler has attempted redelivery and exhausted
         boolean stoppedOnException = false;
         boolean exception = false;
-        ExtendedExchange see = (ExtendedExchange) subExchange;
-        boolean exhaust = forceExhaust || see != null && (see.getException() != null || see.isRedeliveryExhausted());
+        boolean exhaust = forceExhaust || subExchange != null && (subExchange.getException() != null || subExchange.getExchangeExtension().isRedeliveryExhausted());
         if (original.getException() != null || subExchange != null && subExchange.getException() != null) {
             // there was an exception and we stopped
             stoppedOnException = isStopOnException();
@@ -911,7 +909,7 @@ public class MulticastProcessor extends AsyncProcessorSupport
         for (Processor processor : processors) {
             // copy exchange, and do not share the unit of work
             Exchange copy = processorExchangeFactory.createCorrelatedCopy(exchange, false);
-            copy.adapt(ExtendedExchange.class).setTransacted(exchange.isTransacted());
+            copy.getExchangeExtension().setTransacted(exchange.isTransacted());
             // If we are in a transaction, set TRANSACTION_CONTEXT_DATA property for new exchanges to share txData
             // during the transaction.
             if (exchange.isTransacted() && copy.getProperty(Exchange.TRANSACTION_CONTEXT_DATA) == null) {
diff --git a/core/camel-core-processor/src/main/java/org/apache/camel/processor/OnCompletionProcessor.java b/core/camel-core-processor/src/main/java/org/apache/camel/processor/OnCompletionProcessor.java
index fc7da959e16..b4b2cf3265c 100644
--- a/core/camel-core-processor/src/main/java/org/apache/camel/processor/OnCompletionProcessor.java
+++ b/core/camel-core-processor/src/main/java/org/apache/camel/processor/OnCompletionProcessor.java
@@ -26,7 +26,6 @@ import org.apache.camel.CamelContext;
 import org.apache.camel.Exchange;
 import org.apache.camel.ExchangePattern;
 import org.apache.camel.ExchangePropertyKey;
-import org.apache.camel.ExtendedExchange;
 import org.apache.camel.Message;
 import org.apache.camel.Ordered;
 import org.apache.camel.Predicate;
@@ -163,26 +162,25 @@ public class OnCompletionProcessor extends AsyncProcessorSupport implements Trac
      * @param exchange  the exchange
      */
     protected static void doProcess(Processor processor, Exchange exchange) {
-        ExtendedExchange ee = (ExtendedExchange) exchange;
         // must remember some properties which we cannot use during onCompletion processing
         // as otherwise we may cause issues
         // but keep the caused exception stored as a property (Exchange.EXCEPTION_CAUGHT) on the exchange
-        boolean stop = ee.isRouteStop();
-        ee.setRouteStop(false);
-        Object failureHandled = ee.removeProperty(ExchangePropertyKey.FAILURE_HANDLED);
-        Boolean errorhandlerHandled = ee.getErrorHandlerHandled();
-        ee.setErrorHandlerHandled(null);
-        boolean rollbackOnly = ee.isRollbackOnly();
-        ee.setRollbackOnly(false);
-        boolean rollbackOnlyLast = ee.isRollbackOnlyLast();
-        ee.setRollbackOnlyLast(false);
+        boolean stop = exchange.isRouteStop();
+        exchange.setRouteStop(false);
+        Object failureHandled = exchange.removeProperty(ExchangePropertyKey.FAILURE_HANDLED);
+        Boolean errorhandlerHandled = exchange.getExchangeExtension().getErrorHandlerHandled();
+        exchange.getExchangeExtension().setErrorHandlerHandled(null);
+        boolean rollbackOnly = exchange.isRollbackOnly();
+        exchange.setRollbackOnly(false);
+        boolean rollbackOnlyLast = exchange.isRollbackOnlyLast();
+        exchange.setRollbackOnlyLast(false);
         // and we should not be regarded as exhausted as we are in a onCompletion block
-        boolean exhausted = ee.getExchangeExtension().isRedeliveryExhausted();
-        ee.setRedeliveryExhausted(false);
+        boolean exhausted = exchange.getExchangeExtension().isRedeliveryExhausted();
+        exchange.getExchangeExtension().setRedeliveryExhausted(false);
 
-        Exception cause = ee.getException();
+        Exception cause = exchange.getException();
         if (cause != null) {
-            ee.setException(null);
+            exchange.setException(null);
         }
 
         try {
@@ -191,18 +189,18 @@ public class OnCompletionProcessor extends AsyncProcessorSupport implements Trac
             exchange.setException(e);
         } finally {
             // restore the options
-            ee.setRouteStop(stop);
+            exchange.setRouteStop(stop);
             if (failureHandled != null) {
-                ee.setProperty(ExchangePropertyKey.FAILURE_HANDLED, failureHandled);
+                exchange.setProperty(ExchangePropertyKey.FAILURE_HANDLED, failureHandled);
             }
             if (errorhandlerHandled != null) {
-                ee.setErrorHandlerHandled(errorhandlerHandled);
+                exchange.getExchangeExtension().setErrorHandlerHandled(errorhandlerHandled);
             }
-            ee.setRollbackOnly(rollbackOnly);
-            ee.setRollbackOnlyLast(rollbackOnlyLast);
-            ee.setRedeliveryExhausted(exhausted);
+            exchange.setRollbackOnly(rollbackOnly);
+            exchange.setRollbackOnlyLast(rollbackOnlyLast);
+            exchange.getExchangeExtension().setRedeliveryExhausted(exhausted);
             if (cause != null) {
-                ee.setException(cause);
+                exchange.setException(cause);
             }
         }
     }
diff --git a/core/camel-core-processor/src/main/java/org/apache/camel/processor/PipelineHelper.java b/core/camel-core-processor/src/main/java/org/apache/camel/processor/PipelineHelper.java
index 4e96f8c3ffb..89e15098dca 100644
--- a/core/camel-core-processor/src/main/java/org/apache/camel/processor/PipelineHelper.java
+++ b/core/camel-core-processor/src/main/java/org/apache/camel/processor/PipelineHelper.java
@@ -17,7 +17,6 @@
 package org.apache.camel.processor;
 
 import org.apache.camel.Exchange;
-import org.apache.camel.ExtendedExchange;
 import org.slf4j.Logger;
 
 /**
@@ -39,9 +38,8 @@ public final class PipelineHelper {
      *                  occurred.
      */
     public static boolean continueProcessing(Exchange exchange, String message, Logger log) {
-        ExtendedExchange ee = (ExtendedExchange) exchange;
-        boolean stop = ee.isFailed() || ee.isRollbackOnly() || ee.isRollbackOnlyLast()
-                || ee.isErrorHandlerHandledSet() && ee.isErrorHandlerHandled();
+        boolean stop = exchange.isFailed() || exchange.isRollbackOnly() || exchange.isRollbackOnlyLast()
+                || exchange.getExchangeExtension().isErrorHandlerHandledSet() && exchange.getExchangeExtension().isErrorHandlerHandled();
         if (stop) {
             // The errorErrorHandler is only set if satisfactory handling was done
             // by the error handler. It's still an exception, the exchange still failed.
@@ -54,7 +52,7 @@ public final class PipelineHelper {
                 if (exchange.getException() != null) {
                     sb.append(" Exception: ").append(exchange.getException());
                 }
-                if (ee.isErrorHandlerHandledSet() && ee.isErrorHandlerHandled()) {
+                if (exchange.getExchangeExtension().isErrorHandlerHandledSet() && exchange.getExchangeExtension().isErrorHandlerHandled()) {
                     sb.append(" Handled by the error handler.");
                 }
                 log.debug(sb.toString());
@@ -64,7 +62,7 @@ public final class PipelineHelper {
         }
 
         // check for stop
-        if (ee.isRouteStop()) {
+        if (exchange.isRouteStop()) {
             if (log.isDebugEnabled()) {
                 log.debug("ExchangeId: {} is marked to stop routing: {}", exchange.getExchangeId(), exchange);
             }
diff --git a/core/camel-core-processor/src/main/java/org/apache/camel/processor/errorhandler/RedeliveryErrorHandler.java b/core/camel-core-processor/src/main/java/org/apache/camel/processor/errorhandler/RedeliveryErrorHandler.java
index 01335cb8acd..44bcb60b9f5 100644
--- a/core/camel-core-processor/src/main/java/org/apache/camel/processor/errorhandler/RedeliveryErrorHandler.java
+++ b/core/camel-core-processor/src/main/java/org/apache/camel/processor/errorhandler/RedeliveryErrorHandler.java
@@ -30,7 +30,6 @@ import org.apache.camel.CamelContext;
 import org.apache.camel.Exchange;
 import org.apache.camel.ExchangePropertyKey;
 import org.apache.camel.ExtendedCamelContext;
-import org.apache.camel.ExtendedExchange;
 import org.apache.camel.LoggingLevel;
 import org.apache.camel.Message;
 import org.apache.camel.Navigate;
@@ -679,7 +678,7 @@ public abstract class RedeliveryErrorHandler extends ErrorHandlerSupport
             // do a defensive copy of the original Exchange, which is needed for redelivery so we can ensure the
             // original Exchange is being redelivered, and not a mutated Exchange
             this.original = redeliveryEnabled ? defensiveCopyExchangeIfNeeded(exchange) : null;
-            this.exchange = (ExtendedExchange) exchange;
+            this.exchange = exchange;
             this.callback = callback;
         }
 
diff --git a/core/camel-core-processor/src/main/java/org/apache/camel/processor/transformer/ProcessorTransformer.java b/core/camel-core-processor/src/main/java/org/apache/camel/processor/transformer/ProcessorTransformer.java
index cbab3c75ae4..62455d9422f 100644
--- a/core/camel-core-processor/src/main/java/org/apache/camel/processor/transformer/ProcessorTransformer.java
+++ b/core/camel-core-processor/src/main/java/org/apache/camel/processor/transformer/ProcessorTransformer.java
@@ -18,7 +18,6 @@ package org.apache.camel.processor.transformer;
 
 import org.apache.camel.CamelContext;
 import org.apache.camel.Exchange;
-import org.apache.camel.ExtendedExchange;
 import org.apache.camel.Message;
 import org.apache.camel.Processor;
 import org.apache.camel.spi.DataType;
@@ -70,7 +69,7 @@ public class ProcessorTransformer extends Transformer {
         // must create a copy in this way
         Exchange transformExchange = new DefaultExchange(exchange);
         transformExchange.setIn(message);
-        transformExchange.adapt(ExtendedExchange.class).setProperties(exchange.getProperties());
+        transformExchange.getExchangeExtension().setProperties(exchange.getProperties());
         processor.process(transformExchange);
         Message answer = transformExchange.getMessage();
 
diff --git a/core/camel-core/src/test/java/org/apache/camel/impl/DefaultExchangeTest.java b/core/camel-core/src/test/java/org/apache/camel/impl/DefaultExchangeTest.java
index 766fa21a935..627d6df8d39 100644
--- a/core/camel-core/src/test/java/org/apache/camel/impl/DefaultExchangeTest.java
+++ b/core/camel-core/src/test/java/org/apache/camel/impl/DefaultExchangeTest.java
@@ -304,7 +304,7 @@ public class DefaultExchangeTest extends ExchangeTestSupport {
         DefaultExchange exchange = new DefaultExchange(context);
         SafeProperty property = new SafeProperty();
         UnsafeProperty unsafeProperty = new UnsafeProperty();
-        exchange.setSafeCopyProperty(SAFE_PROPERTY, property);
+        exchange.getExchangeExtension().setSafeCopyProperty(SAFE_PROPERTY, property);
         exchange.setProperty(UNSAFE_PROPERTY, unsafeProperty);
 
         Exchange copy = ExchangeHelper.createCorrelatedCopy(exchange, false);
diff --git a/core/camel-support/src/main/java/org/apache/camel/support/EventHelper.java b/core/camel-support/src/main/java/org/apache/camel/support/EventHelper.java
index 3d88c9826ba..317d2afd4ff 100644
--- a/core/camel-support/src/main/java/org/apache/camel/support/EventHelper.java
+++ b/core/camel-support/src/main/java/org/apache/camel/support/EventHelper.java
@@ -22,7 +22,6 @@ import java.util.function.BiFunction;
 import org.apache.camel.CamelContext;
 import org.apache.camel.Endpoint;
 import org.apache.camel.Exchange;
-import org.apache.camel.ExtendedExchange;
 import org.apache.camel.Processor;
 import org.apache.camel.Route;
 import org.apache.camel.spi.CamelEvent;
@@ -634,7 +633,7 @@ public final class EventHelper {
             return false;
         }
 
-        if (((ExtendedExchange) exchange).isNotifyEvent()) {
+        if (exchange.getExchangeExtension().isNotifyEvent()) {
             // do not generate events for an notify event
             return false;
         }
@@ -680,7 +679,7 @@ public final class EventHelper {
             return false;
         }
 
-        if (((ExtendedExchange) exchange).isNotifyEvent()) {
+        if (exchange.getExchangeExtension().isNotifyEvent()) {
             // do not generate events for an notify event
             return false;
         }
@@ -726,7 +725,7 @@ public final class EventHelper {
             return false;
         }
 
-        if (((ExtendedExchange) exchange).isNotifyEvent()) {
+        if (exchange.getExchangeExtension().isNotifyEvent()) {
             // do not generate events for an notify event
             return false;
         }
@@ -774,7 +773,7 @@ public final class EventHelper {
             return false;
         }
 
-        if (((ExtendedExchange) exchange).isNotifyEvent()) {
+        if (exchange.getExchangeExtension().isNotifyEvent()) {
             // do not generate events for an notify event
             return false;
         }
@@ -822,7 +821,7 @@ public final class EventHelper {
             return false;
         }
 
-        if (((ExtendedExchange) exchange).isNotifyEvent()) {
+        if (exchange.getExchangeExtension().isNotifyEvent()) {
             // do not generate events for an notify event
             return false;
         }
@@ -868,7 +867,7 @@ public final class EventHelper {
             return false;
         }
 
-        if (((ExtendedExchange) exchange).isNotifyEvent()) {
+        if (exchange.getExchangeExtension().isNotifyEvent()) {
             // do not generate events for an notify event
             return false;
         }
@@ -914,7 +913,7 @@ public final class EventHelper {
             return false;
         }
 
-        if (((ExtendedExchange) exchange).isNotifyEvent()) {
+        if (exchange.getExchangeExtension().isNotifyEvent()) {
             // do not generate events for an notify event
             return false;
         }
@@ -960,7 +959,7 @@ public final class EventHelper {
             return false;
         }
 
-        if (((ExtendedExchange) exchange).isNotifyEvent()) {
+        if (exchange.getExchangeExtension().isNotifyEvent()) {
             // do not generate events for notify event
             return false;
         }
@@ -1474,7 +1473,7 @@ public final class EventHelper {
             return false;
         }
 
-        if (((ExtendedExchange) exchange).isNotifyEvent()) {
+        if (exchange.getExchangeExtension().isNotifyEvent()) {
             // do not generate events for an notify event
             return false;
         }
diff --git a/core/camel-support/src/main/java/org/apache/camel/support/MessageHelper.java b/core/camel-support/src/main/java/org/apache/camel/support/MessageHelper.java
index 095e21b995f..582ba563844 100644
--- a/core/camel-support/src/main/java/org/apache/camel/support/MessageHelper.java
+++ b/core/camel-support/src/main/java/org/apache/camel/support/MessageHelper.java
@@ -30,7 +30,6 @@ import java.util.TreeMap;
 
 import org.apache.camel.Exchange;
 import org.apache.camel.ExchangePropertyKey;
-import org.apache.camel.ExtendedExchange;
 import org.apache.camel.Message;
 import org.apache.camel.MessageHistory;
 import org.apache.camel.Route;
@@ -730,7 +729,7 @@ public final class MessageHelper {
             // instead
             id = exchange.getExchangeExtension().getHistoryNodeId();
             if (id != null) {
-                loc = exchange.adapt(ExtendedExchange.class).getHistoryNodeSource();
+                loc = exchange.getExchangeExtension().getHistoryNodeSource();
                 if (loc == null) {
                     loc = "";
                 }


[camel] 03/23: CAMEL-15105: rework usages of ExtendedExchange in ExchangeHelper

Posted by or...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

orpiske pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/camel.git

commit 67cf609766e8978718e5985e912a0507f9bb0492
Author: Otavio Rodolfo Piske <an...@gmail.com>
AuthorDate: Wed Nov 23 09:28:49 2022 +0100

    CAMEL-15105: rework usages of ExtendedExchange in ExchangeHelper
---
 .../org/apache/camel/support/ExchangeHelper.java   | 26 ++++++++++------------
 1 file changed, 12 insertions(+), 14 deletions(-)

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 4dda266f475..06c5ecde07c 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
@@ -37,7 +37,6 @@ import org.apache.camel.Endpoint;
 import org.apache.camel.Exchange;
 import org.apache.camel.ExchangePattern;
 import org.apache.camel.ExchangePropertyKey;
-import org.apache.camel.ExtendedExchange;
 import org.apache.camel.Message;
 import org.apache.camel.MessageHistory;
 import org.apache.camel.NoSuchBeanException;
@@ -292,11 +291,10 @@ public final class ExchangeHelper {
             copy.getIn().setMessageId(null);
         }
         // do not share the unit of work
-        ExtendedExchange ce = (ExtendedExchange) copy;
-        ce.setUnitOfWork(null);
+        copy.getExchangeExtension().setUnitOfWork(null);
         if (handover) {
             // Need to hand over the completion for async invocation
-            exchange.adapt(ExtendedExchange.class).handoverCompletions(ce);
+            exchange.getExchangeExtension().handoverCompletions(copy);
         }
         // set a correlation id so we can track back the original exchange
         copy.setProperty(ExchangePropertyKey.CORRELATION_ID, id);
@@ -329,7 +327,7 @@ public final class ExchangeHelper {
      * @param source the source exchange which is not modified
      */
     public static void copyResults(Exchange target, Exchange source) {
-        doCopyResults((ExtendedExchange) target, (ExtendedExchange) source, false);
+        doCopyResults(target, source, false);
     }
 
     /**
@@ -340,10 +338,10 @@ public final class ExchangeHelper {
      * @param source source exchange.
      */
     public static void copyResultsPreservePattern(Exchange target, Exchange source) {
-        doCopyResults((ExtendedExchange) target, (ExtendedExchange) source, true);
+        doCopyResults(target, source, true);
     }
 
-    private static void doCopyResults(ExtendedExchange result, ExtendedExchange source, boolean preserverPattern) {
+    private static void doCopyResults(Exchange result, Exchange source, boolean preserverPattern) {
         if (result == source) {
             // we just need to ensure MEP is as expected (eg copy result to OUT if out capable)
             // and the result is not failed
@@ -389,15 +387,15 @@ public final class ExchangeHelper {
         if (source.hasProperties()) {
             result.getProperties().putAll(source.getProperties());
         }
-        source.adapt(ExtendedExchange.class).copyInternalProperties(result);
+        source.getExchangeExtension().copyInternalProperties(result);
 
         // copy over state
         result.setRouteStop(source.isRouteStop());
         result.setRollbackOnly(source.isRollbackOnly());
         result.setRollbackOnlyLast(source.isRollbackOnlyLast());
-        result.setNotifyEvent(source.isNotifyEvent());
-        result.setRedeliveryExhausted(source.isRedeliveryExhausted());
-        result.setErrorHandlerHandled(source.getErrorHandlerHandled());
+        result.getExchangeExtension().setNotifyEvent(source.getExchangeExtension().isNotifyEvent());
+        result.getExchangeExtension().setRedeliveryExhausted(source.getExchangeExtension().isRedeliveryExhausted());
+        result.getExchangeExtension().setErrorHandlerHandled(source.getExchangeExtension().getErrorHandlerHandled());
         result.setException(source.getException());
     }
 
@@ -814,9 +812,9 @@ public final class ExchangeHelper {
     public static Exchange copyExchangeAndSetCamelContext(Exchange exchange, CamelContext context, boolean handover) {
         DefaultExchange answer = new DefaultExchange(context, exchange.getPattern());
         if (exchange.hasProperties()) {
-            answer.setProperties(safeCopyProperties(exchange.getProperties()));
+            answer.getExchangeExtension().setProperties(safeCopyProperties(exchange.getProperties()));
         }
-        exchange.adapt(ExtendedExchange.class).copyInternalProperties(answer);
+        exchange.getExchangeExtension().copyInternalProperties(answer);
         // safe copy message history using a defensive copy
         List<MessageHistory> history
                 = (List<MessageHistory>) exchange.getProperty(ExchangePropertyKey.MESSAGE_HISTORY);
@@ -827,7 +825,7 @@ public final class ExchangeHelper {
 
         if (handover) {
             // Need to hand over the completion for async invocation
-            exchange.adapt(ExtendedExchange.class).handoverCompletions(answer);
+            exchange.getExchangeExtension().handoverCompletions(answer);
         }
         answer.setIn(exchange.getIn().copy());
         if (exchange.hasOut()) {


[camel] 12/23: CAMEL-15105: rework setting from route/endpoint properties

Posted by or...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

orpiske pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/camel.git

commit 85e12ebe270778592e378441b52e39a0ba30637f
Author: Otavio Rodolfo Piske <an...@gmail.com>
AuthorDate: Wed Nov 23 13:30:27 2022 +0100

    CAMEL-15105: rework setting from route/endpoint properties
---
 .../org/apache/camel/language/csimple/joor/OriginalSimpleTest.java  | 2 +-
 .../java/org/apache/camel/component/directvm/DirectVmProcessor.java | 2 +-
 .../org/apache/camel/component/disruptor/DisruptorConsumer.java     | 2 +-
 .../org/apache/camel/component/disruptor/DisruptorProducer.java     | 2 +-
 .../java/org/apache/camel/component/leveldb/LevelDBCamelCodec.java  | 3 +--
 .../src/main/java/org/apache/camel/component/seda/SedaConsumer.java | 5 ++---
 .../org/apache/camel/processor/aggregate/jdbc/JdbcCamelCodec.java   | 3 +--
 .../src/main/java/org/apache/camel/component/vm/VmConsumer.java     | 6 ++----
 .../java/org/apache/camel/impl/engine/CamelInternalProcessor.java   | 3 +--
 .../src/test/java/org/apache/camel/language/simple/SimpleTest.java  | 2 +-
 .../test/java/org/apache/camel/processor/UnitOfWorkHelperTest.java  | 3 +--
 .../src/main/java/org/apache/camel/support/DefaultConsumer.java     | 5 +++--
 12 files changed, 16 insertions(+), 22 deletions(-)

diff --git a/components/camel-csimple-joor/src/test/java/org/apache/camel/language/csimple/joor/OriginalSimpleTest.java b/components/camel-csimple-joor/src/test/java/org/apache/camel/language/csimple/joor/OriginalSimpleTest.java
index 501b370ef61..e3fa5c63658 100644
--- a/components/camel-csimple-joor/src/test/java/org/apache/camel/language/csimple/joor/OriginalSimpleTest.java
+++ b/components/camel-csimple-joor/src/test/java/org/apache/camel/language/csimple/joor/OriginalSimpleTest.java
@@ -227,7 +227,7 @@ public class OriginalSimpleTest extends LanguageTestSupport {
         assertExpression("${header.foo}", "abc");
         assertExpression("${headers.foo}", "abc");
         assertExpression("${routeId}", exchange.getFromRouteId());
-        exchange.adapt(ExtendedExchange.class).setFromRouteId("myRouteId");
+        exchange.getExchangeExtension().setFromRouteId("myRouteId");
         assertExpression("${routeId}", "myRouteId");
     }
 
diff --git a/components/camel-directvm/src/main/java/org/apache/camel/component/directvm/DirectVmProcessor.java b/components/camel-directvm/src/main/java/org/apache/camel/component/directvm/DirectVmProcessor.java
index b7447485ae8..0d6c21a0a81 100644
--- a/components/camel-directvm/src/main/java/org/apache/camel/component/directvm/DirectVmProcessor.java
+++ b/components/camel-directvm/src/main/java/org/apache/camel/component/directvm/DirectVmProcessor.java
@@ -89,7 +89,7 @@ public final class DirectVmProcessor extends DelegateAsyncProcessor {
         // send a new copied exchange with new camel context (do not handover completions)
         Exchange newExchange = ExchangeHelper.copyExchangeAndSetCamelContext(exchange, endpoint.getCamelContext(), false);
         // set the from endpoint
-        newExchange.adapt(ExtendedExchange.class).setFromEndpoint(endpoint);
+        newExchange.getExchangeExtension().setFromEndpoint(endpoint);
         // The StreamCache created by the child routes must not be
         // closed by the unit of work of the child route, but by the unit of
         // work of the parent route or grand parent route or grand grand parent route ...(in case of nesting).
diff --git a/components/camel-disruptor/src/main/java/org/apache/camel/component/disruptor/DisruptorConsumer.java b/components/camel-disruptor/src/main/java/org/apache/camel/component/disruptor/DisruptorConsumer.java
index cee5b483814..224b27e3d1f 100644
--- a/components/camel-disruptor/src/main/java/org/apache/camel/component/disruptor/DisruptorConsumer.java
+++ b/components/camel-disruptor/src/main/java/org/apache/camel/component/disruptor/DisruptorConsumer.java
@@ -139,7 +139,7 @@ public class DisruptorConsumer extends ServiceSupport implements Consumer, Suspe
         final Exchange newExchange = ExchangeHelper
                 .copyExchangeAndSetCamelContext(exchange, endpoint.getCamelContext(), false);
         // set the from endpoint
-        newExchange.adapt(ExtendedExchange.class).setFromEndpoint(endpoint);
+        newExchange.getExchangeExtension().setFromEndpoint(endpoint);
         return newExchange;
     }
 
diff --git a/components/camel-disruptor/src/main/java/org/apache/camel/component/disruptor/DisruptorProducer.java b/components/camel-disruptor/src/main/java/org/apache/camel/component/disruptor/DisruptorProducer.java
index a35ba77cf9b..b3533bdd1ee 100644
--- a/components/camel-disruptor/src/main/java/org/apache/camel/component/disruptor/DisruptorProducer.java
+++ b/components/camel-disruptor/src/main/java/org/apache/camel/component/disruptor/DisruptorProducer.java
@@ -197,7 +197,7 @@ public class DisruptorProducer extends DefaultAsyncProducer {
         // use a new copy of the exchange to route async
         final Exchange copy = ExchangeHelper.createCorrelatedCopy(exchange, handover);
         // set a new from endpoint to be the disruptor
-        copy.adapt(ExtendedExchange.class).setFromEndpoint(endpoint);
+        copy.getExchangeExtension().setFromEndpoint(endpoint);
         return copy;
     }
 }
diff --git a/components/camel-leveldb/src/main/java/org/apache/camel/component/leveldb/LevelDBCamelCodec.java b/components/camel-leveldb/src/main/java/org/apache/camel/component/leveldb/LevelDBCamelCodec.java
index b4df35c95ee..a468c0fd0a5 100644
--- a/components/camel-leveldb/src/main/java/org/apache/camel/component/leveldb/LevelDBCamelCodec.java
+++ b/components/camel-leveldb/src/main/java/org/apache/camel/component/leveldb/LevelDBCamelCodec.java
@@ -21,7 +21,6 @@ import java.io.IOException;
 import org.apache.camel.CamelContext;
 import org.apache.camel.Endpoint;
 import org.apache.camel.Exchange;
-import org.apache.camel.ExtendedExchange;
 import org.apache.camel.component.leveldb.serializer.DefaultLevelDBSerializer;
 
 public final class LevelDBCamelCodec {
@@ -58,7 +57,7 @@ public final class LevelDBCamelCodec {
         if (fromEndpointUri != null) {
             Endpoint fromEndpoint = camelContext.hasEndpoint(fromEndpointUri);
             if (fromEndpoint != null) {
-                answer.adapt(ExtendedExchange.class).setFromEndpoint(fromEndpoint);
+                answer.getExchangeExtension().setFromEndpoint(fromEndpoint);
             }
         }
         return answer;
diff --git a/components/camel-seda/src/main/java/org/apache/camel/component/seda/SedaConsumer.java b/components/camel-seda/src/main/java/org/apache/camel/component/seda/SedaConsumer.java
index f951f012039..74261b683df 100644
--- a/components/camel-seda/src/main/java/org/apache/camel/component/seda/SedaConsumer.java
+++ b/components/camel-seda/src/main/java/org/apache/camel/component/seda/SedaConsumer.java
@@ -221,9 +221,8 @@ public class SedaConsumer extends DefaultConsumer implements Runnable, ShutdownA
      */
     protected Exchange prepareExchange(Exchange exchange) {
         // this consumer grabbed the exchange so mark its from this route/endpoint
-        ExtendedExchange ee = exchange.adapt(ExtendedExchange.class);
-        ee.setFromEndpoint(getEndpoint());
-        ee.setFromRouteId(getRouteId());
+        exchange.getExchangeExtension().setFromEndpoint(getEndpoint());
+        exchange.getExchangeExtension().setFromRouteId(getRouteId());
         return exchange;
     }
 
diff --git a/components/camel-sql/src/main/java/org/apache/camel/processor/aggregate/jdbc/JdbcCamelCodec.java b/components/camel-sql/src/main/java/org/apache/camel/processor/aggregate/jdbc/JdbcCamelCodec.java
index 7f4b1a12c48..933e20f5629 100644
--- a/components/camel-sql/src/main/java/org/apache/camel/processor/aggregate/jdbc/JdbcCamelCodec.java
+++ b/components/camel-sql/src/main/java/org/apache/camel/processor/aggregate/jdbc/JdbcCamelCodec.java
@@ -28,7 +28,6 @@ import org.apache.camel.CamelContext;
 import org.apache.camel.Endpoint;
 import org.apache.camel.Exchange;
 import org.apache.camel.ExchangePropertyKey;
-import org.apache.camel.ExtendedExchange;
 import org.apache.camel.support.DefaultExchange;
 import org.apache.camel.support.DefaultExchangeHolder;
 import org.apache.camel.util.ClassLoadingAwareObjectInputStream;
@@ -88,7 +87,7 @@ public class JdbcCamelCodec {
         if (fromEndpointUri != null) {
             Endpoint fromEndpoint = camelContext.hasEndpoint(fromEndpointUri);
             if (fromEndpoint != null) {
-                answer.adapt(ExtendedExchange.class).setFromEndpoint(fromEndpoint);
+                answer.getExchangeExtension().setFromEndpoint(fromEndpoint);
             }
         }
         return answer;
diff --git a/components/camel-vm/src/main/java/org/apache/camel/component/vm/VmConsumer.java b/components/camel-vm/src/main/java/org/apache/camel/component/vm/VmConsumer.java
index 66f8228261c..d7468d7ab4b 100644
--- a/components/camel-vm/src/main/java/org/apache/camel/component/vm/VmConsumer.java
+++ b/components/camel-vm/src/main/java/org/apache/camel/component/vm/VmConsumer.java
@@ -19,7 +19,6 @@ package org.apache.camel.component.vm;
 import org.apache.camel.CamelContext;
 import org.apache.camel.CamelContextAware;
 import org.apache.camel.Exchange;
-import org.apache.camel.ExtendedExchange;
 import org.apache.camel.Processor;
 import org.apache.camel.component.seda.SedaConsumer;
 import org.apache.camel.support.ExchangeHelper;
@@ -53,9 +52,8 @@ public class VmConsumer extends SedaConsumer implements CamelContextAware {
         // send a new copied exchange with the camel context from this consumer
         Exchange newExchange = ExchangeHelper.copyExchangeAndSetCamelContext(exchange, getCamelContext());
         // this consumer grabbed the exchange so mark its from this route/endpoint
-        ExtendedExchange ee = newExchange.adapt(ExtendedExchange.class);
-        ee.setFromEndpoint(getEndpoint());
-        ee.setFromRouteId(getRouteId());
+        newExchange.getExchangeExtension().setFromEndpoint(getEndpoint());
+        newExchange.getExchangeExtension().setFromRouteId(getRouteId());
         return newExchange;
     }
 
diff --git a/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/CamelInternalProcessor.java b/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/CamelInternalProcessor.java
index 05e7b3d1d17..c4d59eff15e 100644
--- a/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/CamelInternalProcessor.java
+++ b/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/CamelInternalProcessor.java
@@ -770,8 +770,7 @@ public class CamelInternalProcessor extends DelegateAsyncProcessor implements In
                 if (routeId == null) {
                     this.routeId = route.getRouteId();
                 }
-                ExtendedExchange ee = (ExtendedExchange) exchange;
-                ee.setFromRouteId(routeId);
+                exchange.getExchangeExtension().setFromRouteId(routeId);
             }
 
             // only return UnitOfWork if we created a new as then its us that handle the lifecycle to done the created UoW
diff --git a/core/camel-core/src/test/java/org/apache/camel/language/simple/SimpleTest.java b/core/camel-core/src/test/java/org/apache/camel/language/simple/SimpleTest.java
index 40739fe581b..71761264db8 100644
--- a/core/camel-core/src/test/java/org/apache/camel/language/simple/SimpleTest.java
+++ b/core/camel-core/src/test/java/org/apache/camel/language/simple/SimpleTest.java
@@ -226,7 +226,7 @@ public class SimpleTest extends LanguageTestSupport {
         assertExpression("${header.foo}", "abc");
         assertExpression("${headers.foo}", "abc");
         assertExpression("${routeId}", exchange.getFromRouteId());
-        exchange.adapt(ExtendedExchange.class).setFromRouteId("myRouteId");
+        exchange.getExchangeExtension().setFromRouteId("myRouteId");
         assertExpression("${routeId}", "myRouteId");
     }
 
diff --git a/core/camel-core/src/test/java/org/apache/camel/processor/UnitOfWorkHelperTest.java b/core/camel-core/src/test/java/org/apache/camel/processor/UnitOfWorkHelperTest.java
index 855d7b97626..fdceb7a4b19 100644
--- a/core/camel-core/src/test/java/org/apache/camel/processor/UnitOfWorkHelperTest.java
+++ b/core/camel-core/src/test/java/org/apache/camel/processor/UnitOfWorkHelperTest.java
@@ -65,8 +65,7 @@ public class UnitOfWorkHelperTest extends ContextTestSupport {
         testMessage.setBody(testFile);
 
         testExchange.setIn(testMessage);
-        ExtendedExchange extExchange = testExchange.adapt(ExtendedExchange.class);
-        extExchange.setFromEndpoint(fromEndpoint);
+        testExchange.getExchangeExtension().setFromEndpoint(fromEndpoint);
         testExchange.setProperty(FileComponent.FILE_EXCHANGE_FILE, testFile);
 
         return testExchange;
diff --git a/core/camel-support/src/main/java/org/apache/camel/support/DefaultConsumer.java b/core/camel-support/src/main/java/org/apache/camel/support/DefaultConsumer.java
index d3d97b3fa8a..df40967f49d 100644
--- a/core/camel-support/src/main/java/org/apache/camel/support/DefaultConsumer.java
+++ b/core/camel-support/src/main/java/org/apache/camel/support/DefaultConsumer.java
@@ -107,7 +107,7 @@ public class DefaultConsumer extends ServiceSupport implements Consumer, RouteAw
         // if the exchange doesn't have from route id set, then set it if it originated
         // from this unit of work
         if (route != null && exchange.getFromRouteId() == null) {
-            exchange.adapt(ExtendedExchange.class).setFromRouteId(route.getId());
+            exchange.getExchangeExtension().setFromRouteId(route.getId());
         }
 
         // create uow (however for pooled exchanges then the uow is pre-created)
@@ -135,7 +135,8 @@ public class DefaultConsumer extends ServiceSupport implements Consumer, RouteAw
     public Exchange createExchange(boolean autoRelease) {
         Exchange answer = exchangeFactory.create(getEndpoint(), autoRelease);
         endpoint.configureExchange(answer);
-        answer.adapt(ExtendedExchange.class).setFromRouteId(routeId);
+
+        answer.getExchangeExtension().setFromRouteId(routeId);
         return answer;
     }
 


[camel] 02/23: CAMEL-15105: convert setting notify events in camel-cdi and camel-management

Posted by or...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

orpiske pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/camel.git

commit db69991c06744b3217f561ae11767669b75dd6c7
Author: Otavio Rodolfo Piske <an...@gmail.com>
AuthorDate: Tue Nov 22 18:36:50 2022 +0100

    CAMEL-15105: convert setting notify events in camel-cdi and camel-management
---
 .../main/java/org/apache/camel/management/PublishEventNotifier.java  | 5 ++---
 1 file changed, 2 insertions(+), 3 deletions(-)

diff --git a/core/camel-management/src/main/java/org/apache/camel/management/PublishEventNotifier.java b/core/camel-management/src/main/java/org/apache/camel/management/PublishEventNotifier.java
index 93489442f5e..4193ef54009 100644
--- a/core/camel-management/src/main/java/org/apache/camel/management/PublishEventNotifier.java
+++ b/core/camel-management/src/main/java/org/apache/camel/management/PublishEventNotifier.java
@@ -22,7 +22,6 @@ import org.apache.camel.CamelContext;
 import org.apache.camel.CamelContextAware;
 import org.apache.camel.Endpoint;
 import org.apache.camel.Exchange;
-import org.apache.camel.ExtendedExchange;
 import org.apache.camel.Producer;
 import org.apache.camel.spi.CamelEvent;
 import org.apache.camel.support.EventNotifierSupport;
@@ -69,12 +68,12 @@ public class PublishEventNotifier extends EventNotifierSupport implements CamelC
         // make sure we don't send out events for this as well
         // mark exchange as being published to event, to prevent creating new events
         // for this as well (causing a endless flood of events)
-        exchange.adapt(ExtendedExchange.class).setNotifyEvent(true);
+        exchange.getExchangeExtension().setNotifyEvent(true);
         try {
             producer.process(exchange);
         } finally {
             // and remove it when its done
-            exchange.adapt(ExtendedExchange.class).setNotifyEvent(false);
+            exchange.getExchangeExtension().setNotifyEvent(false);
         }
     }
 


[camel] 01/23: CAMEL-15105: decouple the ExtendedExchange from the Exchange

Posted by or...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

orpiske pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/camel.git

commit 72c146dc9ea26c11744d8a408d14c1096425fcef
Author: Otavio Rodolfo Piske <an...@gmail.com>
AuthorDate: Mon Feb 13 17:04:57 2023 +0100

    CAMEL-15105: decouple the ExtendedExchange from the Exchange
---
 .../src/main/java/org/apache/camel/Exchange.java   |   4 +
 ...xtendedExchange.java => ExchangeExtension.java} | 179 ++++++++---------
 .../java/org/apache/camel/ExtendedExchange.java    | 220 +--------------------
 .../java/org/apache/camel/SafeCopyProperty.java    |   4 +-
 .../org/apache/camel/support/AbstractExchange.java |  22 ++-
 .../camel/support/ExtendedExchangeExtension.java   | 216 ++++++++++++++++++++
 6 files changed, 333 insertions(+), 312 deletions(-)

diff --git a/core/camel-api/src/main/java/org/apache/camel/Exchange.java b/core/camel-api/src/main/java/org/apache/camel/Exchange.java
index 7e248c0e578..1ad47031e7b 100644
--- a/core/camel-api/src/main/java/org/apache/camel/Exchange.java
+++ b/core/camel-api/src/main/java/org/apache/camel/Exchange.java
@@ -270,6 +270,8 @@ public interface Exchange {
      * <p/>
      * For example to adapt to <tt>ExtendedExchange</tt>.
      *
+     * This method is deprecated. Use the getter to {@link ExchangeExtension}.
+     *
      * @param  type the type to adapt to
      * @return      this {@link org.apache.camel.Exchange} adapted to the given type
      */
@@ -680,4 +682,6 @@ public interface Exchange {
      */
     long getCreated();
 
+    ExchangeExtension getExchangeExtension();
+
 }
diff --git a/core/camel-api/src/main/java/org/apache/camel/ExtendedExchange.java b/core/camel-api/src/main/java/org/apache/camel/ExchangeExtension.java
similarity index 92%
copy from core/camel-api/src/main/java/org/apache/camel/ExtendedExchange.java
copy to core/camel-api/src/main/java/org/apache/camel/ExchangeExtension.java
index 929b7c0a943..999ad17979d 100644
--- a/core/camel-api/src/main/java/org/apache/camel/ExtendedExchange.java
+++ b/core/camel-api/src/main/java/org/apache/camel/ExchangeExtension.java
@@ -14,6 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
+
 package org.apache.camel;
 
 import java.util.List;
@@ -22,17 +23,17 @@ import java.util.Map;
 import org.apache.camel.spi.Synchronization;
 import org.apache.camel.spi.UnitOfWork;
 
-/**
- * Extended {@link Exchange} which contains the methods and APIs that are not intended for Camel end users but used
- * internally by Camel for optimization purposes, SPI, custom components, or more advanced used-cases with Camel.
+/*
+ * {@link Exchange} extensions which contains the methods and APIs that are not intended for Camel end users but
+ * used internally by Camel for optimization purposes, SPI, custom components, or more advanced used-cases with
+ * Camel.
  */
-public interface ExtendedExchange extends Exchange {
-
+public interface ExchangeExtension {
     /**
      * If there is an existing inbound message of the given type then return it as-is, otherwise return null.
      *
-     * @param  type the given type
-     * @return      the message if exists with the given type, otherwise null.
+     * @param type the given type
+     * @return the message if exists with the given type, otherwise null.
      */
     <T> T getInOrNull(Class<T> type);
 
@@ -54,9 +55,14 @@ public interface ExtendedExchange extends Exchange {
     void setUnitOfWork(UnitOfWork unitOfWork);
 
     /**
-     * Sets the properties on the exchange
+     * Is stream caching disabled on the given exchange
      */
-    void setProperties(Map<String, Object> properties);
+    boolean isStreamCacheDisabled();
+
+    /**
+     * Used to force disabling stream caching which some components can do in special use-cases.
+     */
+    void setStreamCacheDisabled(boolean streamCacheDisabled);
 
     /**
      * Adds a {@link org.apache.camel.spi.Synchronization} to be invoked as callback when this exchange is completed.
@@ -66,141 +72,145 @@ public interface ExtendedExchange extends Exchange {
     void addOnCompletion(Synchronization onCompletion);
 
     /**
-     * Checks if the passed {@link Synchronization} instance is already contained on this exchange.
-     *
-     * @param  onCompletion the callback instance that is being checked for
-     * @return              <tt>true</tt>, if callback instance is already contained on this exchange, else
-     *                      <tt>false</tt>
+     * Whether the error handler handled flag has been set.
      */
-    boolean containsOnCompletion(Synchronization onCompletion);
+    boolean isErrorHandlerHandledSet();
 
     /**
-     * Handover all the on completions from this exchange to the target exchange.
+     * Whether the exchange has been handled by the error handler. This is used internally by Camel.
+     * <p>
+     * Important: Call {@link #isErrorHandlerHandledSet()} first before this method.
+     *
+     * @see #isErrorHandlerHandledSet()
      */
-    void handoverCompletions(Exchange target);
+    boolean isErrorHandlerHandled();
 
     /**
-     * Handover all the on completions from this exchange
+     * Whether the exchange has been handled by the error handler. This is used internally by Camel.
      */
-    List<Synchronization> handoverCompletions();
+    Boolean getErrorHandlerHandled();
 
     /**
-     * Sets the history node id (the current processor that will process the exchange)
+     * Used to signal that this exchange has been handled by the error handler. This is used internally by Camel.
      */
-    void setHistoryNodeId(String historyNodeId);
+    void setErrorHandlerHandled(Boolean errorHandlerHandled);
 
     /**
-     * Gets the history node id (the current processor that will process the exchange)
+     * To control whether the exchange can accept being interrupted currently.
      */
-    String getHistoryNodeId();
+    void setInterruptable(boolean interruptable);
 
     /**
-     * Sets the history node label (the current processor that will process the exchange)
+     * Whether the exchange was interrupted (InterruptException) during routing.
      */
-    void setHistoryNodeLabel(String historyNodeLabel);
+    boolean isInterrupted();
 
     /**
-     * Gets the history node label (the current processor that will process the exchange)
+     * Used to signal that this exchange was interrupted (InterruptException) during routing.
      */
-    String getHistoryNodeLabel();
+    void setInterrupted(boolean interrupted);
 
     /**
-     * Gets the history node source:line-number where the node is located in the source code (the current processor that
-     * will process the exchange).
+     * Whether the exchange has exhausted (attempted all) its redeliveries and still failed. This is used internally by
+     * Camel.
      */
-    String getHistoryNodeSource();
+    boolean isRedeliveryExhausted();
 
     /**
-     * Sets the history node source:line-number where the node is located in the source code (the current processor that
-     * will process the exchange).
+     * Used to signal that this exchange has exhausted (attempted all) its redeliveries and still failed. This is used
+     * internally by Camel.
      */
-    void setHistoryNodeSource(String historyNodeSource);
+    void setRedeliveryExhausted(boolean redeliveryExhausted);
 
     /**
-     * Is stream caching disabled on the given exchange
+     * Checks if the passed {@link Synchronization} instance is already contained on this exchange.
+     *
+     * @param onCompletion the callback instance that is being checked for
+     * @return <tt>true</tt>, if callback instance is already contained on this exchange, else
+     * <tt>false</tt>
      */
-    boolean isStreamCacheDisabled();
+    boolean containsOnCompletion(Synchronization onCompletion);
 
     /**
-     * Used to force disabling stream caching which some components can do in special use-cases.
+     * Handover all the on completions from this exchange to the target exchange.
      */
-    void setStreamCacheDisabled(boolean streamCacheDisabled);
+    void handoverCompletions(Exchange target);
 
     /**
-     * Sets whether the exchange is routed in a transaction.
+     * Handover all the on completions from this exchange
      */
-    void setTransacted(boolean transacted);
+    List<Synchronization> handoverCompletions();
 
     /**
-     * Whether the exchange is currently used as event notification.
+     * Sets the properties on the exchange
      */
-    boolean isNotifyEvent();
+    void setProperties(Map<String, Object> properties);
 
     /**
-     * Sets whether the exchange is currently used as event notification and if so then this should not generate
-     * additional events.
+     * Sets the history node id (the current processor that will process the exchange)
      */
-    void setNotifyEvent(boolean notifyEvent);
+    void setHistoryNodeId(String historyNodeId);
 
     /**
-     * Whether the exchange was interrupted (InterruptException) during routing.
+     * Gets the history node id (the current processor that will process the exchange)
      */
-    boolean isInterrupted();
+    String getHistoryNodeId();
 
     /**
-     * Used to signal that this exchange was interrupted (InterruptException) during routing.
+     * Gets the history node source:line-number where the node is located in the source code (the current processor that
+     * will process the exchange).
      */
-    void setInterrupted(boolean interrupted);
+    String getHistoryNodeSource();
 
     /**
-     * To control whether the exchange can accept being interrupted currently.
+     * Sets the history node source:line-number where the node is located in the source code (the current processor that
+     * will process the exchange).
      */
-    void setInterruptable(boolean interruptable);
+    void setHistoryNodeSource(String historyNodeSource);
 
     /**
-     * Whether the exchange has exhausted (attempted all) its redeliveries and still failed. This is used internally by
-     * Camel.
+     * Gets the history node label (the current processor that will process the exchange)
      */
-    boolean isRedeliveryExhausted();
+    String getHistoryNodeLabel();
 
     /**
-     * Used to signal that this exchange has exhausted (attempted all) its redeliveries and still failed. This is used
-     * internally by Camel.
+     * Sets the history node label (the current processor that will process the exchange)
      */
-    void setRedeliveryExhausted(boolean redeliveryExhausted);
+    void setHistoryNodeLabel(String historyNodeLabel);
 
     /**
-     * Whether the exchange has been handled by the error handler. This is used internally by Camel.
-     *
-     * Important: Call {@link #isErrorHandlerHandledSet()} first before this method.
-     *
-     * @see #isErrorHandlerHandledSet()
+     * Whether the exchange is currently used as event notification.
      */
-    boolean isErrorHandlerHandled();
+    boolean isNotifyEvent();
 
     /**
-     * Whether the error handler handled flag has been set.
+     * Sets whether the exchange is currently used as event notification and if so then this should not generate
+     * additional events.
      */
-    boolean isErrorHandlerHandledSet();
+    void setNotifyEvent(boolean notifyEvent);
 
     /**
-     * Whether the exchange has been handled by the error handler. This is used internally by Camel.
+     * To copy the internal properties from this exchange to the target exchange
+     * <p/>
+     * This method is only intended for Camel internally.
+     *
+     * @param target the target exchange
      */
-    Boolean getErrorHandlerHandled();
+    void copyInternalProperties(Exchange target);
 
     /**
-     * Used to signal that this exchange has been handled by the error handler. This is used internally by Camel.
+     * To get a property that was copied specially (thread safe with deep cloning).
+     *
+     * @see SafeCopyProperty
      */
-    void setErrorHandlerHandled(Boolean errorHandlerHandled);
+    <T> T getSafeCopyProperty(String key, Class<T> type);
 
     /**
-     * To copy the internal properties from this exchange to the target exchange
-     * <p/>
-     * This method is only intended for Camel internally.
+     * To set a property that must be copied specially (thread safe with deep cloning).
      *
-     * @param target the target exchange
+     * @see SafeCopyProperty
      */
-    void copyInternalProperties(Exchange target);
+    void setSafeCopyProperty(String key, SafeCopyProperty value);
 
     /**
      * Gets the internal properties from this exchange. The known set of internal keys is defined in
@@ -212,31 +222,22 @@ public interface ExtendedExchange extends Exchange {
      */
     Map<String, Object> getInternalProperties();
 
+    /**
+     * Sets whether the exchange is routed in a transaction.
+     */
+    void setTransacted(boolean transacted);
+
     /**
      * Callback used by {@link Consumer} if the consumer is completing the exchange processing with default behaviour.
-     *
+     * <p>
      * This is only used when pooled exchange is enabled for optimization and reducing object allocations.
      */
     AsyncCallback getDefaultConsumerCallback();
 
     /**
      * Callback used by {@link Consumer} if the consumer is completing the exchange processing with default behaviour.
-     *
+     * <p>
      * This is only used when pooled exchange is enabled for optimization and reducing object allocations.
      */
     void setDefaultConsumerCallback(AsyncCallback callback);
-
-    /**
-     * To set a property that must be copied specially (thread safe with deep cloning).
-     *
-     * @see SafeCopyProperty
-     */
-    void setSafeCopyProperty(String key, SafeCopyProperty value);
-
-    /**
-     * To get a property that was copied specially (thread safe with deep cloning).
-     *
-     * @see SafeCopyProperty
-     */
-    <T> T getSafeCopyProperty(String key, Class<T> type);
 }
diff --git a/core/camel-api/src/main/java/org/apache/camel/ExtendedExchange.java b/core/camel-api/src/main/java/org/apache/camel/ExtendedExchange.java
index 929b7c0a943..0c89ca439a8 100644
--- a/core/camel-api/src/main/java/org/apache/camel/ExtendedExchange.java
+++ b/core/camel-api/src/main/java/org/apache/camel/ExtendedExchange.java
@@ -16,227 +16,13 @@
  */
 package org.apache.camel;
 
-import java.util.List;
-import java.util.Map;
-
-import org.apache.camel.spi.Synchronization;
-import org.apache.camel.spi.UnitOfWork;
-
 /**
  * Extended {@link Exchange} which contains the methods and APIs that are not intended for Camel end users but used
  * internally by Camel for optimization purposes, SPI, custom components, or more advanced used-cases with Camel.
+ *
+ * This interface is deprecated. Use {@link ExchangeExtension}
  */
+@Deprecated
 public interface ExtendedExchange extends Exchange {
 
-    /**
-     * If there is an existing inbound message of the given type then return it as-is, otherwise return null.
-     *
-     * @param  type the given type
-     * @return      the message if exists with the given type, otherwise null.
-     */
-    <T> T getInOrNull(Class<T> type);
-
-    /**
-     * Sets the endpoint which originated this message exchange. This method should typically only be called by
-     * {@link Endpoint} implementations
-     */
-    void setFromEndpoint(Endpoint fromEndpoint);
-
-    /**
-     * Sets the route id which originated this message exchange. This method should typically only be called by the
-     * internal framework.
-     */
-    void setFromRouteId(String fromRouteId);
-
-    /**
-     * Sets the unit of work that this exchange belongs to; which may map to zero, one or more physical transactions
-     */
-    void setUnitOfWork(UnitOfWork unitOfWork);
-
-    /**
-     * Sets the properties on the exchange
-     */
-    void setProperties(Map<String, Object> properties);
-
-    /**
-     * Adds a {@link org.apache.camel.spi.Synchronization} to be invoked as callback when this exchange is completed.
-     *
-     * @param onCompletion the callback to invoke on completion of this exchange
-     */
-    void addOnCompletion(Synchronization onCompletion);
-
-    /**
-     * Checks if the passed {@link Synchronization} instance is already contained on this exchange.
-     *
-     * @param  onCompletion the callback instance that is being checked for
-     * @return              <tt>true</tt>, if callback instance is already contained on this exchange, else
-     *                      <tt>false</tt>
-     */
-    boolean containsOnCompletion(Synchronization onCompletion);
-
-    /**
-     * Handover all the on completions from this exchange to the target exchange.
-     */
-    void handoverCompletions(Exchange target);
-
-    /**
-     * Handover all the on completions from this exchange
-     */
-    List<Synchronization> handoverCompletions();
-
-    /**
-     * Sets the history node id (the current processor that will process the exchange)
-     */
-    void setHistoryNodeId(String historyNodeId);
-
-    /**
-     * Gets the history node id (the current processor that will process the exchange)
-     */
-    String getHistoryNodeId();
-
-    /**
-     * Sets the history node label (the current processor that will process the exchange)
-     */
-    void setHistoryNodeLabel(String historyNodeLabel);
-
-    /**
-     * Gets the history node label (the current processor that will process the exchange)
-     */
-    String getHistoryNodeLabel();
-
-    /**
-     * Gets the history node source:line-number where the node is located in the source code (the current processor that
-     * will process the exchange).
-     */
-    String getHistoryNodeSource();
-
-    /**
-     * Sets the history node source:line-number where the node is located in the source code (the current processor that
-     * will process the exchange).
-     */
-    void setHistoryNodeSource(String historyNodeSource);
-
-    /**
-     * Is stream caching disabled on the given exchange
-     */
-    boolean isStreamCacheDisabled();
-
-    /**
-     * Used to force disabling stream caching which some components can do in special use-cases.
-     */
-    void setStreamCacheDisabled(boolean streamCacheDisabled);
-
-    /**
-     * Sets whether the exchange is routed in a transaction.
-     */
-    void setTransacted(boolean transacted);
-
-    /**
-     * Whether the exchange is currently used as event notification.
-     */
-    boolean isNotifyEvent();
-
-    /**
-     * Sets whether the exchange is currently used as event notification and if so then this should not generate
-     * additional events.
-     */
-    void setNotifyEvent(boolean notifyEvent);
-
-    /**
-     * Whether the exchange was interrupted (InterruptException) during routing.
-     */
-    boolean isInterrupted();
-
-    /**
-     * Used to signal that this exchange was interrupted (InterruptException) during routing.
-     */
-    void setInterrupted(boolean interrupted);
-
-    /**
-     * To control whether the exchange can accept being interrupted currently.
-     */
-    void setInterruptable(boolean interruptable);
-
-    /**
-     * Whether the exchange has exhausted (attempted all) its redeliveries and still failed. This is used internally by
-     * Camel.
-     */
-    boolean isRedeliveryExhausted();
-
-    /**
-     * Used to signal that this exchange has exhausted (attempted all) its redeliveries and still failed. This is used
-     * internally by Camel.
-     */
-    void setRedeliveryExhausted(boolean redeliveryExhausted);
-
-    /**
-     * Whether the exchange has been handled by the error handler. This is used internally by Camel.
-     *
-     * Important: Call {@link #isErrorHandlerHandledSet()} first before this method.
-     *
-     * @see #isErrorHandlerHandledSet()
-     */
-    boolean isErrorHandlerHandled();
-
-    /**
-     * Whether the error handler handled flag has been set.
-     */
-    boolean isErrorHandlerHandledSet();
-
-    /**
-     * Whether the exchange has been handled by the error handler. This is used internally by Camel.
-     */
-    Boolean getErrorHandlerHandled();
-
-    /**
-     * Used to signal that this exchange has been handled by the error handler. This is used internally by Camel.
-     */
-    void setErrorHandlerHandled(Boolean errorHandlerHandled);
-
-    /**
-     * To copy the internal properties from this exchange to the target exchange
-     * <p/>
-     * This method is only intended for Camel internally.
-     *
-     * @param target the target exchange
-     */
-    void copyInternalProperties(Exchange target);
-
-    /**
-     * Gets the internal properties from this exchange. The known set of internal keys is defined in
-     * {@link ExchangePropertyKey}.
-     * <p/>
-     * This method is only intended for Camel internally.
-     *
-     * @return all the internal properties in a Map
-     */
-    Map<String, Object> getInternalProperties();
-
-    /**
-     * Callback used by {@link Consumer} if the consumer is completing the exchange processing with default behaviour.
-     *
-     * This is only used when pooled exchange is enabled for optimization and reducing object allocations.
-     */
-    AsyncCallback getDefaultConsumerCallback();
-
-    /**
-     * Callback used by {@link Consumer} if the consumer is completing the exchange processing with default behaviour.
-     *
-     * This is only used when pooled exchange is enabled for optimization and reducing object allocations.
-     */
-    void setDefaultConsumerCallback(AsyncCallback callback);
-
-    /**
-     * To set a property that must be copied specially (thread safe with deep cloning).
-     *
-     * @see SafeCopyProperty
-     */
-    void setSafeCopyProperty(String key, SafeCopyProperty value);
-
-    /**
-     * To get a property that was copied specially (thread safe with deep cloning).
-     *
-     * @see SafeCopyProperty
-     */
-    <T> T getSafeCopyProperty(String key, Class<T> type);
 }
diff --git a/core/camel-api/src/main/java/org/apache/camel/SafeCopyProperty.java b/core/camel-api/src/main/java/org/apache/camel/SafeCopyProperty.java
index 4c35f6abd8b..48abbdc2afb 100644
--- a/core/camel-api/src/main/java/org/apache/camel/SafeCopyProperty.java
+++ b/core/camel-api/src/main/java/org/apache/camel/SafeCopyProperty.java
@@ -19,10 +19,10 @@ package org.apache.camel;
 /**
  * An interface that allows safe copy (deep clone) of property value object when creating copy of Exchange objects.
  * Classes implementing this interface can be set as key value pair on exchange object via
- * {@link ExtendedExchange#setSafeCopyProperty(String, SafeCopyProperty)}.
+ * {@link ExchangeExtension#setSafeCopyProperty(String, SafeCopyProperty)}.
  *
  * When exchange object is copied it will invoke {@link SafeCopyProperty#safeCopy()} method on properties set using
- * {@link ExtendedExchange#setSafeCopyProperty(String, SafeCopyProperty)}. This allows the property value object to
+ * {@link ExchangeExtension#setSafeCopyProperty(String, SafeCopyProperty)}. This allows the property value object to
  * return a copy object to be set on the target exchange object instead of the original value object. This protects the
  * properties from unintended mutation when using parallelProcessing in Multicast or RecipientList EIP
  */
diff --git a/core/camel-support/src/main/java/org/apache/camel/support/AbstractExchange.java b/core/camel-support/src/main/java/org/apache/camel/support/AbstractExchange.java
index 6e480f18227..7b1a48aa85f 100644
--- a/core/camel-support/src/main/java/org/apache/camel/support/AbstractExchange.java
+++ b/core/camel-support/src/main/java/org/apache/camel/support/AbstractExchange.java
@@ -30,6 +30,7 @@ import org.apache.camel.CamelContext;
 import org.apache.camel.CamelExecutionException;
 import org.apache.camel.Endpoint;
 import org.apache.camel.Exchange;
+import org.apache.camel.ExchangeExtension;
 import org.apache.camel.ExchangePattern;
 import org.apache.camel.ExchangePropertyKey;
 import org.apache.camel.ExtendedCamelContext;
@@ -54,7 +55,6 @@ import static org.apache.camel.support.MessageHelper.copyBody;
  * @see DefaultExchange
  */
 class AbstractExchange implements ExtendedExchange {
-
     // number of elements in array
     static final int INTERNAL_LENGTH = ExchangePropertyKey.values().length;
     // empty array for reset
@@ -90,17 +90,19 @@ class AbstractExchange implements ExtendedExchange {
     Boolean errorHandlerHandled;
     AsyncCallback defaultConsumerCallback; // optimize (do not reset)
     Map<String, SafeCopyProperty> safeCopyProperties;
+    private final ExtendedExchangeExtension privateExtension;
+
 
     public AbstractExchange(CamelContext context) {
-        this.context = context;
-        this.pattern = ExchangePattern.InOnly;
-        this.created = System.currentTimeMillis();
+        this(context, ExchangePattern.InOnly);
     }
 
     public AbstractExchange(CamelContext context, ExchangePattern pattern) {
         this.context = context;
         this.pattern = pattern;
         this.created = System.currentTimeMillis();
+
+        privateExtension = new ExtendedExchangeExtension(this);
     }
 
     public AbstractExchange(Exchange parent) {
@@ -110,6 +112,8 @@ class AbstractExchange implements ExtendedExchange {
         this.fromEndpoint = parent.getFromEndpoint();
         this.fromRouteId = parent.getFromRouteId();
         this.unitOfWork = parent.getUnitOfWork();
+
+        privateExtension = new ExtendedExchangeExtension(this);
     }
 
     public AbstractExchange(Endpoint fromEndpoint) {
@@ -117,6 +121,8 @@ class AbstractExchange implements ExtendedExchange {
         this.pattern = fromEndpoint.getExchangePattern();
         this.created = System.currentTimeMillis();
         this.fromEndpoint = fromEndpoint;
+
+        privateExtension = new ExtendedExchangeExtension(this);
     }
 
     public AbstractExchange(Endpoint fromEndpoint, ExchangePattern pattern) {
@@ -124,6 +130,8 @@ class AbstractExchange implements ExtendedExchange {
         this.pattern = pattern;
         this.created = System.currentTimeMillis();
         this.fromEndpoint = fromEndpoint;
+
+        privateExtension = new ExtendedExchangeExtension(this);
     }
 
     @Override
@@ -970,4 +978,10 @@ class AbstractExchange implements ExtendedExchange {
         return ExchangeHelper.convertToType(this, type, value);
     }
 
+
+    public ExtendedExchangeExtension getExchangeExtension() {
+        return privateExtension;
+    }
+
+
 }
diff --git a/core/camel-support/src/main/java/org/apache/camel/support/ExtendedExchangeExtension.java b/core/camel-support/src/main/java/org/apache/camel/support/ExtendedExchangeExtension.java
new file mode 100644
index 00000000000..318bac4902e
--- /dev/null
+++ b/core/camel-support/src/main/java/org/apache/camel/support/ExtendedExchangeExtension.java
@@ -0,0 +1,216 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.camel.support;
+
+import java.util.List;
+import java.util.Map;
+
+import org.apache.camel.AsyncCallback;
+import org.apache.camel.Endpoint;
+import org.apache.camel.Exchange;
+import org.apache.camel.ExchangeExtension;
+import org.apache.camel.SafeCopyProperty;
+import org.apache.camel.spi.Synchronization;
+import org.apache.camel.spi.UnitOfWork;
+
+public class ExtendedExchangeExtension implements ExchangeExtension {
+    private final AbstractExchange exchange;
+
+    ExtendedExchangeExtension(AbstractExchange exchange) {
+        this.exchange = exchange;
+    }
+
+    @Override
+    public void setFromEndpoint(Endpoint fromEndpoint) {
+        this.exchange.fromEndpoint = fromEndpoint;
+    }
+
+    @Override
+    public void setFromRouteId(String fromRouteId) {
+        exchange.fromRouteId = fromRouteId;
+    }
+
+    /**
+     * Is stream caching disabled on the given exchange
+     */
+    public boolean isStreamCacheDisabled() {
+        return this.exchange.streamCacheDisabled;
+    }
+
+    /**
+     * Used to force disabling stream caching which some components can do in special use-cases.
+     */
+    public void setStreamCacheDisabled(boolean streamCacheDisabled) {
+        this.exchange.streamCacheDisabled = streamCacheDisabled;
+    }
+
+    @Override
+    public void addOnCompletion(Synchronization onCompletion) {
+        this.exchange.addOnCompletion(onCompletion);
+    }
+
+    @Override
+    public boolean isErrorHandlerHandledSet() {
+        return this.exchange.isErrorHandlerHandledSet();
+    }
+
+    @Override
+    public Boolean getErrorHandlerHandled() {
+        return this.exchange.errorHandlerHandled;
+    }
+
+    @Override
+    public void setErrorHandlerHandled(Boolean errorHandlerHandled) {
+        this.exchange.errorHandlerHandled = errorHandlerHandled;
+    }
+
+    @Override
+    public boolean isErrorHandlerHandled() {
+        return this.exchange.errorHandlerHandled;
+    }
+
+    @Override
+    public boolean isRedeliveryExhausted() {
+        return this.exchange.redeliveryExhausted;
+    }
+
+    @Override
+    public void setRedeliveryExhausted(boolean redeliveryExhausted) {
+        this.exchange.redeliveryExhausted = redeliveryExhausted;
+    }
+
+    @Override
+    public void handoverCompletions(Exchange target) {
+        this.exchange.handoverCompletions(target);
+    }
+
+    @Override
+    public List<Synchronization> handoverCompletions() {
+        return this.exchange.handoverCompletions();
+    }
+
+    @Override
+    public void setUnitOfWork(UnitOfWork unitOfWork) {
+        this.exchange.setUnitOfWork(unitOfWork);
+    }
+
+    @Override
+    public void copyInternalProperties(Exchange target) {
+        this.exchange.copyInternalProperties(target);
+    }
+
+    @Override
+    public void setProperties(Map<String, Object> properties) {
+        this.exchange.setProperties(properties);
+    }
+
+    @Override
+    public void setHistoryNodeId(String historyNodeId) {
+        this.exchange.historyNodeId = historyNodeId;
+    }
+
+    @Override
+    public String getHistoryNodeId() {
+        return this.exchange.historyNodeId;
+    }
+
+    @Override
+    public String getHistoryNodeSource() {
+        return this.exchange.historyNodeSource;
+    }
+
+    @Override
+    public void setHistoryNodeSource(String historyNodeSource) {
+        this.exchange.historyNodeSource = historyNodeSource;
+    }
+
+    @Override
+    public String getHistoryNodeLabel() {
+        return this.exchange.historyNodeSource;
+    }
+
+    @Override
+    public void setHistoryNodeLabel(String historyNodeLabel) {
+        this.exchange.historyNodeLabel = historyNodeLabel;
+    }
+
+    @Override
+    public boolean isNotifyEvent() {
+        return this.exchange.notifyEvent;
+    }
+
+    @Override
+    public void setNotifyEvent(boolean notifyEvent) {
+        this.exchange.notifyEvent = notifyEvent;
+    }
+
+    @Override
+    public Map<String, Object> getInternalProperties() {
+        return this.exchange.getInternalProperties();
+    }
+
+    @Override
+    public boolean containsOnCompletion(Synchronization onCompletion) {
+        return this.exchange.containsOnCompletion(onCompletion);
+    }
+
+    @Override
+    public void setTransacted(boolean transacted) {
+        this.exchange.transacted = transacted;
+    }
+
+    @Override
+    public void setInterruptable(boolean interruptable) {
+        this.exchange.interruptable = interruptable;
+    }
+
+    @Override
+    public boolean isInterrupted() {
+        return this.exchange.interrupted;
+    }
+
+    @Override
+    public void setInterrupted(boolean interrupted) {
+        this.exchange.setInterrupted(interrupted);
+    }
+
+    @Override
+    public <T> T getInOrNull(Class<T> type) {
+        return this.exchange.getInOrNull(type);
+    }
+
+    @Override
+    public AsyncCallback getDefaultConsumerCallback() {
+        return this.exchange.defaultConsumerCallback;
+    }
+
+    @Override
+    public void setDefaultConsumerCallback(AsyncCallback callback) {
+        this.exchange.defaultConsumerCallback = callback;
+    }
+
+    @Override
+    public void setSafeCopyProperty(String key, SafeCopyProperty value) {
+        this.exchange.setSafeCopyProperty(key, value);
+    }
+
+    @Override
+    public <T> T getSafeCopyProperty(String key, Class<T> type) {
+        return this.exchange.getSafeCopyProperty(key, type);
+    }
+}


[camel] 08/23: CAMEL-15105: rework managing error handling properties in the exchange

Posted by or...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

orpiske pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/camel.git

commit cd3f7313842b81a1656333cac69bdff243fd1b2f
Author: Otavio Rodolfo Piske <an...@gmail.com>
AuthorDate: Tue Nov 22 18:19:06 2022 +0100

    CAMEL-15105: rework managing error handling properties in the exchange
---
 ...ansactionalClientDataSourceOnExceptionRedeliveryTest.java |  3 +--
 .../TransactionalClientDataSourceRedeliveryTest.java         |  3 +--
 .../apache/camel/impl/event/ExchangeFailureHandledEvent.java |  4 ++--
 .../apache/camel/processor/FatalFallbackErrorHandler.java    |  4 ++--
 .../aggregate/ShareUnitOfWorkAggregationStrategy.java        | 12 +++++-------
 .../aggregator/BodyOnlyAggregationStrategyTest.java          |  5 ++---
 .../itest/jetty/JettySimulateFailoverRoundRobinTest.java     |  2 +-
 7 files changed, 14 insertions(+), 19 deletions(-)

diff --git a/components/camel-spring-xml/src/test/java/org/apache/camel/spring/interceptor/TransactionalClientDataSourceOnExceptionRedeliveryTest.java b/components/camel-spring-xml/src/test/java/org/apache/camel/spring/interceptor/TransactionalClientDataSourceOnExceptionRedeliveryTest.java
index 5b1f5a733eb..9a77580dc28 100644
--- a/components/camel-spring-xml/src/test/java/org/apache/camel/spring/interceptor/TransactionalClientDataSourceOnExceptionRedeliveryTest.java
+++ b/components/camel-spring-xml/src/test/java/org/apache/camel/spring/interceptor/TransactionalClientDataSourceOnExceptionRedeliveryTest.java
@@ -17,7 +17,6 @@
 package org.apache.camel.spring.interceptor;
 
 import org.apache.camel.Exchange;
-import org.apache.camel.ExtendedExchange;
 import org.apache.camel.Processor;
 import org.apache.camel.RuntimeCamelException;
 import org.apache.camel.builder.RouteBuilder;
@@ -51,7 +50,7 @@ public class TransactionalClientDataSourceOnExceptionRedeliveryTest extends Tran
         assertEquals(true, out.getIn().getHeader(Exchange.REDELIVERED));
         assertEquals(3, out.getIn().getHeader(Exchange.REDELIVERY_COUNTER));
         assertEquals(true, out.getProperty(Exchange.FAILURE_HANDLED));
-        assertEquals(false, out.adapt(ExtendedExchange.class).isErrorHandlerHandled());
+        assertEquals(false, out.getExchangeExtension().isErrorHandlerHandled());
     }
 
     @Override
diff --git a/components/camel-spring-xml/src/test/java/org/apache/camel/spring/interceptor/TransactionalClientDataSourceRedeliveryTest.java b/components/camel-spring-xml/src/test/java/org/apache/camel/spring/interceptor/TransactionalClientDataSourceRedeliveryTest.java
index 9d99e469684..361183d7dea 100644
--- a/components/camel-spring-xml/src/test/java/org/apache/camel/spring/interceptor/TransactionalClientDataSourceRedeliveryTest.java
+++ b/components/camel-spring-xml/src/test/java/org/apache/camel/spring/interceptor/TransactionalClientDataSourceRedeliveryTest.java
@@ -17,7 +17,6 @@
 package org.apache.camel.spring.interceptor;
 
 import org.apache.camel.Exchange;
-import org.apache.camel.ExtendedExchange;
 import org.apache.camel.Processor;
 import org.apache.camel.RuntimeCamelException;
 import org.apache.camel.builder.RouteBuilder;
@@ -51,7 +50,7 @@ public class TransactionalClientDataSourceRedeliveryTest extends TransactionalCl
         assertEquals(true, out.getIn().getHeader(Exchange.REDELIVERED));
         assertEquals(4, out.getIn().getHeader(Exchange.REDELIVERY_COUNTER));
         assertEquals(true, out.getProperty(Exchange.FAILURE_HANDLED));
-        assertEquals(false, out.adapt(ExtendedExchange.class).isErrorHandlerHandled());
+        assertEquals(false, out.getExchangeExtension().isErrorHandlerHandled());
     }
 
     @Override
diff --git a/core/camel-base/src/main/java/org/apache/camel/impl/event/ExchangeFailureHandledEvent.java b/core/camel-base/src/main/java/org/apache/camel/impl/event/ExchangeFailureHandledEvent.java
index b7442de7579..229588e57a6 100644
--- a/core/camel-base/src/main/java/org/apache/camel/impl/event/ExchangeFailureHandledEvent.java
+++ b/core/camel-base/src/main/java/org/apache/camel/impl/event/ExchangeFailureHandledEvent.java
@@ -36,8 +36,8 @@ public class ExchangeFailureHandledEvent extends AbstractExchangeEvent implement
         this.failureHandler = failureHandler;
         this.deadLetterChannel = deadLetterChannel;
         this.deadLetterUri = deadLetterUri;
-        this.handled = source.adapt(ExtendedExchange.class).isErrorHandlerHandledSet()
-                && source.adapt(ExtendedExchange.class).isErrorHandlerHandled();
+        this.handled = source.getExchangeExtension().isErrorHandlerHandledSet()
+                && source.getExchangeExtension().isErrorHandlerHandled();
     }
 
     @Override
diff --git a/core/camel-core-processor/src/main/java/org/apache/camel/processor/FatalFallbackErrorHandler.java b/core/camel-core-processor/src/main/java/org/apache/camel/processor/FatalFallbackErrorHandler.java
index 54e3b742eeb..168797155da 100644
--- a/core/camel-core-processor/src/main/java/org/apache/camel/processor/FatalFallbackErrorHandler.java
+++ b/core/camel-core-processor/src/main/java/org/apache/camel/processor/FatalFallbackErrorHandler.java
@@ -135,12 +135,12 @@ public class FatalFallbackErrorHandler extends DelegateAsyncProcessor implements
                         if (deadLetterChannel) {
                             // special for dead letter channel as we want to let it determine what to do, depending how
                             // it has been configured
-                            exchange.adapt(ExtendedExchange.class).setErrorHandlerHandled(null);
+                            exchange.getExchangeExtension().setErrorHandlerHandled(null);
                         } else {
                             // mark this exchange as already been error handler handled (just by having this property)
                             // the false value mean the caught exception will be kept on the exchange, causing the
                             // exception to be propagated back to the caller, and to break out routing
-                            exchange.adapt(ExtendedExchange.class).setErrorHandlerHandled(false);
+                            exchange.getExchangeExtension().setErrorHandlerHandled(false);
                         }
                     }
                 } finally {
diff --git a/core/camel-core-processor/src/main/java/org/apache/camel/processor/aggregate/ShareUnitOfWorkAggregationStrategy.java b/core/camel-core-processor/src/main/java/org/apache/camel/processor/aggregate/ShareUnitOfWorkAggregationStrategy.java
index 06e97ad4983..6127301e754 100644
--- a/core/camel-core-processor/src/main/java/org/apache/camel/processor/aggregate/ShareUnitOfWorkAggregationStrategy.java
+++ b/core/camel-core-processor/src/main/java/org/apache/camel/processor/aggregate/ShareUnitOfWorkAggregationStrategy.java
@@ -21,7 +21,6 @@ import org.apache.camel.CamelContext;
 import org.apache.camel.CamelContextAware;
 import org.apache.camel.Exchange;
 import org.apache.camel.ExchangePropertyKey;
-import org.apache.camel.ExtendedExchange;
 import org.apache.camel.support.service.ServiceHelper;
 import org.apache.camel.support.service.ServiceSupport;
 
@@ -108,10 +107,9 @@ public final class ShareUnitOfWorkAggregationStrategy extends ServiceSupport imp
     }
 
     protected void propagateFailure(Exchange answer, Exchange newExchange) {
-        ExtendedExchange nee = (ExtendedExchange) newExchange;
         // if new exchange failed then propagate all the error related properties to the answer
-        if (nee.isFailed() || nee.isRollbackOnly() || nee.isRollbackOnlyLast()
-                || nee.isErrorHandlerHandledSet() && nee.isErrorHandlerHandled()) {
+        if (newExchange.isFailed() || newExchange.isRollbackOnly() || newExchange.isRollbackOnlyLast()
+                || newExchange.getExchangeExtension().isErrorHandlerHandledSet() && newExchange.getExchangeExtension().isErrorHandlerHandled()) {
             if (newExchange.getException() != null) {
                 answer.setException(newExchange.getException());
             }
@@ -127,9 +125,9 @@ public final class ShareUnitOfWorkAggregationStrategy extends ServiceSupport imp
                 answer.setProperty(ExchangePropertyKey.FAILURE_ROUTE_ID,
                         newExchange.getProperty(ExchangePropertyKey.FAILURE_ROUTE_ID));
             }
-            if (newExchange.adapt(ExtendedExchange.class).getErrorHandlerHandled() != null) {
-                answer.adapt(ExtendedExchange.class)
-                        .setErrorHandlerHandled(newExchange.adapt(ExtendedExchange.class).getErrorHandlerHandled());
+            if (newExchange.getExchangeExtension().getErrorHandlerHandled() != null) {
+                answer.getExchangeExtension()
+                        .setErrorHandlerHandled(newExchange.getExchangeExtension().getErrorHandlerHandled());
             }
             if (newExchange.getProperty(ExchangePropertyKey.FAILURE_HANDLED) != null) {
                 answer.setProperty(ExchangePropertyKey.FAILURE_HANDLED,
diff --git a/core/camel-core/src/test/java/org/apache/camel/processor/aggregator/BodyOnlyAggregationStrategyTest.java b/core/camel-core/src/test/java/org/apache/camel/processor/aggregator/BodyOnlyAggregationStrategyTest.java
index 854d781a8e7..a0eb6d43723 100644
--- a/core/camel-core/src/test/java/org/apache/camel/processor/aggregator/BodyOnlyAggregationStrategyTest.java
+++ b/core/camel-core/src/test/java/org/apache/camel/processor/aggregator/BodyOnlyAggregationStrategyTest.java
@@ -20,7 +20,6 @@ import org.apache.camel.AggregationStrategy;
 import org.apache.camel.ContextTestSupport;
 import org.apache.camel.ErrorHandlerFactory;
 import org.apache.camel.Exchange;
-import org.apache.camel.ExtendedExchange;
 import org.apache.camel.builder.RouteBuilder;
 import org.junit.jupiter.api.Test;
 
@@ -75,8 +74,8 @@ public class BodyOnlyAggregationStrategyTest extends ContextTestSupport {
         public Exchange aggregate(Exchange oldExchange, Exchange newExchange) {
             oldExchange.getIn().setBody(newExchange.getIn().getBody());
 
-            oldExchange.adapt(ExtendedExchange.class).setErrorHandlerHandled(
-                    newExchange.adapt(ExtendedExchange.class).getErrorHandlerHandled());
+            oldExchange.getExchangeExtension().setErrorHandlerHandled(
+                    newExchange.getExchangeExtension().getErrorHandlerHandled());
 
             return oldExchange;
         }
diff --git a/tests/camel-itest/src/test/java/org/apache/camel/itest/jetty/JettySimulateFailoverRoundRobinTest.java b/tests/camel-itest/src/test/java/org/apache/camel/itest/jetty/JettySimulateFailoverRoundRobinTest.java
index c9feb889d0b..cf45a712593 100644
--- a/tests/camel-itest/src/test/java/org/apache/camel/itest/jetty/JettySimulateFailoverRoundRobinTest.java
+++ b/tests/camel-itest/src/test/java/org/apache/camel/itest/jetty/JettySimulateFailoverRoundRobinTest.java
@@ -160,7 +160,7 @@ public class JettySimulateFailoverRoundRobinTest extends CamelTestSupport {
         private void prepareExchangeForFailover(Exchange exchange) {
             exchange.setException(null);
 
-            exchange.adapt(ExtendedExchange.class).setErrorHandlerHandled(null);
+            exchange.getExchangeExtension().setErrorHandlerHandled(null);
             exchange.setProperty(Exchange.FAILURE_HANDLED, null);
             exchange.setProperty(Exchange.EXCEPTION_CAUGHT, null);
             exchange.getIn().removeHeader(Exchange.REDELIVERED);


[camel] 04/23: CAMEL-15105: rework handling addOnCompletions on Exchanges in camel-core module

Posted by or...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

orpiske pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/camel.git

commit 04ac187cf48b8998f91028d83631966425735308
Author: Otavio Rodolfo Piske <an...@gmail.com>
AuthorDate: Wed Nov 23 13:48:29 2022 +0100

    CAMEL-15105: rework handling addOnCompletions on Exchanges in camel-core module
---
 .../apache/camel/impl/engine/CamelInternalProcessor.java  |  4 ++--
 .../org/apache/camel/impl/engine/DefaultUnitOfWork.java   |  2 +-
 .../camel/processor/aggregate/AggregateProcessor.java     |  2 +-
 .../camel/processor/idempotent/IdempotentConsumer.java    |  3 +--
 .../apache/camel/processor/resume/ResumableProcessor.java |  3 +--
 .../camel/impl/engine/CamelPostProcessorHelperTest.java   |  5 ++---
 .../java/org/apache/camel/issues/GertJBIIssueTest.java    |  7 ++++---
 .../apache/camel/processor/EnrichWithUnitOfWorkTest.java  |  5 ++---
 .../camel/processor/MDCOnCompletionOnCompletionTest.java  |  3 +--
 .../apache/camel/processor/OnCompletionContainsTest.java  | 15 +++++++--------
 .../camel/processor/OnCompletionShouldBeLastTest.java     |  7 +++----
 .../camel/processor/RouteAwareSynchronizationTest.java    |  3 +--
 .../camel/processor/async/AsyncEndpointDelayUoWTest.java  |  7 ++++---
 .../camel/processor/async/AsyncEndpointUoWFailedTest.java |  8 +++++---
 .../camel/processor/async/AsyncEndpointUoWTest.java       |  7 ++++---
 .../camel/converter/stream/FileInputStreamCache.java      |  3 +--
 16 files changed, 40 insertions(+), 44 deletions(-)

diff --git a/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/CamelInternalProcessor.java b/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/CamelInternalProcessor.java
index 74f5d9fbf25..29f97a3840c 100644
--- a/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/CamelInternalProcessor.java
+++ b/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/CamelInternalProcessor.java
@@ -602,7 +602,7 @@ public class CamelInternalProcessor extends DelegateAsyncProcessor implements In
                             messageAsXml,
                             messageAsJSon);
                     backlogTracer.traceEvent(pseudoFirst);
-                    exchange.adapt(ExtendedExchange.class).addOnCompletion(new SynchronizationAdapter() {
+                    exchange.getExchangeExtension().addOnCompletion(new SynchronizationAdapter() {
                         @Override
                         public void onDone(Exchange exchange) {
                             // create pseudo last
@@ -1076,7 +1076,7 @@ public class CamelInternalProcessor extends DelegateAsyncProcessor implements In
                     boolean contains = exchange.getUnitOfWork().containsSynchronization(tracingAfterRoute);
                     if (!contains) {
                         tracer.traceBeforeRoute(routeDefinition, exchange);
-                        exchange.adapt(ExtendedExchange.class).addOnCompletion(tracingAfterRoute);
+                        exchange.getExchangeExtension().addOnCompletion(tracingAfterRoute);
                     }
                 }
                 tracer.traceBeforeNode(processorDefinition, exchange);
diff --git a/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/DefaultUnitOfWork.java b/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/DefaultUnitOfWork.java
index ea1640933a6..5ddfd782329 100644
--- a/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/DefaultUnitOfWork.java
+++ b/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/DefaultUnitOfWork.java
@@ -212,7 +212,7 @@ public class DefaultUnitOfWork implements UnitOfWork {
 
             if (handover && (filter == null || filter.test(synchronization))) {
                 log.trace("Handover synchronization {} to: {}", synchronization, target);
-                target.adapt(ExtendedExchange.class).addOnCompletion(synchronization);
+                target.getExchangeExtension().addOnCompletion(synchronization);
                 // Allow the synchronization to do housekeeping before transfer
                 if (veto != null) {
                     veto.beforeHandover(target);
diff --git a/core/camel-core-processor/src/main/java/org/apache/camel/processor/aggregate/AggregateProcessor.java b/core/camel-core-processor/src/main/java/org/apache/camel/processor/aggregate/AggregateProcessor.java
index 306fbdb8263..b7a4e9a7a6d 100644
--- a/core/camel-core-processor/src/main/java/org/apache/camel/processor/aggregate/AggregateProcessor.java
+++ b/core/camel-core-processor/src/main/java/org/apache/camel/processor/aggregate/AggregateProcessor.java
@@ -876,7 +876,7 @@ public class AggregateProcessor extends AsyncProcessorSupport
         LOG.debug("Processing aggregated exchange: {}", exchange);
 
         // add on completion task so we remember to update the inProgressCompleteExchanges
-        exchange.adapt(ExtendedExchange.class).addOnCompletion(new AggregateOnCompletion(exchange.getExchangeId()));
+        exchange.getExchangeExtension().addOnCompletion(new AggregateOnCompletion(exchange.getExchangeId()));
 
         // send this exchange
         executorService.execute(() -> {
diff --git a/core/camel-core-processor/src/main/java/org/apache/camel/processor/idempotent/IdempotentConsumer.java b/core/camel-core-processor/src/main/java/org/apache/camel/processor/idempotent/IdempotentConsumer.java
index a425c4f341d..423c9157ccc 100644
--- a/core/camel-core-processor/src/main/java/org/apache/camel/processor/idempotent/IdempotentConsumer.java
+++ b/core/camel-core-processor/src/main/java/org/apache/camel/processor/idempotent/IdempotentConsumer.java
@@ -27,7 +27,6 @@ import org.apache.camel.CamelContextAware;
 import org.apache.camel.Exchange;
 import org.apache.camel.ExchangePropertyKey;
 import org.apache.camel.Expression;
-import org.apache.camel.ExtendedExchange;
 import org.apache.camel.Navigate;
 import org.apache.camel.Processor;
 import org.apache.camel.spi.IdAware;
@@ -163,7 +162,7 @@ public class IdempotentConsumer extends AsyncProcessorSupport
                 // we can use existing callback as target
                 target = callback;
                 // the scope is to do the idempotent completion work as an unit of work on the exchange when its done being routed
-                exchange.adapt(ExtendedExchange.class).addOnCompletion(onCompletion);
+                exchange.getExchangeExtension().addOnCompletion(onCompletion);
             }
         } catch (Exception e) {
             exchange.setException(e);
diff --git a/core/camel-core-processor/src/main/java/org/apache/camel/processor/resume/ResumableProcessor.java b/core/camel-core-processor/src/main/java/org/apache/camel/processor/resume/ResumableProcessor.java
index a41ee86d96d..553a1bb9150 100644
--- a/core/camel-core-processor/src/main/java/org/apache/camel/processor/resume/ResumableProcessor.java
+++ b/core/camel-core-processor/src/main/java/org/apache/camel/processor/resume/ResumableProcessor.java
@@ -25,7 +25,6 @@ import org.apache.camel.AsyncProcessor;
 import org.apache.camel.CamelContext;
 import org.apache.camel.CamelContextAware;
 import org.apache.camel.Exchange;
-import org.apache.camel.ExtendedExchange;
 import org.apache.camel.LoggingLevel;
 import org.apache.camel.Navigate;
 import org.apache.camel.Processor;
@@ -81,7 +80,7 @@ public class ResumableProcessor extends AsyncProcessorSupport
     public boolean process(final Exchange exchange, final AsyncCallback callback) {
         final Synchronization onCompletion = new ResumableCompletion(resumeStrategy, loggingLevel, intermittent);
 
-        exchange.adapt(ExtendedExchange.class).addOnCompletion(onCompletion);
+        exchange.getExchangeExtension().addOnCompletion(onCompletion);
 
         return processor.process(exchange, callback);
     }
diff --git a/core/camel-core/src/test/java/org/apache/camel/impl/engine/CamelPostProcessorHelperTest.java b/core/camel-core/src/test/java/org/apache/camel/impl/engine/CamelPostProcessorHelperTest.java
index 1a69e6a4f43..0781641f881 100644
--- a/core/camel-core/src/test/java/org/apache/camel/impl/engine/CamelPostProcessorHelperTest.java
+++ b/core/camel-core/src/test/java/org/apache/camel/impl/engine/CamelPostProcessorHelperTest.java
@@ -28,7 +28,6 @@ import org.apache.camel.Consume;
 import org.apache.camel.ContextTestSupport;
 import org.apache.camel.EndpointInject;
 import org.apache.camel.Exchange;
-import org.apache.camel.ExtendedExchange;
 import org.apache.camel.FluentProducerTemplate;
 import org.apache.camel.NoSuchBeanException;
 import org.apache.camel.NoSuchEndpointException;
@@ -566,7 +565,7 @@ public class CamelPostProcessorHelperTest extends ContextTestSupport {
 
         @Consume("seda:foo")
         public void consumeSomething(String body, Exchange exchange) {
-            exchange.adapt(ExtendedExchange.class).addOnCompletion(mySynchronization);
+            exchange.getExchangeExtension().addOnCompletion(mySynchronization);
             assertEquals("Hello World", body);
             template.sendBody("mock:result", body);
         }
@@ -581,7 +580,7 @@ public class CamelPostProcessorHelperTest extends ContextTestSupport {
             assertEquals("Hello World", body);
 
             Exchange exchange = producer.getEndpoint().createExchange();
-            exchange.adapt(ExtendedExchange.class).addOnCompletion(mySynchronization);
+            exchange.getExchangeExtension().addOnCompletion(mySynchronization);
             exchange.getIn().setBody(body);
             producer.process(exchange);
         }
diff --git a/core/camel-core/src/test/java/org/apache/camel/issues/GertJBIIssueTest.java b/core/camel-core/src/test/java/org/apache/camel/issues/GertJBIIssueTest.java
index c5a53c845a1..1c3f4905e02 100644
--- a/core/camel-core/src/test/java/org/apache/camel/issues/GertJBIIssueTest.java
+++ b/core/camel-core/src/test/java/org/apache/camel/issues/GertJBIIssueTest.java
@@ -21,13 +21,14 @@ import java.util.concurrent.TimeUnit;
 
 import org.apache.camel.ContextTestSupport;
 import org.apache.camel.Exchange;
-import org.apache.camel.ExtendedExchange;
 import org.apache.camel.Processor;
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.support.SynchronizationAdapter;
 import org.junit.jupiter.api.Test;
 
-import static org.junit.jupiter.api.Assertions.*;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertNotNull;
+import static org.junit.jupiter.api.Assertions.assertTrue;
 
 public class GertJBIIssueTest extends ContextTestSupport {
 
@@ -77,7 +78,7 @@ public class GertJBIIssueTest extends ContextTestSupport {
 
         template.send("direct:start", new Processor() {
             public void process(Exchange exchange) throws Exception {
-                exchange.adapt(ExtendedExchange.class).addOnCompletion(new SynchronizationAdapter() {
+                exchange.getExchangeExtension().addOnCompletion(new SynchronizationAdapter() {
                     @Override
                     public void onDone(Exchange exchange) {
                         cause = exchange.getException();
diff --git a/core/camel-core/src/test/java/org/apache/camel/processor/EnrichWithUnitOfWorkTest.java b/core/camel-core/src/test/java/org/apache/camel/processor/EnrichWithUnitOfWorkTest.java
index d6ce342c330..620c4a4d39f 100644
--- a/core/camel-core/src/test/java/org/apache/camel/processor/EnrichWithUnitOfWorkTest.java
+++ b/core/camel-core/src/test/java/org/apache/camel/processor/EnrichWithUnitOfWorkTest.java
@@ -18,7 +18,6 @@ package org.apache.camel.processor;
 
 import org.apache.camel.ContextTestSupport;
 import org.apache.camel.Exchange;
-import org.apache.camel.ExtendedExchange;
 import org.apache.camel.Processor;
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.support.SynchronizationAdapter;
@@ -50,7 +49,7 @@ public class EnrichWithUnitOfWorkTest extends ContextTestSupport {
             @Override
             public void process(Exchange exchange) throws Exception {
                 exchange.getMessage().setBody("Hello World");
-                exchange.adapt(ExtendedExchange.class).addOnCompletion(new SynchronizationAdapter() {
+                exchange.getExchangeExtension().addOnCompletion(new SynchronizationAdapter() {
                     @Override
                     public void onDone(Exchange exchange) {
                         exchange.getMessage().setBody("Done " + exchange.getMessage().getBody());
@@ -80,7 +79,7 @@ public class EnrichWithUnitOfWorkTest extends ContextTestSupport {
             @Override
             public void process(Exchange exchange) throws Exception {
                 exchange.getMessage().setBody("Hello World");
-                exchange.adapt(ExtendedExchange.class).addOnCompletion(new SynchronizationAdapter() {
+                exchange.getExchangeExtension().addOnCompletion(new SynchronizationAdapter() {
                     @Override
                     public void onDone(Exchange exchange) {
                         exchange.getMessage().setBody("Done " + exchange.getMessage().getBody());
diff --git a/core/camel-core/src/test/java/org/apache/camel/processor/MDCOnCompletionOnCompletionTest.java b/core/camel-core/src/test/java/org/apache/camel/processor/MDCOnCompletionOnCompletionTest.java
index e1b7fc317a4..09f1afd64b2 100644
--- a/core/camel-core/src/test/java/org/apache/camel/processor/MDCOnCompletionOnCompletionTest.java
+++ b/core/camel-core/src/test/java/org/apache/camel/processor/MDCOnCompletionOnCompletionTest.java
@@ -18,7 +18,6 @@ package org.apache.camel.processor;
 
 import org.apache.camel.ContextTestSupport;
 import org.apache.camel.Exchange;
-import org.apache.camel.ExtendedExchange;
 import org.apache.camel.Processor;
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.component.mock.MockEndpoint;
@@ -54,7 +53,7 @@ public class MDCOnCompletionOnCompletionTest extends ContextTestSupport {
                         .process(new Processor() {
                             @Override
                             public void process(Exchange exchange) throws Exception {
-                                exchange.adapt(ExtendedExchange.class).addOnCompletion(new MyOnCompletion());
+                                exchange.getExchangeExtension().addOnCompletion(new MyOnCompletion());
                             }
                         }).end().to("log:foo").to("direct:b");
 
diff --git a/core/camel-core/src/test/java/org/apache/camel/processor/OnCompletionContainsTest.java b/core/camel-core/src/test/java/org/apache/camel/processor/OnCompletionContainsTest.java
index 1fa79f1122a..664992a3bb4 100644
--- a/core/camel-core/src/test/java/org/apache/camel/processor/OnCompletionContainsTest.java
+++ b/core/camel-core/src/test/java/org/apache/camel/processor/OnCompletionContainsTest.java
@@ -18,7 +18,6 @@ package org.apache.camel.processor;
 
 import org.apache.camel.ContextTestSupport;
 import org.apache.camel.Exchange;
-import org.apache.camel.ExtendedExchange;
 import org.apache.camel.Processor;
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.support.SynchronizationAdapter;
@@ -66,26 +65,26 @@ public class OnCompletionContainsTest extends ContextTestSupport {
                 from("direct:start").process(new Processor() {
                     public void process(Exchange exchange) throws Exception {
                         SynchronizationAdapter adapter = new SimpleSynchronizationAdapter("mock:sync", "A");
-                        exchange.adapt(ExtendedExchange.class).addOnCompletion(adapter);
+                        exchange.getExchangeExtension().addOnCompletion(adapter);
 
                         // should not add the adapter again as we already have
                         // it
-                        if (!exchange.adapt(ExtendedExchange.class).containsOnCompletion(adapter)) {
-                            exchange.adapt(ExtendedExchange.class).addOnCompletion(adapter);
+                        if (!exchange.getExchangeExtension().containsOnCompletion(adapter)) {
+                            exchange.getExchangeExtension().addOnCompletion(adapter);
                         }
 
                         adapter = new SimpleSynchronizationAdapter("mock:sync", "B");
-                        exchange.adapt(ExtendedExchange.class).addOnCompletion(adapter);
+                        exchange.getExchangeExtension().addOnCompletion(adapter);
 
                         // now add the B again as we want to test that this also
                         // work
-                        if (exchange.adapt(ExtendedExchange.class).containsOnCompletion(adapter)) {
-                            exchange.adapt(ExtendedExchange.class).addOnCompletion(adapter);
+                        if (exchange.getExchangeExtension().containsOnCompletion(adapter)) {
+                            exchange.getExchangeExtension().addOnCompletion(adapter);
                         }
 
                         // add a C that is no a SimpleSynchronizationAdapter
                         // class
-                        exchange.adapt(ExtendedExchange.class).addOnCompletion(new SynchronizationAdapter() {
+                        exchange.getExchangeExtension().addOnCompletion(new SynchronizationAdapter() {
                             @Override
                             public void onDone(Exchange exchange) {
                                 template.sendBody("mock:sync", "C");
diff --git a/core/camel-core/src/test/java/org/apache/camel/processor/OnCompletionShouldBeLastTest.java b/core/camel-core/src/test/java/org/apache/camel/processor/OnCompletionShouldBeLastTest.java
index e55e6a3b32d..352d5dc2806 100644
--- a/core/camel-core/src/test/java/org/apache/camel/processor/OnCompletionShouldBeLastTest.java
+++ b/core/camel-core/src/test/java/org/apache/camel/processor/OnCompletionShouldBeLastTest.java
@@ -18,7 +18,6 @@ package org.apache.camel.processor;
 
 import org.apache.camel.ContextTestSupport;
 import org.apache.camel.Exchange;
-import org.apache.camel.ExtendedExchange;
 import org.apache.camel.Processor;
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.support.SynchronizationAdapter;
@@ -45,7 +44,7 @@ public class OnCompletionShouldBeLastTest extends ContextTestSupport {
 
                 from("direct:start").process(new Processor() {
                     public void process(Exchange exchange) throws Exception {
-                        exchange.adapt(ExtendedExchange.class).addOnCompletion(new SynchronizationAdapter() {
+                        exchange.getExchangeExtension().addOnCompletion(new SynchronizationAdapter() {
                             @Override
                             public void onDone(Exchange exchange) {
                                 template.sendBody("mock:sync", "A");
@@ -57,7 +56,7 @@ public class OnCompletionShouldBeLastTest extends ContextTestSupport {
                             }
                         });
 
-                        exchange.adapt(ExtendedExchange.class).addOnCompletion(new SynchronizationAdapter() {
+                        exchange.getExchangeExtension().addOnCompletion(new SynchronizationAdapter() {
                             @Override
                             public void onDone(Exchange exchange) {
                                 template.sendBody("mock:sync", "B");
@@ -69,7 +68,7 @@ public class OnCompletionShouldBeLastTest extends ContextTestSupport {
                             }
                         });
 
-                        exchange.adapt(ExtendedExchange.class).addOnCompletion(new SynchronizationAdapter() {
+                        exchange.getExchangeExtension().addOnCompletion(new SynchronizationAdapter() {
                             @Override
                             public void onDone(Exchange exchange) {
                                 template.sendBody("mock:sync", "C");
diff --git a/core/camel-core/src/test/java/org/apache/camel/processor/RouteAwareSynchronizationTest.java b/core/camel-core/src/test/java/org/apache/camel/processor/RouteAwareSynchronizationTest.java
index f553b22c986..cf76f57c53c 100644
--- a/core/camel-core/src/test/java/org/apache/camel/processor/RouteAwareSynchronizationTest.java
+++ b/core/camel-core/src/test/java/org/apache/camel/processor/RouteAwareSynchronizationTest.java
@@ -21,7 +21,6 @@ import java.util.List;
 
 import org.apache.camel.ContextTestSupport;
 import org.apache.camel.Exchange;
-import org.apache.camel.ExtendedExchange;
 import org.apache.camel.Processor;
 import org.apache.camel.Route;
 import org.apache.camel.builder.RouteBuilder;
@@ -46,7 +45,7 @@ public class RouteAwareSynchronizationTest extends ContextTestSupport {
         template.send("direct:start", new Processor() {
             @Override
             public void process(Exchange exchange) throws Exception {
-                exchange.adapt(ExtendedExchange.class).addOnCompletion(new MyRouteAware());
+                exchange.getExchangeExtension().addOnCompletion(new MyRouteAware());
                 exchange.getIn().setBody("Hello World");
             }
         });
diff --git a/core/camel-core/src/test/java/org/apache/camel/processor/async/AsyncEndpointDelayUoWTest.java b/core/camel-core/src/test/java/org/apache/camel/processor/async/AsyncEndpointDelayUoWTest.java
index 06450db0d98..d0a612c863e 100644
--- a/core/camel-core/src/test/java/org/apache/camel/processor/async/AsyncEndpointDelayUoWTest.java
+++ b/core/camel-core/src/test/java/org/apache/camel/processor/async/AsyncEndpointDelayUoWTest.java
@@ -20,13 +20,14 @@ import java.util.concurrent.atomic.AtomicInteger;
 
 import org.apache.camel.ContextTestSupport;
 import org.apache.camel.Exchange;
-import org.apache.camel.ExtendedExchange;
 import org.apache.camel.Processor;
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.support.SynchronizationAdapter;
 import org.junit.jupiter.api.Test;
 
-import static org.junit.jupiter.api.Assertions.*;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertFalse;
+import static org.junit.jupiter.api.Assertions.assertTrue;
 
 public class AsyncEndpointDelayUoWTest extends ContextTestSupport {
 
@@ -61,7 +62,7 @@ public class AsyncEndpointDelayUoWTest extends ContextTestSupport {
                 from("direct:start").process(new Processor() {
                     public void process(Exchange exchange) throws Exception {
                         beforeThreadName = Thread.currentThread().getName();
-                        exchange.adapt(ExtendedExchange.class).addOnCompletion(sync);
+                        exchange.getExchangeExtension().addOnCompletion(sync);
                     }
                 }).to("mock:before").to("log:before").delay(500).asyncDelayed().process(new Processor() {
                     public void process(Exchange exchange) throws Exception {
diff --git a/core/camel-core/src/test/java/org/apache/camel/processor/async/AsyncEndpointUoWFailedTest.java b/core/camel-core/src/test/java/org/apache/camel/processor/async/AsyncEndpointUoWFailedTest.java
index 55987d1e7b9..1bfbe7e6e7d 100644
--- a/core/camel-core/src/test/java/org/apache/camel/processor/async/AsyncEndpointUoWFailedTest.java
+++ b/core/camel-core/src/test/java/org/apache/camel/processor/async/AsyncEndpointUoWFailedTest.java
@@ -21,13 +21,15 @@ import java.util.concurrent.atomic.AtomicInteger;
 import org.apache.camel.CamelExecutionException;
 import org.apache.camel.ContextTestSupport;
 import org.apache.camel.Exchange;
-import org.apache.camel.ExtendedExchange;
 import org.apache.camel.Processor;
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.support.SynchronizationAdapter;
 import org.junit.jupiter.api.Test;
 
-import static org.junit.jupiter.api.Assertions.*;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertFalse;
+import static org.junit.jupiter.api.Assertions.assertTrue;
+import static org.junit.jupiter.api.Assertions.fail;
 
 public class AsyncEndpointUoWFailedTest extends ContextTestSupport {
 
@@ -69,7 +71,7 @@ public class AsyncEndpointUoWFailedTest extends ContextTestSupport {
                 from("direct:start").process(new Processor() {
                     public void process(Exchange exchange) throws Exception {
                         beforeThreadName = Thread.currentThread().getName();
-                        exchange.adapt(ExtendedExchange.class).addOnCompletion(sync);
+                        exchange.getExchangeExtension().addOnCompletion(sync);
                     }
                 }).to("mock:before").to("log:before").to("async:bye:camel").process(new Processor() {
                     public void process(Exchange exchange) throws Exception {
diff --git a/core/camel-core/src/test/java/org/apache/camel/processor/async/AsyncEndpointUoWTest.java b/core/camel-core/src/test/java/org/apache/camel/processor/async/AsyncEndpointUoWTest.java
index 8c26a15ecb1..a7ed9463839 100644
--- a/core/camel-core/src/test/java/org/apache/camel/processor/async/AsyncEndpointUoWTest.java
+++ b/core/camel-core/src/test/java/org/apache/camel/processor/async/AsyncEndpointUoWTest.java
@@ -20,13 +20,14 @@ import java.util.concurrent.atomic.AtomicInteger;
 
 import org.apache.camel.ContextTestSupport;
 import org.apache.camel.Exchange;
-import org.apache.camel.ExtendedExchange;
 import org.apache.camel.Processor;
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.support.SynchronizationAdapter;
 import org.junit.jupiter.api.Test;
 
-import static org.junit.jupiter.api.Assertions.*;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertFalse;
+import static org.junit.jupiter.api.Assertions.assertTrue;
 
 public class AsyncEndpointUoWTest extends ContextTestSupport {
 
@@ -63,7 +64,7 @@ public class AsyncEndpointUoWTest extends ContextTestSupport {
                 from("direct:start").process(new Processor() {
                     public void process(Exchange exchange) throws Exception {
                         beforeThreadName = Thread.currentThread().getName();
-                        exchange.adapt(ExtendedExchange.class).addOnCompletion(sync);
+                        exchange.getExchangeExtension().addOnCompletion(sync);
                     }
                 }).to("mock:before").to("log:before").to("async:bye:camel").process(new Processor() {
                     public void process(Exchange exchange) throws Exception {
diff --git a/core/camel-support/src/main/java/org/apache/camel/converter/stream/FileInputStreamCache.java b/core/camel-support/src/main/java/org/apache/camel/converter/stream/FileInputStreamCache.java
index da4ea64e87c..c44abd8f7a4 100644
--- a/core/camel-support/src/main/java/org/apache/camel/converter/stream/FileInputStreamCache.java
+++ b/core/camel-support/src/main/java/org/apache/camel/converter/stream/FileInputStreamCache.java
@@ -35,7 +35,6 @@ import javax.crypto.CipherOutputStream;
 
 import org.apache.camel.Exchange;
 import org.apache.camel.ExchangePropertyKey;
-import org.apache.camel.ExtendedExchange;
 import org.apache.camel.RuntimeCamelException;
 import org.apache.camel.StreamCache;
 import org.apache.camel.spi.StreamCachingStrategy;
@@ -278,7 +277,7 @@ public final class FileInputStreamCache extends InputStream implements StreamCac
                     streamCacheUnitOfWork.addSynchronization(onCompletion);
                 } else {
                     // add on completion so we can cleanup after the exchange is done such as deleting temporary files
-                    exchange.adapt(ExtendedExchange.class).addOnCompletion(onCompletion);
+                    exchange.getExchangeExtension().addOnCompletion(onCompletion);
                 }
             }
         }


[camel] 13/23: CAMEL-15105: adapt the DefaultConsumer to the new extension interface

Posted by or...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

orpiske pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/camel.git

commit d5989c41660b9ab6e28f33af942a26b4882c6171
Author: Otavio Rodolfo Piske <an...@gmail.com>
AuthorDate: Tue Nov 22 18:34:15 2022 +0100

    CAMEL-15105: adapt the DefaultConsumer to the new extension interface
---
 .../src/main/java/org/apache/camel/support/DefaultConsumer.java   | 8 +++-----
 1 file changed, 3 insertions(+), 5 deletions(-)

diff --git a/core/camel-support/src/main/java/org/apache/camel/support/DefaultConsumer.java b/core/camel-support/src/main/java/org/apache/camel/support/DefaultConsumer.java
index df40967f49d..7d773fcfb3e 100644
--- a/core/camel-support/src/main/java/org/apache/camel/support/DefaultConsumer.java
+++ b/core/camel-support/src/main/java/org/apache/camel/support/DefaultConsumer.java
@@ -22,7 +22,6 @@ import org.apache.camel.Consumer;
 import org.apache.camel.Endpoint;
 import org.apache.camel.Exchange;
 import org.apache.camel.ExtendedCamelContext;
-import org.apache.camel.ExtendedExchange;
 import org.apache.camel.PooledExchange;
 import org.apache.camel.Processor;
 import org.apache.camel.Route;
@@ -115,7 +114,7 @@ public class DefaultConsumer extends ServiceSupport implements Consumer, RouteAw
         if (uow == null) {
             uow = endpoint.getCamelContext().adapt(ExtendedCamelContext.class).getUnitOfWorkFactory()
                     .createUnitOfWork(exchange);
-            exchange.adapt(ExtendedExchange.class).setUnitOfWork(uow);
+            exchange.getExchangeExtension().setUnitOfWork(uow);
         }
         return uow;
     }
@@ -155,11 +154,10 @@ public class DefaultConsumer extends ServiceSupport implements Consumer, RouteAw
     public AsyncCallback defaultConsumerCallback(Exchange exchange, boolean autoRelease) {
         boolean pooled = exchangeFactory.isPooled();
         if (pooled) {
-            ExtendedExchange ee = exchange.adapt(ExtendedExchange.class);
-            AsyncCallback answer = ee.getDefaultConsumerCallback();
+            AsyncCallback answer = exchange.getExchangeExtension().getDefaultConsumerCallback();
             if (answer == null) {
                 answer = new DefaultConsumerCallback(this, exchange, autoRelease);
-                ee.setDefaultConsumerCallback(answer);
+                exchange.getExchangeExtension().setDefaultConsumerCallback(answer);
             }
             return answer;
         } else {


[camel] 17/23: CAMEL-15105: code cleanups in the camel-core

Posted by or...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

orpiske pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/camel.git

commit 5d4c96d306cadd95afae7d5de3eed4f9832c1cd4
Author: Otavio Rodolfo Piske <an...@gmail.com>
AuthorDate: Tue Nov 22 18:40:51 2022 +0100

    CAMEL-15105: code cleanups in the camel-core
---
 .../org/apache/camel/impl/event/ExchangeFailureHandledEvent.java | 1 -
 .../src/main/java/org/apache/camel/processor/Enricher.java       | 2 +-
 .../src/main/java/org/apache/camel/processor/PollEnricher.java   | 3 +--
 .../java/org/apache/camel/processor/RecipientListProcessor.java  | 3 +--
 .../src/main/java/org/apache/camel/processor/Splitter.java       | 3 +--
 .../camel/processor/aggregate/UseLatestAggregationStrategy.java  | 6 ++----
 .../test/java/org/apache/camel/builder/xml/XsltBuilderTest.java  | 3 +--
 .../src/test/java/org/apache/camel/impl/DefaultExchangeTest.java | 3 +--
 .../test/java/org/apache/camel/language/simple/SimpleTest.java   | 9 +++++++--
 .../java/org/apache/camel/processor/UnitOfWorkHelperTest.java    | 1 -
 .../org/apache/camel/support/EventDrivenPollingConsumer.java     | 1 -
 11 files changed, 15 insertions(+), 20 deletions(-)

diff --git a/core/camel-base/src/main/java/org/apache/camel/impl/event/ExchangeFailureHandledEvent.java b/core/camel-base/src/main/java/org/apache/camel/impl/event/ExchangeFailureHandledEvent.java
index 229588e57a6..a2410aa05c2 100644
--- a/core/camel-base/src/main/java/org/apache/camel/impl/event/ExchangeFailureHandledEvent.java
+++ b/core/camel-base/src/main/java/org/apache/camel/impl/event/ExchangeFailureHandledEvent.java
@@ -17,7 +17,6 @@
 package org.apache.camel.impl.event;
 
 import org.apache.camel.Exchange;
-import org.apache.camel.ExtendedExchange;
 import org.apache.camel.Processor;
 import org.apache.camel.spi.CamelEvent;
 import org.apache.camel.util.URISupport;
diff --git a/core/camel-core-processor/src/main/java/org/apache/camel/processor/Enricher.java b/core/camel-core-processor/src/main/java/org/apache/camel/processor/Enricher.java
index 63901a20827..f4acc5d4a20 100644
--- a/core/camel-core-processor/src/main/java/org/apache/camel/processor/Enricher.java
+++ b/core/camel-core-processor/src/main/java/org/apache/camel/processor/Enricher.java
@@ -176,7 +176,7 @@ public class Enricher extends AsyncProcessorSupport implements IdAware, RouteIdA
                             copyResultsPreservePattern(exchange, aggregatedExchange);
                             // handover any synchronization (if unit of work is not shared)
                             if (resourceExchange != null && !isShareUnitOfWork()) {
-                                resourceExchange.adapt(ExtendedExchange.class).handoverCompletions(exchange);
+                                resourceExchange.getExchangeExtension().handoverCompletions(exchange);
                             }
                         }
                     } catch (Throwable e) {
diff --git a/core/camel-core-processor/src/main/java/org/apache/camel/processor/PollEnricher.java b/core/camel-core-processor/src/main/java/org/apache/camel/processor/PollEnricher.java
index 4a1bd3605c3..f65b1c42f3d 100644
--- a/core/camel-core-processor/src/main/java/org/apache/camel/processor/PollEnricher.java
+++ b/core/camel-core-processor/src/main/java/org/apache/camel/processor/PollEnricher.java
@@ -26,7 +26,6 @@ import org.apache.camel.Endpoint;
 import org.apache.camel.Exchange;
 import org.apache.camel.Expression;
 import org.apache.camel.ExtendedCamelContext;
-import org.apache.camel.ExtendedExchange;
 import org.apache.camel.NoTypeConversionAvailableException;
 import org.apache.camel.PollingConsumer;
 import org.apache.camel.spi.ConsumerCache;
@@ -312,7 +311,7 @@ public class PollEnricher extends AsyncProcessorSupport implements IdAware, Rout
                     copyResultsPreservePattern(exchange, aggregatedExchange);
                     // handover any synchronization
                     if (resourceExchange != null) {
-                        resourceExchange.adapt(ExtendedExchange.class).handoverCompletions(exchange);
+                        resourceExchange.getExchangeExtension().handoverCompletions(exchange);
                     }
                 }
             }
diff --git a/core/camel-core-processor/src/main/java/org/apache/camel/processor/RecipientListProcessor.java b/core/camel-core-processor/src/main/java/org/apache/camel/processor/RecipientListProcessor.java
index 8c1a735a86d..3ee0ae8f4c8 100644
--- a/core/camel-core-processor/src/main/java/org/apache/camel/processor/RecipientListProcessor.java
+++ b/core/camel-core-processor/src/main/java/org/apache/camel/processor/RecipientListProcessor.java
@@ -34,7 +34,6 @@ import org.apache.camel.ExchangePattern;
 import org.apache.camel.ExchangePropertyKey;
 import org.apache.camel.Expression;
 import org.apache.camel.ExtendedCamelContext;
-import org.apache.camel.ExtendedExchange;
 import org.apache.camel.NoTypeConversionAvailableException;
 import org.apache.camel.Processor;
 import org.apache.camel.Producer;
@@ -291,7 +290,7 @@ public class RecipientListProcessor extends MulticastProcessor {
             Exchange exchange, ExchangePattern pattern, boolean prototypeEndpoint) {
         // copy exchange, and do not share the unit of work
         Exchange copy = processorExchangeFactory.createCorrelatedCopy(exchange, false);
-        copy.adapt(ExtendedExchange.class).setTransacted(exchange.isTransacted());
+        copy.getExchangeExtension().setTransacted(exchange.isTransacted());
 
         // If we are in a transaction, set TRANSACTION_CONTEXT_DATA property for new exchanges to share txData
         // during the transaction.
diff --git a/core/camel-core-processor/src/main/java/org/apache/camel/processor/Splitter.java b/core/camel-core-processor/src/main/java/org/apache/camel/processor/Splitter.java
index 597bc007391..0224397e03b 100644
--- a/core/camel-core-processor/src/main/java/org/apache/camel/processor/Splitter.java
+++ b/core/camel-core-processor/src/main/java/org/apache/camel/processor/Splitter.java
@@ -34,7 +34,6 @@ import org.apache.camel.CamelContext;
 import org.apache.camel.Exchange;
 import org.apache.camel.ExchangePropertyKey;
 import org.apache.camel.Expression;
-import org.apache.camel.ExtendedExchange;
 import org.apache.camel.Message;
 import org.apache.camel.Processor;
 import org.apache.camel.Route;
@@ -232,7 +231,7 @@ public class Splitter extends MulticastProcessor implements AsyncProcessor, Trac
                         // create a correlated copy as the new exchange to be routed in the splitter from the copy
                         // and do not share the unit of work
                         Exchange newExchange = processorExchangeFactory.createCorrelatedCopy(copy, false);
-                        newExchange.adapt(ExtendedExchange.class).setTransacted(original.isTransacted());
+                        newExchange.getExchangeExtension().setTransacted(original.isTransacted());
                         // If we are in a transaction, set TRANSACTION_CONTEXT_DATA property for new exchanges to share txData
                         // during the transaction.
                         if (original.isTransacted() && newExchange.getProperty(Exchange.TRANSACTION_CONTEXT_DATA) == null) {
diff --git a/core/camel-core-processor/src/main/java/org/apache/camel/processor/aggregate/UseLatestAggregationStrategy.java b/core/camel-core-processor/src/main/java/org/apache/camel/processor/aggregate/UseLatestAggregationStrategy.java
index ef954ce72e3..62af6531d8e 100644
--- a/core/camel-core-processor/src/main/java/org/apache/camel/processor/aggregate/UseLatestAggregationStrategy.java
+++ b/core/camel-core-processor/src/main/java/org/apache/camel/processor/aggregate/UseLatestAggregationStrategy.java
@@ -19,7 +19,6 @@ package org.apache.camel.processor.aggregate;
 import org.apache.camel.AggregationStrategy;
 import org.apache.camel.Exchange;
 import org.apache.camel.ExchangePropertyKey;
-import org.apache.camel.ExtendedExchange;
 
 /**
  * An {@link AggregationStrategy} which just uses the latest exchange which is useful for status messages where old
@@ -72,9 +71,8 @@ public class UseLatestAggregationStrategy implements AggregationStrategy {
         }
 
         // propagate exception from old exchange if there isn't already an exception
-        ExtendedExchange oee = (ExtendedExchange) oldExchange;
-        if (oee.isFailed() || oee.isRollbackOnly() || oee.isRollbackOnlyLast()
-                || oee.isErrorHandlerHandledSet() && oee.isErrorHandlerHandled()) {
+        if (oldExchange.isFailed() || oldExchange.isRollbackOnly() || oldExchange.isRollbackOnlyLast()
+                || oldExchange.getExchangeExtension().isErrorHandlerHandledSet() && oldExchange.getExchangeExtension().isErrorHandlerHandled()) {
             // propagate failure by using old exchange as the answer
             return oldExchange;
         }
diff --git a/core/camel-core/src/test/java/org/apache/camel/builder/xml/XsltBuilderTest.java b/core/camel-core/src/test/java/org/apache/camel/builder/xml/XsltBuilderTest.java
index d61ff4877da..506130240d2 100644
--- a/core/camel-core/src/test/java/org/apache/camel/builder/xml/XsltBuilderTest.java
+++ b/core/camel-core/src/test/java/org/apache/camel/builder/xml/XsltBuilderTest.java
@@ -33,7 +33,6 @@ import org.xml.sax.InputSource;
 import org.apache.camel.ContextTestSupport;
 import org.apache.camel.Exchange;
 import org.apache.camel.ExpectedBodyTypeException;
-import org.apache.camel.ExtendedExchange;
 import org.apache.camel.component.xslt.StreamResultHandlerFactory;
 import org.apache.camel.component.xslt.XsltBuilder;
 import org.apache.camel.converter.jaxp.XmlConverter;
@@ -261,7 +260,7 @@ public class XsltBuilderTest extends ContextTestSupport {
         assertTrue(body.endsWith("<goodbye>world!</goodbye>"));
 
         // now done the exchange
-        List<Synchronization> onCompletions = exchange.adapt(ExtendedExchange.class).handoverCompletions();
+        List<Synchronization> onCompletions = exchange.getExchangeExtension().handoverCompletions();
         UnitOfWorkHelper.doneSynchronizations(exchange, onCompletions, log);
 
         // the file should be deleted
diff --git a/core/camel-core/src/test/java/org/apache/camel/impl/DefaultExchangeTest.java b/core/camel-core/src/test/java/org/apache/camel/impl/DefaultExchangeTest.java
index 18bb4478a1b..766fa21a935 100644
--- a/core/camel-core/src/test/java/org/apache/camel/impl/DefaultExchangeTest.java
+++ b/core/camel-core/src/test/java/org/apache/camel/impl/DefaultExchangeTest.java
@@ -23,7 +23,6 @@ import org.apache.camel.CamelContext;
 import org.apache.camel.Exchange;
 import org.apache.camel.ExchangePropertyKey;
 import org.apache.camel.ExchangeTestSupport;
-import org.apache.camel.ExtendedExchange;
 import org.apache.camel.InvalidPayloadException;
 import org.apache.camel.Message;
 import org.apache.camel.RuntimeCamelException;
@@ -269,7 +268,7 @@ public class DefaultExchangeTest extends ExchangeTestSupport {
         exchange.setProperty(ExchangePropertyKey.CHARSET_NAME, "iso-8859-1");
 
         assertEquals(1, exchange.getProperties().size());
-        assertEquals(2, exchange.adapt(ExtendedExchange.class).getInternalProperties().size());
+        assertEquals(2, exchange.getExchangeExtension().getInternalProperties().size());
         assertEquals(3, exchange.getAllProperties().size());
     }
 
diff --git a/core/camel-core/src/test/java/org/apache/camel/language/simple/SimpleTest.java b/core/camel-core/src/test/java/org/apache/camel/language/simple/SimpleTest.java
index 71761264db8..2a4b29a40cb 100644
--- a/core/camel-core/src/test/java/org/apache/camel/language/simple/SimpleTest.java
+++ b/core/camel-core/src/test/java/org/apache/camel/language/simple/SimpleTest.java
@@ -32,7 +32,6 @@ import org.apache.camel.Exchange;
 import org.apache.camel.ExchangePattern;
 import org.apache.camel.Expression;
 import org.apache.camel.ExpressionIllegalSyntaxException;
-import org.apache.camel.ExtendedExchange;
 import org.apache.camel.InvalidPayloadException;
 import org.apache.camel.LanguageTestSupport;
 import org.apache.camel.Predicate;
@@ -49,7 +48,13 @@ import org.junit.jupiter.api.Test;
 import org.junit.jupiter.api.parallel.ResourceLock;
 import org.junit.jupiter.api.parallel.Resources;
 
-import static org.junit.jupiter.api.Assertions.*;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertFalse;
+import static org.junit.jupiter.api.Assertions.assertNotNull;
+import static org.junit.jupiter.api.Assertions.assertNull;
+import static org.junit.jupiter.api.Assertions.assertSame;
+import static org.junit.jupiter.api.Assertions.assertTrue;
+import static org.junit.jupiter.api.Assertions.fail;
 
 public class SimpleTest extends LanguageTestSupport {
 
diff --git a/core/camel-core/src/test/java/org/apache/camel/processor/UnitOfWorkHelperTest.java b/core/camel-core/src/test/java/org/apache/camel/processor/UnitOfWorkHelperTest.java
index fdceb7a4b19..884c4bee4c5 100644
--- a/core/camel-core/src/test/java/org/apache/camel/processor/UnitOfWorkHelperTest.java
+++ b/core/camel-core/src/test/java/org/apache/camel/processor/UnitOfWorkHelperTest.java
@@ -18,7 +18,6 @@ package org.apache.camel.processor;
 
 import org.apache.camel.ContextTestSupport;
 import org.apache.camel.Exchange;
-import org.apache.camel.ExtendedExchange;
 import org.apache.camel.Message;
 import org.apache.camel.component.file.FileComponent;
 import org.apache.camel.component.file.GenericFile;
diff --git a/core/camel-support/src/main/java/org/apache/camel/support/EventDrivenPollingConsumer.java b/core/camel-support/src/main/java/org/apache/camel/support/EventDrivenPollingConsumer.java
index 55ab8afbb6e..c65939586d9 100644
--- a/core/camel-support/src/main/java/org/apache/camel/support/EventDrivenPollingConsumer.java
+++ b/core/camel-support/src/main/java/org/apache/camel/support/EventDrivenPollingConsumer.java
@@ -27,7 +27,6 @@ import org.apache.camel.Endpoint;
 import org.apache.camel.Exchange;
 import org.apache.camel.ExchangeTimedOutException;
 import org.apache.camel.ExtendedCamelContext;
-import org.apache.camel.ExtendedExchange;
 import org.apache.camel.IsSingleton;
 import org.apache.camel.PollingConsumerPollingStrategy;
 import org.apache.camel.PooledExchange;


[camel] 11/23: CAMEL-15105: adapt the RedeliveryErrorHandler to the new extension interface

Posted by or...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

orpiske pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/camel.git

commit 5e7f751fccb9da090f38f97cf623a753d9b87f2c
Author: Otavio Rodolfo Piske <an...@gmail.com>
AuthorDate: Tue Nov 22 18:29:17 2022 +0100

    CAMEL-15105: adapt the RedeliveryErrorHandler to the new extension interface
---
 .../errorhandler/RedeliveryErrorHandler.java       | 66 ++++++++++------------
 1 file changed, 29 insertions(+), 37 deletions(-)

diff --git a/core/camel-core-processor/src/main/java/org/apache/camel/processor/errorhandler/RedeliveryErrorHandler.java b/core/camel-core-processor/src/main/java/org/apache/camel/processor/errorhandler/RedeliveryErrorHandler.java
index 407291b81bb..01335cb8acd 100644
--- a/core/camel-core-processor/src/main/java/org/apache/camel/processor/errorhandler/RedeliveryErrorHandler.java
+++ b/core/camel-core-processor/src/main/java/org/apache/camel/processor/errorhandler/RedeliveryErrorHandler.java
@@ -317,8 +317,7 @@ public abstract class RedeliveryErrorHandler extends ErrorHandlerSupport
      * Strategy to determine if the exchange is done so we can continue
      */
     protected boolean isDone(Exchange exchange) {
-        ExtendedExchange ee = (ExtendedExchange) exchange;
-        if (ee.isInterrupted()) {
+        if (exchange.getExchangeExtension().isInterrupted()) {
             // mark the exchange to stop continue routing when interrupted
             // as we do not want to continue routing (for example a task has been cancelled)
             if (LOG.isTraceEnabled()) {
@@ -333,7 +332,7 @@ public abstract class RedeliveryErrorHandler extends ErrorHandlerSupport
         // or we are exhausted
         boolean answer = exchange.getException() == null
                 || ExchangeHelper.isFailureHandled(exchange)
-                || ee.isRedeliveryExhausted();
+                || exchange.getExchangeExtension().isRedeliveryExhausted();
 
         if (LOG.isTraceEnabled()) {
             LOG.trace("Is exchangeId: {} done? {}", exchange.getExchangeId(), answer);
@@ -386,7 +385,7 @@ public abstract class RedeliveryErrorHandler extends ErrorHandlerSupport
      * Simple task to perform calling the processor with no redelivery support
      */
     protected class SimpleTask implements PooledExchangeTask, Runnable, AsyncCallback {
-        private ExtendedExchange exchange;
+        private Exchange exchange;
         private AsyncCallback callback;
         private boolean first;
 
@@ -394,7 +393,7 @@ public abstract class RedeliveryErrorHandler extends ErrorHandlerSupport
         }
 
         public void prepare(Exchange exchange, AsyncCallback callback) {
-            this.exchange = (ExtendedExchange) exchange;
+            this.exchange = exchange;
             this.callback = callback;
             this.first = true;
         }
@@ -439,7 +438,7 @@ public abstract class RedeliveryErrorHandler extends ErrorHandlerSupport
                 cb.done(false);
                 return;
             }
-            if (exchange.isInterrupted()) {
+            if (exchange.getExchangeExtension().isInterrupted()) {
                 // mark the exchange to stop continue routing when interrupted
                 // as we do not want to continue routing (for example a task has been cancelled)
                 if (LOG.isTraceEnabled()) {
@@ -457,7 +456,7 @@ public abstract class RedeliveryErrorHandler extends ErrorHandlerSupport
             // and it has not been handled by the failure processor before
             // or not exhausted
             boolean failure = exchange.getException() != null
-                    && !exchange.isRedeliveryExhausted()
+                    && !exchange.getExchangeExtension().isRedeliveryExhausted()
                     && !ExchangeHelper.isFailureHandled(exchange);
             // error handled bridged
             boolean bridge = ExchangeHelper.isErrorHandlerBridge(exchange);
@@ -533,15 +532,13 @@ public abstract class RedeliveryErrorHandler extends ErrorHandlerSupport
         }
 
         protected void prepareExchangeAfterFailure(final Exchange exchange) {
-            ExtendedExchange ee = (ExtendedExchange) exchange;
-
             // we could not process the exchange so we let the failure processor handled it
             ExchangeHelper.setFailureHandled(exchange);
 
             // honor if already set a handling
-            boolean alreadySet = ee.isErrorHandlerHandledSet();
+            boolean alreadySet = exchange.getExchangeExtension().isErrorHandlerHandledSet();
             if (alreadySet) {
-                boolean handled = ee.isErrorHandlerHandled();
+                boolean handled = exchange.getExchangeExtension().isErrorHandlerHandled();
                 LOG.trace("This exchange has already been marked for handling: {}", handled);
                 if (!handled) {
                     // exception not handled, put exception back in the exchange
@@ -558,23 +555,21 @@ public abstract class RedeliveryErrorHandler extends ErrorHandlerSupport
         }
 
         private void prepareExchangeAfterFailureNotHandled(Exchange exchange) {
-            ExtendedExchange ee = (ExtendedExchange) exchange;
-
-            LOG.trace("This exchange is not handled or continued so its marked as failed: {}", ee);
+            LOG.trace("This exchange is not handled or continued so its marked as failed: {}", exchange);
             // exception not handled, put exception back in the exchange
-            ee.setErrorHandlerHandled(false);
-            ee.setException(exchange.getProperty(ExchangePropertyKey.EXCEPTION_CAUGHT, Exception.class));
+            exchange.getExchangeExtension().setErrorHandlerHandled(false);
+            exchange.setException(exchange.getProperty(ExchangePropertyKey.EXCEPTION_CAUGHT, Exception.class));
             // and put failure endpoint back as well
-            ee.setProperty(ExchangePropertyKey.FAILURE_ENDPOINT, ee.getProperty(ExchangePropertyKey.TO_ENDPOINT));
+            exchange.setProperty(ExchangePropertyKey.FAILURE_ENDPOINT, exchange.getProperty(ExchangePropertyKey.TO_ENDPOINT));
             // and store the route id, so we know in which route we failed
-            Route rc = ExchangeHelper.getRoute(ee);
+            Route rc = ExchangeHelper.getRoute(exchange);
             if (rc != null) {
-                ee.setProperty(ExchangePropertyKey.FAILURE_ROUTE_ID, rc.getRouteId());
+                exchange.setProperty(ExchangePropertyKey.FAILURE_ROUTE_ID, rc.getRouteId());
             }
 
             // create log message
             String msg = "Failed delivery for " + ExchangeHelper.logIds(exchange);
-            msg = msg + ". Exhausted after delivery attempt: 1 caught: " + ee.getException();
+            msg = msg + ". Exhausted after delivery attempt: 1 caught: " + exchange.getException();
 
             // log that we failed delivery as we are exhausted
             logFailedDelivery(exchange, msg, null);
@@ -648,7 +643,7 @@ public abstract class RedeliveryErrorHandler extends ErrorHandlerSupport
     protected class RedeliveryTask implements PooledExchangeTask, Runnable {
         // state
         private Exchange original;
-        private ExtendedExchange exchange;
+        private Exchange exchange;
         private AsyncCallback callback;
         private int redeliveryCounter;
         private long redeliveryDelay;
@@ -744,7 +739,7 @@ public abstract class RedeliveryErrorHandler extends ErrorHandlerSupport
             boolean exhausted = false;
             if (redeliverAllowed) {
                 // we can redeliver but check if we are exhausted first (optimized to only check when needed)
-                exhausted = exchange.isRedeliveryExhausted() || exchange.isRollbackOnly();
+                exhausted = exchange.getExchangeExtension().isRedeliveryExhausted() || exchange.isRollbackOnly();
                 if (!exhausted && redeliveryCounter > 0) {
                     // its a potential redelivery so determine if we should redeliver or not
                     redeliverAllowed
@@ -793,7 +788,7 @@ public abstract class RedeliveryErrorHandler extends ErrorHandlerSupport
                                 // the task was rejected
                                 exchange.setException(new RejectedExecutionException("Redelivery not allowed while stopping"));
                                 // mark the exchange as redelivery exhausted so the failure processor / dead letter channel can process the exchange
-                                exchange.adapt(ExtendedExchange.class).setRedeliveryExhausted(true);
+                                exchange.getExchangeExtension().setRedeliveryExhausted(true);
                                 // jump to start of loop which then detects that we are failed and exhausted
                                 reactiveExecutor.schedule(this);
                             } else {
@@ -1121,7 +1116,7 @@ public abstract class RedeliveryErrorHandler extends ErrorHandlerSupport
                 exchange.getIn().removeHeader(Exchange.REDELIVERED);
                 exchange.getIn().removeHeader(Exchange.REDELIVERY_COUNTER);
                 exchange.getIn().removeHeader(Exchange.REDELIVERY_MAX_COUNTER);
-                exchange.adapt(ExtendedExchange.class).setRedeliveryExhausted(false);
+                exchange.getExchangeExtension().setRedeliveryExhausted(false);
 
                 // and remove traces of rollback only and uow exhausted markers
                 exchange.setRollbackOnly(false);
@@ -1276,16 +1271,15 @@ public abstract class RedeliveryErrorHandler extends ErrorHandlerSupport
                 final Exchange exchange, final boolean isDeadLetterChannel,
                 final boolean shouldHandle, final boolean shouldContinue) {
 
-            ExtendedExchange ee = (ExtendedExchange) exchange;
             Exception newException = exchange.getException();
 
             // we could not process the exchange so we let the failure processor handled it
             ExchangeHelper.setFailureHandled(exchange);
 
             // honor if already set a handling
-            boolean alreadySet = ee.isErrorHandlerHandledSet();
+            boolean alreadySet = exchange.getExchangeExtension().isErrorHandlerHandledSet();
             if (alreadySet) {
-                boolean handled = ee.isErrorHandlerHandled();
+                boolean handled = exchange.getExchangeExtension().isErrorHandlerHandled();
                 LOG.trace("This exchange has already been marked for handling: {}", handled);
                 if (!handled) {
                     // exception not handled, put exception back in the exchange
@@ -1304,7 +1298,7 @@ public abstract class RedeliveryErrorHandler extends ErrorHandlerSupport
                 prepareExchangeForContinue(exchange, isDeadLetterChannel);
             } else if (shouldHandle) {
                 LOG.trace("This exchange is handled so its marked as not failed: {}", exchange);
-                ee.setErrorHandlerHandled(true);
+                exchange.getExchangeExtension().setErrorHandlerHandled(true);
             } else {
                 // okay the redelivery policy are not explicit set to true, so we should allow to check for some
                 // special situations when using dead letter channel
@@ -1331,7 +1325,7 @@ public abstract class RedeliveryErrorHandler extends ErrorHandlerSupport
 
                     if (handled) {
                         LOG.trace("This exchange is handled so its marked as not failed: {}", exchange);
-                        ee.setErrorHandlerHandled(true);
+                        exchange.getExchangeExtension().setErrorHandlerHandled(true);
                         return;
                     }
                 }
@@ -1342,18 +1336,16 @@ public abstract class RedeliveryErrorHandler extends ErrorHandlerSupport
         }
 
         private void prepareExchangeAfterFailureNotHandled(Exchange exchange) {
-            ExtendedExchange ee = (ExtendedExchange) exchange;
-
-            LOG.trace("This exchange is not handled or continued so its marked as failed: {}", ee);
+            LOG.trace("This exchange is not handled or continued so its marked as failed: {}", exchange);
             // exception not handled, put exception back in the exchange
-            ee.setErrorHandlerHandled(false);
-            ee.setException(exchange.getProperty(ExchangePropertyKey.EXCEPTION_CAUGHT, Exception.class));
+            exchange.getExchangeExtension().setErrorHandlerHandled(false);
+            exchange.setException(exchange.getProperty(ExchangePropertyKey.EXCEPTION_CAUGHT, Exception.class));
             // and put failure endpoint back as well
-            ee.setProperty(ExchangePropertyKey.FAILURE_ENDPOINT, ee.getProperty(ExchangePropertyKey.TO_ENDPOINT));
+            exchange.setProperty(ExchangePropertyKey.FAILURE_ENDPOINT, exchange.getProperty(ExchangePropertyKey.TO_ENDPOINT));
             // and store the route id so we know in which route we failed
-            String routeId = ExchangeHelper.getAtRouteId(ee);
+            String routeId = ExchangeHelper.getAtRouteId(exchange);
             if (routeId != null) {
-                ee.setProperty(ExchangePropertyKey.FAILURE_ROUTE_ID, routeId);
+                exchange.setProperty(ExchangePropertyKey.FAILURE_ROUTE_ID, routeId);
             }
         }
 


[camel] 09/23: CAMEL-15105: rework handling the unit of work

Posted by or...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

orpiske pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/camel.git

commit 57d5f57077add6e71884e26e08c1fea9528d3bd7
Author: Otavio Rodolfo Piske <an...@gmail.com>
AuthorDate: Wed Nov 23 09:11:11 2022 +0100

    CAMEL-15105: rework handling the unit of work
---
 .../src/main/java/org/apache/camel/component/hdfs/HdfsConsumer.java | 3 +--
 .../org/apache/camel/component/jetty/CamelContinuationServlet.java  | 4 +---
 .../microprofile/faulttolerance/FaultToleranceProcessor.java        | 2 +-
 .../apache/camel/component/resilience4j/ResilienceProcessor.java    | 2 +-
 .../java/org/apache/camel/impl/engine/CamelInternalProcessor.java   | 6 ++----
 .../main/java/org/apache/camel/impl/engine/DefaultUnitOfWork.java   | 3 +--
 .../org/apache/camel/converter/stream/CachedOutputStreamTest.java   | 3 +--
 .../java/org/apache/camel/support/EventDrivenPollingConsumer.java   | 2 +-
 8 files changed, 9 insertions(+), 16 deletions(-)

diff --git a/components/camel-hdfs/src/main/java/org/apache/camel/component/hdfs/HdfsConsumer.java b/components/camel-hdfs/src/main/java/org/apache/camel/component/hdfs/HdfsConsumer.java
index 5c909c56021..ba7f5dfc9b2 100644
--- a/components/camel-hdfs/src/main/java/org/apache/camel/component/hdfs/HdfsConsumer.java
+++ b/components/camel-hdfs/src/main/java/org/apache/camel/component/hdfs/HdfsConsumer.java
@@ -30,7 +30,6 @@ import javax.security.auth.login.Configuration;
 
 import org.apache.camel.Exchange;
 import org.apache.camel.ExchangePropertyKey;
-import org.apache.camel.ExtendedExchange;
 import org.apache.camel.Message;
 import org.apache.camel.Processor;
 import org.apache.camel.RuntimeCamelException;
@@ -251,7 +250,7 @@ public final class HdfsConsumer extends ScheduledPollConsumer {
 
     protected void updateNewExchange(Exchange exchange, int index, HdfsInputStream hdfsFile) {
         // do not share unit of work
-        exchange.adapt(ExtendedExchange.class).setUnitOfWork(null);
+        exchange.getExchangeExtension().setUnitOfWork(null);
 
         exchange.setProperty(ExchangePropertyKey.SPLIT_INDEX, index);
 
diff --git a/components/camel-jetty-common/src/main/java/org/apache/camel/component/jetty/CamelContinuationServlet.java b/components/camel-jetty-common/src/main/java/org/apache/camel/component/jetty/CamelContinuationServlet.java
index c4fece46b23..82f1f428de6 100644
--- a/components/camel-jetty-common/src/main/java/org/apache/camel/component/jetty/CamelContinuationServlet.java
+++ b/components/camel-jetty-common/src/main/java/org/apache/camel/component/jetty/CamelContinuationServlet.java
@@ -33,7 +33,6 @@ import jakarta.servlet.http.HttpServletResponse;
 import org.apache.camel.AsyncCallback;
 import org.apache.camel.Exchange;
 import org.apache.camel.ExchangePattern;
-import org.apache.camel.ExtendedExchange;
 import org.apache.camel.Message;
 import org.apache.camel.http.common.CamelServlet;
 import org.apache.camel.http.common.HttpCommonEndpoint;
@@ -239,8 +238,7 @@ public class CamelContinuationServlet extends CamelServlet {
                 }
             } else if (uow.onPrepare(exchange)) {
                 // need to re-attach uow
-                ExtendedExchange ee = (ExtendedExchange) exchange;
-                ee.setUnitOfWork(uow);
+                exchange.getExchangeExtension().setUnitOfWork(uow);
             }
 
             ClassLoader oldTccl = overrideTccl(exchange);
diff --git a/components/camel-microprofile/camel-microprofile-fault-tolerance/src/main/java/org/apache/camel/component/microprofile/faulttolerance/FaultToleranceProcessor.java b/components/camel-microprofile/camel-microprofile-fault-tolerance/src/main/java/org/apache/camel/component/microprofile/faulttolerance/FaultToleranceProcessor.java
index 8ccaca4bab2..6c148e068ea 100644
--- a/components/camel-microprofile/camel-microprofile-fault-tolerance/src/main/java/org/apache/camel/component/microprofile/faulttolerance/FaultToleranceProcessor.java
+++ b/components/camel-microprofile/camel-microprofile-fault-tolerance/src/main/java/org/apache/camel/component/microprofile/faulttolerance/FaultToleranceProcessor.java
@@ -445,7 +445,7 @@ public class FaultToleranceProcessor extends AsyncProcessorSupport
                 } else {
                     // prepare uow on copy
                     uow = copy.getContext().adapt(ExtendedCamelContext.class).getUnitOfWorkFactory().createUnitOfWork(copy);
-                    copy.adapt(ExtendedExchange.class).setUnitOfWork(uow);
+                    copy.getExchangeExtension().setUnitOfWork(uow);
                     // the copy must be starting from the route where its copied from
                     Route route = ExchangeHelper.getRoute(exchange);
                     if (route != null) {
diff --git a/components/camel-resilience4j/src/main/java/org/apache/camel/component/resilience4j/ResilienceProcessor.java b/components/camel-resilience4j/src/main/java/org/apache/camel/component/resilience4j/ResilienceProcessor.java
index 04d755d1e07..83234a6b165 100644
--- a/components/camel-resilience4j/src/main/java/org/apache/camel/component/resilience4j/ResilienceProcessor.java
+++ b/components/camel-resilience4j/src/main/java/org/apache/camel/component/resilience4j/ResilienceProcessor.java
@@ -526,7 +526,7 @@ public class ResilienceProcessor extends AsyncProcessorSupport
             } else {
                 // prepare uow on copy
                 uow = copy.getContext().adapt(ExtendedCamelContext.class).getUnitOfWorkFactory().createUnitOfWork(copy);
-                copy.adapt(ExtendedExchange.class).setUnitOfWork(uow);
+                copy.getExchangeExtension().setUnitOfWork(uow);
                 // the copy must be starting from the route where its copied from
                 Route route = ExchangeHelper.getRoute(exchange);
                 if (route != null) {
diff --git a/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/CamelInternalProcessor.java b/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/CamelInternalProcessor.java
index 7f9630868bf..ff2e6c51067 100644
--- a/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/CamelInternalProcessor.java
+++ b/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/CamelInternalProcessor.java
@@ -782,15 +782,13 @@ public class CamelInternalProcessor extends DelegateAsyncProcessor implements In
                 // If there is no existing UoW, then we should start one and
                 // terminate it once processing is completed for the exchange.
                 created = createUnitOfWork(exchange);
-                ExtendedExchange ee = (ExtendedExchange) exchange;
-                ee.setUnitOfWork(created);
+                exchange.getExchangeExtension().setUnitOfWork(created);
                 uow = created;
             } else {
                 // reuse existing exchange
                 if (uow.onPrepare(exchange)) {
                     // need to re-attach uow
-                    ExtendedExchange ee = (ExtendedExchange) exchange;
-                    ee.setUnitOfWork(uow);
+                    exchange.getExchangeExtension().setUnitOfWork(uow);
                     // we are prepared for reuse and can regard it as-if we created the unit of work
                     // so the after method knows that this is the outer bounds and should done the unit of work
                     created = uow;
diff --git a/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/DefaultUnitOfWork.java b/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/DefaultUnitOfWork.java
index 5ddfd782329..3c6cb7af9d6 100644
--- a/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/DefaultUnitOfWork.java
+++ b/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/DefaultUnitOfWork.java
@@ -275,8 +275,7 @@ public class DefaultUnitOfWork implements UnitOfWork {
     protected void onDone() {
         // MUST clear and set uow to null on exchange after done
         // in case the same exchange is manually reused by Camel end users (should happen seldom)
-        ExtendedExchange ee = (ExtendedExchange) exchange;
-        ee.setUnitOfWork(null);
+        exchange.getExchangeExtension().setUnitOfWork(null);
     }
 
     @Override
diff --git a/core/camel-core/src/test/java/org/apache/camel/converter/stream/CachedOutputStreamTest.java b/core/camel-core/src/test/java/org/apache/camel/converter/stream/CachedOutputStreamTest.java
index 916d9c49e46..0b13f65e153 100644
--- a/core/camel-core/src/test/java/org/apache/camel/converter/stream/CachedOutputStreamTest.java
+++ b/core/camel-core/src/test/java/org/apache/camel/converter/stream/CachedOutputStreamTest.java
@@ -28,7 +28,6 @@ import java.util.StringJoiner;
 import org.apache.camel.CamelContext;
 import org.apache.camel.ContextTestSupport;
 import org.apache.camel.Exchange;
-import org.apache.camel.ExtendedExchange;
 import org.apache.camel.StreamCache;
 import org.apache.camel.converter.IOConverter;
 import org.apache.camel.impl.engine.DefaultUnitOfWork;
@@ -66,7 +65,7 @@ public class CachedOutputStreamTest extends ContextTestSupport {
 
         exchange = new DefaultExchange(context);
         UnitOfWork uow = new DefaultUnitOfWork(exchange);
-        exchange.adapt(ExtendedExchange.class).setUnitOfWork(uow);
+        exchange.getExchangeExtension().setUnitOfWork(uow);
     }
 
     @Override
diff --git a/core/camel-support/src/main/java/org/apache/camel/support/EventDrivenPollingConsumer.java b/core/camel-support/src/main/java/org/apache/camel/support/EventDrivenPollingConsumer.java
index 620b98fbe52..55ab8afbb6e 100644
--- a/core/camel-support/src/main/java/org/apache/camel/support/EventDrivenPollingConsumer.java
+++ b/core/camel-support/src/main/java/org/apache/camel/support/EventDrivenPollingConsumer.java
@@ -213,7 +213,7 @@ public class EventDrivenPollingConsumer extends PollingConsumerSupport implement
         // we want the copy to have an uow
         UnitOfWork uow = getEndpoint().getCamelContext().adapt(ExtendedCamelContext.class).getUnitOfWorkFactory()
                 .createUnitOfWork(copy);
-        copy.adapt(ExtendedExchange.class).setUnitOfWork(uow);
+        copy.getExchangeExtension().setUnitOfWork(uow);
 
         return copy;
     }


[camel] 15/23: CAMEL-15105: adapt DefaultNettyHttpBinding to the new extension interface

Posted by or...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

orpiske pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/camel.git

commit 44e139333aed5324badc83236712d2b132839118
Author: Otavio Rodolfo Piske <an...@gmail.com>
AuthorDate: Tue Nov 22 18:35:24 2022 +0100

    CAMEL-15105: adapt DefaultNettyHttpBinding to the new extension interface
---
 .../apache/camel/component/netty/http/DefaultNettyHttpBinding.java   | 5 ++---
 1 file changed, 2 insertions(+), 3 deletions(-)

diff --git a/components/camel-netty-http/src/main/java/org/apache/camel/component/netty/http/DefaultNettyHttpBinding.java b/components/camel-netty-http/src/main/java/org/apache/camel/component/netty/http/DefaultNettyHttpBinding.java
index b1e949593ab..4d8fbd93b7a 100644
--- a/components/camel-netty-http/src/main/java/org/apache/camel/component/netty/http/DefaultNettyHttpBinding.java
+++ b/components/camel-netty-http/src/main/java/org/apache/camel/component/netty/http/DefaultNettyHttpBinding.java
@@ -46,7 +46,6 @@ import io.netty.handler.codec.http.HttpResponseStatus;
 import io.netty.handler.codec.http.HttpVersion;
 import io.netty.util.ReferenceCountUtil;
 import org.apache.camel.Exchange;
-import org.apache.camel.ExtendedExchange;
 import org.apache.camel.Message;
 import org.apache.camel.RuntimeCamelException;
 import org.apache.camel.TypeConverter;
@@ -104,7 +103,7 @@ public class DefaultNettyHttpBinding implements NettyHttpBinding, Cloneable {
             // for proxy use case pass the request body buffer directly to the response to avoid additional processing
             // we need to retain it so that the request can be released and we can keep the content
             answer.setBody(request.content().retain());
-            answer.getExchange().adapt(ExtendedExchange.class).setStreamCacheDisabled(true);
+            answer.getExchange().getExchangeExtension().setStreamCacheDisabled(true);
             exchange.getExchangeExtension().addOnCompletion(new SynchronizationAdapter() {
                 @Override
                 public void onDone(Exchange exchange) {
@@ -337,7 +336,7 @@ public class DefaultNettyHttpBinding implements NettyHttpBinding, Cloneable {
             // keep the body as is, and use type converters
             answer.setBody(response.content());
             // turn off stream cache as we use the raw body as-is
-            answer.getExchange().adapt(ExtendedExchange.class).setStreamCacheDisabled(true);
+            answer.getExchange().getExchangeExtension().setStreamCacheDisabled(true);
         } else {
             // stores as byte array as the netty ByteBuf will be freed when the producer is done, and then we can no longer access the message body
             response.retain();


[camel] 06/23: CAMEL-15105: rework handoverCompletions in AbstractExchange

Posted by or...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

orpiske pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/camel.git

commit 812786f9d92ecc3d514cc43cca0b32a2b1988c1f
Author: Otavio Rodolfo Piske <an...@gmail.com>
AuthorDate: Tue Nov 22 17:45:34 2022 +0100

    CAMEL-15105: rework handoverCompletions in AbstractExchange
---
 .../src/main/java/org/apache/camel/support/AbstractExchange.java        | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/core/camel-support/src/main/java/org/apache/camel/support/AbstractExchange.java b/core/camel-support/src/main/java/org/apache/camel/support/AbstractExchange.java
index 7b1a48aa85f..c1c9bd43016 100644
--- a/core/camel-support/src/main/java/org/apache/camel/support/AbstractExchange.java
+++ b/core/camel-support/src/main/java/org/apache/camel/support/AbstractExchange.java
@@ -771,7 +771,7 @@ class AbstractExchange implements ExtendedExchange {
     public void handoverCompletions(Exchange target) {
         if (onCompletions != null) {
             for (Synchronization onCompletion : onCompletions) {
-                target.adapt(ExtendedExchange.class).addOnCompletion(onCompletion);
+                target.getExchangeExtension().addOnCompletion(onCompletion);
             }
             // cleanup the temporary on completion list as they have been handed over
             onCompletions.clear();


[camel] 23/23: CAMEL-15105: remove unnecessary adapt to Exchange

Posted by or...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

orpiske pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/camel.git

commit a91ba7e68ed3d11638b45e3570a7adc899dd55c3
Author: Otavio Rodolfo Piske <an...@gmail.com>
AuthorDate: Tue Feb 14 09:06:37 2023 +0100

    CAMEL-15105: remove unnecessary adapt to Exchange
---
 .../main/java/org/apache/camel/support/builder/ExpressionBuilder.java   | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/core/camel-support/src/main/java/org/apache/camel/support/builder/ExpressionBuilder.java b/core/camel-support/src/main/java/org/apache/camel/support/builder/ExpressionBuilder.java
index 96de5b5e1c4..73b4b20cea3 100644
--- a/core/camel-support/src/main/java/org/apache/camel/support/builder/ExpressionBuilder.java
+++ b/core/camel-support/src/main/java/org/apache/camel/support/builder/ExpressionBuilder.java
@@ -837,7 +837,7 @@ public class ExpressionBuilder {
             @Override
             public Object evaluate(Exchange exchange) {
                 if (enabled) {
-                    UnitOfWork uow = exchange.adapt(Exchange.class).getUnitOfWork();
+                    UnitOfWork uow = exchange.getUnitOfWork();
                     if (uow != null) {
                         Message msg = uow.getOriginalInMessage();
                         if (msg != null) {


[camel] 18/23: CAMEL-15105: adapt and cleanup camel-components to the new extension interface

Posted by or...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

orpiske pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/camel.git

commit a3c41472a7db347ff2071ecec898cb9a57a3b98e
Author: Otavio Rodolfo Piske <an...@gmail.com>
AuthorDate: Tue Nov 22 18:41:22 2022 +0100

    CAMEL-15105: adapt and cleanup camel-components to the new extension interface
---
 .../camel/attachment/DefaultAttachmentMessage.java | 31 +++++++++++-----------
 .../aggregate/cassandra/CassandraCamelCodec.java   |  3 +--
 .../language/csimple/joor/OriginalSimpleTest.java  | 10 +++++--
 .../component/directvm/DirectVmProcessor.java      |  1 -
 .../component/disruptor/DisruptorProducer.java     |  1 -
 .../org/apache/camel/component/jpa/JpaHelper.java  |  3 +--
 .../faulttolerance/FaultToleranceProcessor.java    |  3 +--
 .../component/netty/http/NettyHttpProducer.java    |  3 +--
 .../apache/camel/pgevent/PgEventConsumerTest.java  |  8 +++---
 .../http/vertx/VertxPlatformHttpConsumer.java      |  3 +--
 .../http/JettyCustomPlatformHttpConsumer.java      |  3 +--
 .../apache/camel/component/seda/SedaConsumer.java  |  3 +--
 .../spring/ws/SpringWebserviceConsumer.java        |  3 +--
 .../aggregate/tarfile/TarAggregationStrategy.java  |  3 +--
 .../aggregate/zipfile/ZipAggregationStrategy.java  |  3 +--
 .../jetty/JettySimulateFailoverRoundRobinTest.java |  1 -
 16 files changed, 38 insertions(+), 44 deletions(-)

diff --git a/components/camel-attachments/src/main/java/org/apache/camel/attachment/DefaultAttachmentMessage.java b/components/camel-attachments/src/main/java/org/apache/camel/attachment/DefaultAttachmentMessage.java
index 37f6c2ba202..665b3d0bacb 100644
--- a/components/camel-attachments/src/main/java/org/apache/camel/attachment/DefaultAttachmentMessage.java
+++ b/components/camel-attachments/src/main/java/org/apache/camel/attachment/DefaultAttachmentMessage.java
@@ -24,7 +24,6 @@ import java.util.function.Supplier;
 import jakarta.activation.DataHandler;
 
 import org.apache.camel.Exchange;
-import org.apache.camel.ExtendedExchange;
 import org.apache.camel.InvalidPayloadException;
 import org.apache.camel.Message;
 
@@ -37,11 +36,11 @@ public final class DefaultAttachmentMessage implements AttachmentMessage {
     private static final String ATTACHMENT_OBJECTS = "CamelAttachmentObjects";
 
     private final Message delegate;
-    private final ExtendedExchange extendedExchange;
+    private final Exchange exchange;
 
     public DefaultAttachmentMessage(Message delegate) {
         this.delegate = delegate;
-        this.extendedExchange = delegate.getExchange().adapt(ExtendedExchange.class);
+        this.exchange = delegate.getExchange();
     }
 
     @Override
@@ -187,7 +186,7 @@ public final class DefaultAttachmentMessage implements AttachmentMessage {
     @Override
     @SuppressWarnings("unchecked")
     public DataHandler getAttachment(String id) {
-        AttachmentMap map = extendedExchange.getSafeCopyProperty(ATTACHMENT_OBJECTS, AttachmentMap.class);
+        AttachmentMap map = exchange.getExchangeExtension().getSafeCopyProperty(ATTACHMENT_OBJECTS, AttachmentMap.class);
         if (map != null) {
             Attachment att = map.get(id);
             if (att != null) {
@@ -200,7 +199,7 @@ public final class DefaultAttachmentMessage implements AttachmentMessage {
     @Override
     @SuppressWarnings("unchecked")
     public Attachment getAttachmentObject(String id) {
-        AttachmentMap map = extendedExchange.getSafeCopyProperty(ATTACHMENT_OBJECTS, AttachmentMap.class);
+        AttachmentMap map = exchange.getExchangeExtension().getSafeCopyProperty(ATTACHMENT_OBJECTS, AttachmentMap.class);
         if (map != null) {
             return map.get(id);
         }
@@ -210,7 +209,7 @@ public final class DefaultAttachmentMessage implements AttachmentMessage {
     @Override
     @SuppressWarnings("unchecked")
     public Set<String> getAttachmentNames() {
-        AttachmentMap map = extendedExchange.getSafeCopyProperty(ATTACHMENT_OBJECTS, AttachmentMap.class);
+        AttachmentMap map = exchange.getExchangeExtension().getSafeCopyProperty(ATTACHMENT_OBJECTS, AttachmentMap.class);
         if (map != null) {
             return map.keySet();
         }
@@ -220,7 +219,7 @@ public final class DefaultAttachmentMessage implements AttachmentMessage {
     @Override
     @SuppressWarnings("unchecked")
     public void removeAttachment(String id) {
-        AttachmentMap map = extendedExchange.getSafeCopyProperty(ATTACHMENT_OBJECTS, AttachmentMap.class);
+        AttachmentMap map = exchange.getExchangeExtension().getSafeCopyProperty(ATTACHMENT_OBJECTS, AttachmentMap.class);
         if (map != null) {
             map.remove(id);
         }
@@ -229,10 +228,10 @@ public final class DefaultAttachmentMessage implements AttachmentMessage {
     @Override
     @SuppressWarnings("unchecked")
     public void addAttachment(String id, DataHandler content) {
-        AttachmentMap map = extendedExchange.getSafeCopyProperty(ATTACHMENT_OBJECTS, AttachmentMap.class);
+        AttachmentMap map = exchange.getExchangeExtension().getSafeCopyProperty(ATTACHMENT_OBJECTS, AttachmentMap.class);
         if (map == null) {
             map = new AttachmentMap();
-            extendedExchange.setSafeCopyProperty(ATTACHMENT_OBJECTS, map);
+            exchange.getExchangeExtension().setSafeCopyProperty(ATTACHMENT_OBJECTS, map);
         }
         map.put(id, new DefaultAttachment(content));
     }
@@ -240,10 +239,10 @@ public final class DefaultAttachmentMessage implements AttachmentMessage {
     @Override
     @SuppressWarnings("unchecked")
     public void addAttachmentObject(String id, Attachment content) {
-        AttachmentMap map = extendedExchange.getSafeCopyProperty(ATTACHMENT_OBJECTS, AttachmentMap.class);
+        AttachmentMap map = exchange.getExchangeExtension().getSafeCopyProperty(ATTACHMENT_OBJECTS, AttachmentMap.class);
         if (map == null) {
             map = new AttachmentMap();
-            extendedExchange.setSafeCopyProperty(ATTACHMENT_OBJECTS, map);
+            exchange.getExchangeExtension().setSafeCopyProperty(ATTACHMENT_OBJECTS, map);
         }
         map.put(id, content);
     }
@@ -251,7 +250,7 @@ public final class DefaultAttachmentMessage implements AttachmentMessage {
     @Override
     @SuppressWarnings("unchecked")
     public Map<String, DataHandler> getAttachments() {
-        Map<String, Attachment> map = extendedExchange.getSafeCopyProperty(ATTACHMENT_OBJECTS, Map.class);
+        Map<String, Attachment> map = exchange.getExchangeExtension().getSafeCopyProperty(ATTACHMENT_OBJECTS, Map.class);
         if (map != null) {
             Map<String, DataHandler> answer = new LinkedHashMap<>();
             map.forEach((id, att) -> answer.put(id, att.getDataHandler()));
@@ -263,27 +262,27 @@ public final class DefaultAttachmentMessage implements AttachmentMessage {
     @Override
     @SuppressWarnings("unchecked")
     public Map<String, Attachment> getAttachmentObjects() {
-        return extendedExchange.getSafeCopyProperty(ATTACHMENT_OBJECTS, Map.class);
+        return exchange.getExchangeExtension().getSafeCopyProperty(ATTACHMENT_OBJECTS, Map.class);
     }
 
     @Override
     public void setAttachments(Map<String, DataHandler> attachments) {
         AttachmentMap map = new AttachmentMap();
         attachments.forEach((id, dh) -> map.put(id, new DefaultAttachment(dh)));
-        extendedExchange.setSafeCopyProperty(ATTACHMENT_OBJECTS, map);
+        exchange.getExchangeExtension().setSafeCopyProperty(ATTACHMENT_OBJECTS, map);
     }
 
     @Override
     public void setAttachmentObjects(Map<String, Attachment> attachments) {
         AttachmentMap map = new AttachmentMap();
         map.putAll(attachments);
-        extendedExchange.setSafeCopyProperty(ATTACHMENT_OBJECTS, map);
+        exchange.getExchangeExtension().setSafeCopyProperty(ATTACHMENT_OBJECTS, map);
     }
 
     @Override
     @SuppressWarnings("unchecked")
     public boolean hasAttachments() {
-        AttachmentMap map = extendedExchange.getSafeCopyProperty(ATTACHMENT_OBJECTS, AttachmentMap.class);
+        AttachmentMap map = exchange.getExchangeExtension().getSafeCopyProperty(ATTACHMENT_OBJECTS, AttachmentMap.class);
         return map != null && !map.isEmpty();
     }
 
diff --git a/components/camel-cassandraql/src/main/java/org/apache/camel/processor/aggregate/cassandra/CassandraCamelCodec.java b/components/camel-cassandraql/src/main/java/org/apache/camel/processor/aggregate/cassandra/CassandraCamelCodec.java
index b2bcfbf0b17..a4332a718a6 100644
--- a/components/camel-cassandraql/src/main/java/org/apache/camel/processor/aggregate/cassandra/CassandraCamelCodec.java
+++ b/components/camel-cassandraql/src/main/java/org/apache/camel/processor/aggregate/cassandra/CassandraCamelCodec.java
@@ -27,7 +27,6 @@ import org.apache.camel.CamelContext;
 import org.apache.camel.Endpoint;
 import org.apache.camel.Exchange;
 import org.apache.camel.ExchangePropertyKey;
-import org.apache.camel.ExtendedExchange;
 import org.apache.camel.support.DefaultExchange;
 import org.apache.camel.support.DefaultExchangeHolder;
 import org.apache.camel.util.ClassLoadingAwareObjectInputStream;
@@ -73,7 +72,7 @@ public class CassandraCamelCodec {
         if (fromEndpointUri != null) {
             Endpoint fromEndpoint = camelContext.hasEndpoint(fromEndpointUri);
             if (fromEndpoint != null) {
-                answer.adapt(ExtendedExchange.class).setFromEndpoint(fromEndpoint);
+                answer.getExchangeExtension().setFromEndpoint(fromEndpoint);
             }
         }
         return answer;
diff --git a/components/camel-csimple-joor/src/test/java/org/apache/camel/language/csimple/joor/OriginalSimpleTest.java b/components/camel-csimple-joor/src/test/java/org/apache/camel/language/csimple/joor/OriginalSimpleTest.java
index e3fa5c63658..deac6f39f7b 100644
--- a/components/camel-csimple-joor/src/test/java/org/apache/camel/language/csimple/joor/OriginalSimpleTest.java
+++ b/components/camel-csimple-joor/src/test/java/org/apache/camel/language/csimple/joor/OriginalSimpleTest.java
@@ -34,7 +34,6 @@ import org.apache.camel.ExchangePattern;
 import org.apache.camel.Expression;
 import org.apache.camel.ExpressionEvaluationException;
 import org.apache.camel.ExpressionIllegalSyntaxException;
-import org.apache.camel.ExtendedExchange;
 import org.apache.camel.InvalidPayloadException;
 import org.apache.camel.Predicate;
 import org.apache.camel.component.bean.MethodNotFoundException;
@@ -49,7 +48,14 @@ import org.junit.jupiter.api.Test;
 
 import static org.apache.camel.test.junit5.TestSupport.assertIsInstanceOf;
 import static org.apache.camel.test.junit5.TestSupport.getJavaMajorVersion;
-import static org.junit.jupiter.api.Assertions.*;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertFalse;
+import static org.junit.jupiter.api.Assertions.assertNotNull;
+import static org.junit.jupiter.api.Assertions.assertNull;
+import static org.junit.jupiter.api.Assertions.assertSame;
+import static org.junit.jupiter.api.Assertions.assertThrows;
+import static org.junit.jupiter.api.Assertions.assertTrue;
+import static org.junit.jupiter.api.Assertions.fail;
 
 @Disabled
 public class OriginalSimpleTest extends LanguageTestSupport {
diff --git a/components/camel-directvm/src/main/java/org/apache/camel/component/directvm/DirectVmProcessor.java b/components/camel-directvm/src/main/java/org/apache/camel/component/directvm/DirectVmProcessor.java
index 0d6c21a0a81..765af202daa 100644
--- a/components/camel-directvm/src/main/java/org/apache/camel/component/directvm/DirectVmProcessor.java
+++ b/components/camel-directvm/src/main/java/org/apache/camel/component/directvm/DirectVmProcessor.java
@@ -19,7 +19,6 @@ package org.apache.camel.component.directvm;
 import org.apache.camel.AsyncCallback;
 import org.apache.camel.Exchange;
 import org.apache.camel.ExchangePropertyKey;
-import org.apache.camel.ExtendedExchange;
 import org.apache.camel.Processor;
 import org.apache.camel.support.ExchangeHelper;
 import org.apache.camel.support.processor.DelegateAsyncProcessor;
diff --git a/components/camel-disruptor/src/main/java/org/apache/camel/component/disruptor/DisruptorProducer.java b/components/camel-disruptor/src/main/java/org/apache/camel/component/disruptor/DisruptorProducer.java
index b3533bdd1ee..49a41a59132 100644
--- a/components/camel-disruptor/src/main/java/org/apache/camel/component/disruptor/DisruptorProducer.java
+++ b/components/camel-disruptor/src/main/java/org/apache/camel/component/disruptor/DisruptorProducer.java
@@ -23,7 +23,6 @@ import com.lmax.disruptor.InsufficientCapacityException;
 import org.apache.camel.AsyncCallback;
 import org.apache.camel.Exchange;
 import org.apache.camel.ExchangeTimedOutException;
-import org.apache.camel.ExtendedExchange;
 import org.apache.camel.WaitForTaskToComplete;
 import org.apache.camel.support.DefaultAsyncProducer;
 import org.apache.camel.support.ExchangeHelper;
diff --git a/components/camel-jpa/src/main/java/org/apache/camel/component/jpa/JpaHelper.java b/components/camel-jpa/src/main/java/org/apache/camel/component/jpa/JpaHelper.java
index 8b796e55681..26a49a83ed5 100644
--- a/components/camel-jpa/src/main/java/org/apache/camel/component/jpa/JpaHelper.java
+++ b/components/camel-jpa/src/main/java/org/apache/camel/component/jpa/JpaHelper.java
@@ -23,7 +23,6 @@ import jakarta.persistence.EntityManager;
 import jakarta.persistence.EntityManagerFactory;
 
 import org.apache.camel.Exchange;
-import org.apache.camel.ExtendedExchange;
 import org.springframework.orm.jpa.SharedEntityManagerCreator;
 
 /**
@@ -113,7 +112,7 @@ public final class JpaHelper {
                     data.put(getKey(entityManagerFactory), em);
                 }
             }
-            exchange.adapt(ExtendedExchange.class).addOnCompletion(new JpaCloseEntityManagerOnCompletion(em));
+            exchange.getExchangeExtension().addOnCompletion(new JpaCloseEntityManagerOnCompletion(em));
         }
         return em;
     }
diff --git a/components/camel-microprofile/camel-microprofile-fault-tolerance/src/main/java/org/apache/camel/component/microprofile/faulttolerance/FaultToleranceProcessor.java b/components/camel-microprofile/camel-microprofile-fault-tolerance/src/main/java/org/apache/camel/component/microprofile/faulttolerance/FaultToleranceProcessor.java
index 30b8cc538d7..95dce1dbbf2 100644
--- a/components/camel-microprofile/camel-microprofile-fault-tolerance/src/main/java/org/apache/camel/component/microprofile/faulttolerance/FaultToleranceProcessor.java
+++ b/components/camel-microprofile/camel-microprofile-fault-tolerance/src/main/java/org/apache/camel/component/microprofile/faulttolerance/FaultToleranceProcessor.java
@@ -39,7 +39,6 @@ import org.apache.camel.CamelContextAware;
 import org.apache.camel.Exchange;
 import org.apache.camel.ExchangePropertyKey;
 import org.apache.camel.ExtendedCamelContext;
-import org.apache.camel.ExtendedExchange;
 import org.apache.camel.Navigate;
 import org.apache.camel.Processor;
 import org.apache.camel.Route;
@@ -431,7 +430,7 @@ public class FaultToleranceProcessor extends AsyncProcessorSupport
             Throwable cause;
 
             // turn of interruption to allow fault tolerance to process the exchange under its handling
-            exchange.adapt(ExtendedExchange.class).setInterruptable(false);
+            exchange.getExchangeExtension().setInterruptable(false);
 
             try {
                 LOG.debug("Running processor: {} with exchange: {}", processor, exchange);
diff --git a/components/camel-netty-http/src/main/java/org/apache/camel/component/netty/http/NettyHttpProducer.java b/components/camel-netty-http/src/main/java/org/apache/camel/component/netty/http/NettyHttpProducer.java
index e615b624cd9..b86108e65b6 100644
--- a/components/camel-netty-http/src/main/java/org/apache/camel/component/netty/http/NettyHttpProducer.java
+++ b/components/camel-netty-http/src/main/java/org/apache/camel/component/netty/http/NettyHttpProducer.java
@@ -27,7 +27,6 @@ import io.netty.handler.codec.http.HttpUtil;
 import io.netty.util.ReferenceCountUtil;
 import org.apache.camel.AsyncCallback;
 import org.apache.camel.Exchange;
-import org.apache.camel.ExtendedExchange;
 import org.apache.camel.component.netty.NettyConfiguration;
 import org.apache.camel.component.netty.NettyProducer;
 import org.apache.camel.http.base.cookie.CookieHandler;
@@ -80,7 +79,7 @@ public class NettyHttpProducer extends NettyProducer {
     @Override
     public boolean process(Exchange exchange, AsyncCallback callback) {
         if (getConfiguration().isDisableStreamCache() || getConfiguration().isHttpProxy()) {
-            exchange.adapt(ExtendedExchange.class).setStreamCacheDisabled(true);
+            exchange.getExchangeExtension().setStreamCacheDisabled(true);
         }
 
         return super.process(exchange, new NettyHttpProducerCallback(exchange, callback, getConfiguration()));
diff --git a/components/camel-pgevent/src/test/java/org/apache/camel/pgevent/PgEventConsumerTest.java b/components/camel-pgevent/src/test/java/org/apache/camel/pgevent/PgEventConsumerTest.java
index 196de5aa0e5..10e0f3e0afe 100644
--- a/components/camel-pgevent/src/test/java/org/apache/camel/pgevent/PgEventConsumerTest.java
+++ b/components/camel-pgevent/src/test/java/org/apache/camel/pgevent/PgEventConsumerTest.java
@@ -20,8 +20,9 @@ import java.sql.PreparedStatement;
 
 import com.impossibl.postgres.api.jdbc.PGConnection;
 import com.impossibl.postgres.jdbc.PGDataSource;
+import org.apache.camel.Exchange;
+import org.apache.camel.ExchangeExtension;
 import org.apache.camel.ExtendedCamelContext;
-import org.apache.camel.ExtendedExchange;
 import org.apache.camel.Message;
 import org.apache.camel.Processor;
 import org.apache.camel.component.pgevent.PgEventConsumer;
@@ -99,7 +100,8 @@ public class PgEventConsumerTest {
     public void testPgEventNotification() throws Exception {
         PgEventEndpoint endpoint = mock(PgEventEndpoint.class);
         Processor processor = mock(Processor.class);
-        ExtendedExchange exchange = mock(ExtendedExchange.class);
+        Exchange exchange = mock(Exchange.class);
+        ExchangeExtension exchangeExtension = mock(ExchangeExtension.class);
         Message message = mock(Message.class);
         ExtendedCamelContext ecc = mock(ExtendedCamelContext.class);
         ExchangeFactory ef = mock(ExchangeFactory.class);
@@ -109,7 +111,7 @@ public class PgEventConsumerTest {
         when(ecc.getExchangeFactory()).thenReturn(ef);
         when(ef.newExchangeFactory(any())).thenReturn(ef);
         when(ef.create(endpoint, false)).thenReturn(exchange);
-        when(exchange.adapt(ExtendedExchange.class)).thenReturn(exchange);
+        when(exchange.getExchangeExtension()).thenReturn(exchangeExtension);
         when(exchange.getIn()).thenReturn(message);
 
         PgEventConsumer consumer = new PgEventConsumer(endpoint, processor);
diff --git a/components/camel-platform-http-vertx/src/main/java/org/apache/camel/component/platform/http/vertx/VertxPlatformHttpConsumer.java b/components/camel-platform-http-vertx/src/main/java/org/apache/camel/component/platform/http/vertx/VertxPlatformHttpConsumer.java
index c9ee39a18e5..b208f597592 100644
--- a/components/camel-platform-http-vertx/src/main/java/org/apache/camel/component/platform/http/vertx/VertxPlatformHttpConsumer.java
+++ b/components/camel-platform-http-vertx/src/main/java/org/apache/camel/component/platform/http/vertx/VertxPlatformHttpConsumer.java
@@ -40,7 +40,6 @@ import io.vertx.ext.web.impl.RouteImpl;
 import org.apache.camel.Exchange;
 import org.apache.camel.ExchangePattern;
 import org.apache.camel.ExchangePropertyKey;
-import org.apache.camel.ExtendedExchange;
 import org.apache.camel.Message;
 import org.apache.camel.Processor;
 import org.apache.camel.attachment.AttachmentMessage;
@@ -184,7 +183,7 @@ public class VertxPlatformHttpConsumer extends DefaultConsumer {
         //
 
         if (getEndpoint().isHttpProxy()) {
-            exchange.adapt(ExtendedExchange.class).setStreamCacheDisabled(true);
+            exchange.getExchangeExtension().setStreamCacheDisabled(true);
             final MultiMap httpHeaders = ctx.request().headers();
             exchange.getMessage().setHeader(Exchange.HTTP_HOST, httpHeaders.get("Host"));
             exchange.getMessage().removeHeader("Proxy-Connection");
diff --git a/components/camel-platform-http/src/test/java/org/apache/camel/component/platform/http/JettyCustomPlatformHttpConsumer.java b/components/camel-platform-http/src/test/java/org/apache/camel/component/platform/http/JettyCustomPlatformHttpConsumer.java
index 4805daa320e..56de9a983be 100644
--- a/components/camel-platform-http/src/test/java/org/apache/camel/component/platform/http/JettyCustomPlatformHttpConsumer.java
+++ b/components/camel-platform-http/src/test/java/org/apache/camel/component/platform/http/JettyCustomPlatformHttpConsumer.java
@@ -27,7 +27,6 @@ import jakarta.servlet.http.HttpServletRequest;
 import jakarta.servlet.http.HttpServletResponse;
 
 import org.apache.camel.Exchange;
-import org.apache.camel.ExtendedExchange;
 import org.apache.camel.Message;
 import org.apache.camel.Processor;
 import org.apache.camel.support.CamelContextHelper;
@@ -88,7 +87,7 @@ public class JettyCustomPlatformHttpConsumer extends DefaultConsumer {
                     exchange.getMessage().setHeader(Exchange.HTTP_PORT, httpServletRequest.getServerPort());
                     exchange.getMessage().setHeader(Exchange.HTTP_PATH, httpServletRequest.getPathInfo());
                     if (getEndpoint().isHttpProxy()) {
-                        exchange.adapt(ExtendedExchange.class).setStreamCacheDisabled(true);
+                        exchange.getExchangeExtension().setStreamCacheDisabled(true);
                     }
                     createUoW(exchange);
                     getProcessor().process(exchange);
diff --git a/components/camel-seda/src/main/java/org/apache/camel/component/seda/SedaConsumer.java b/components/camel-seda/src/main/java/org/apache/camel/component/seda/SedaConsumer.java
index 74261b683df..5d4b0941fca 100644
--- a/components/camel-seda/src/main/java/org/apache/camel/component/seda/SedaConsumer.java
+++ b/components/camel-seda/src/main/java/org/apache/camel/component/seda/SedaConsumer.java
@@ -25,7 +25,6 @@ import java.util.concurrent.atomic.AtomicInteger;
 
 import org.apache.camel.AsyncProcessor;
 import org.apache.camel.Exchange;
-import org.apache.camel.ExtendedExchange;
 import org.apache.camel.Processor;
 import org.apache.camel.ShutdownRunningTask;
 import org.apache.camel.Suspendable;
@@ -252,7 +251,7 @@ public class SedaConsumer extends DefaultConsumer implements Runnable, ShutdownA
             }
 
             // handover completions, as we need to done this when the multicast is done
-            final List<Synchronization> completions = exchange.adapt(ExtendedExchange.class).handoverCompletions();
+            final List<Synchronization> completions = exchange.getExchangeExtension().handoverCompletions();
 
             // use a multicast processor to process it
             AsyncProcessor mp = getEndpoint().getConsumerMulticastProcessor();
diff --git a/components/camel-spring-ws/src/main/java/org/apache/camel/component/spring/ws/SpringWebserviceConsumer.java b/components/camel-spring-ws/src/main/java/org/apache/camel/component/spring/ws/SpringWebserviceConsumer.java
index 1961ad76d3d..7d5426ae047 100644
--- a/components/camel-spring-ws/src/main/java/org/apache/camel/component/spring/ws/SpringWebserviceConsumer.java
+++ b/components/camel-spring-ws/src/main/java/org/apache/camel/component/spring/ws/SpringWebserviceConsumer.java
@@ -28,7 +28,6 @@ import javax.xml.transform.Source;
 
 import org.apache.camel.Endpoint;
 import org.apache.camel.Exchange;
-import org.apache.camel.ExtendedExchange;
 import org.apache.camel.Message;
 import org.apache.camel.Processor;
 import org.apache.camel.attachment.DefaultAttachmentMessage;
@@ -134,7 +133,7 @@ public class SpringWebserviceConsumer extends DefaultConsumer implements Message
         // create inbound message
         WebServiceMessage request = messageContext.getRequest();
 
-        SpringWebserviceMessage swm = exchange.adapt(ExtendedExchange.class).getInOrNull(SpringWebserviceMessage.class);
+        SpringWebserviceMessage swm = exchange.getExchangeExtension().getInOrNull(SpringWebserviceMessage.class);
         if (swm == null) {
             swm = new SpringWebserviceMessage(exchange.getContext(), request);
             exchange.setIn(swm);
diff --git a/components/camel-tarfile/src/main/java/org/apache/camel/processor/aggregate/tarfile/TarAggregationStrategy.java b/components/camel-tarfile/src/main/java/org/apache/camel/processor/aggregate/tarfile/TarAggregationStrategy.java
index 0699f05b227..2a16cf79796 100644
--- a/components/camel-tarfile/src/main/java/org/apache/camel/processor/aggregate/tarfile/TarAggregationStrategy.java
+++ b/components/camel-tarfile/src/main/java/org/apache/camel/processor/aggregate/tarfile/TarAggregationStrategy.java
@@ -26,7 +26,6 @@ import java.nio.file.Files;
 
 import org.apache.camel.AggregationStrategy;
 import org.apache.camel.Exchange;
-import org.apache.camel.ExtendedExchange;
 import org.apache.camel.WrappedFile;
 import org.apache.camel.component.file.FileConsumer;
 import org.apache.camel.component.file.GenericFile;
@@ -201,7 +200,7 @@ public class TarAggregationStrategy implements AggregationStrategy {
     public void onCompletion(Exchange exchange, Exchange inputExchange) {
         // this aggregation strategy added onCompletion which we should handover when we are complete
         if (inputExchange != null) {
-            exchange.adapt(ExtendedExchange.class).handoverCompletions(inputExchange);
+            exchange.getExchangeExtension().handoverCompletions(inputExchange);
         }
     }
 
diff --git a/components/camel-zipfile/src/main/java/org/apache/camel/processor/aggregate/zipfile/ZipAggregationStrategy.java b/components/camel-zipfile/src/main/java/org/apache/camel/processor/aggregate/zipfile/ZipAggregationStrategy.java
index b13df829839..5b59f2eee7b 100644
--- a/components/camel-zipfile/src/main/java/org/apache/camel/processor/aggregate/zipfile/ZipAggregationStrategy.java
+++ b/components/camel-zipfile/src/main/java/org/apache/camel/processor/aggregate/zipfile/ZipAggregationStrategy.java
@@ -31,7 +31,6 @@ import java.util.Map;
 
 import org.apache.camel.AggregationStrategy;
 import org.apache.camel.Exchange;
-import org.apache.camel.ExtendedExchange;
 import org.apache.camel.WrappedFile;
 import org.apache.camel.component.file.FileConsumer;
 import org.apache.camel.component.file.GenericFile;
@@ -220,7 +219,7 @@ public class ZipAggregationStrategy implements AggregationStrategy {
     public void onCompletion(Exchange exchange, Exchange inputExchange) {
         // this aggregation strategy added onCompletion which we should handover when we are complete
         if (inputExchange != null) {
-            exchange.adapt(ExtendedExchange.class).handoverCompletions(inputExchange);
+            exchange.getExchangeExtension().handoverCompletions(inputExchange);
         }
     }
 
diff --git a/tests/camel-itest/src/test/java/org/apache/camel/itest/jetty/JettySimulateFailoverRoundRobinTest.java b/tests/camel-itest/src/test/java/org/apache/camel/itest/jetty/JettySimulateFailoverRoundRobinTest.java
index cf45a712593..429e954c75c 100644
--- a/tests/camel-itest/src/test/java/org/apache/camel/itest/jetty/JettySimulateFailoverRoundRobinTest.java
+++ b/tests/camel-itest/src/test/java/org/apache/camel/itest/jetty/JettySimulateFailoverRoundRobinTest.java
@@ -21,7 +21,6 @@ import java.util.Arrays;
 import java.util.List;
 
 import org.apache.camel.Exchange;
-import org.apache.camel.ExtendedExchange;
 import org.apache.camel.Processor;
 import org.apache.camel.ProducerTemplate;
 import org.apache.camel.builder.RouteBuilder;


[camel] 07/23: CAMEL-15105: rework setting history properties the camel-core code

Posted by or...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

orpiske pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/camel.git

commit dbbf0060ad910daea6af1e244f4a59e150dc2a9c
Author: Otavio Rodolfo Piske <an...@gmail.com>
AuthorDate: Wed Nov 23 13:30:04 2022 +0100

    CAMEL-15105: rework setting history properties the camel-core code
---
 .../apache/camel/impl/engine/CamelInternalProcessor.java | 16 +++++++---------
 .../camel/impl/engine/DefaultInflightRepository.java     |  3 +--
 .../impl/DefaultAsyncProcessorAwaitManagerTest.java      |  3 +--
 .../java/org/apache/camel/support/MessageHelper.java     |  4 ++--
 4 files changed, 11 insertions(+), 15 deletions(-)

diff --git a/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/CamelInternalProcessor.java b/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/CamelInternalProcessor.java
index 29f97a3840c..7f9630868bf 100644
--- a/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/CamelInternalProcessor.java
+++ b/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/CamelInternalProcessor.java
@@ -914,19 +914,17 @@ public class CamelInternalProcessor extends DelegateAsyncProcessor implements In
 
         @Override
         public String before(Exchange exchange) throws Exception {
-            ExtendedExchange ee = (ExtendedExchange) exchange;
-            ee.setHistoryNodeId(id);
-            ee.setHistoryNodeLabel(label);
-            ee.setHistoryNodeSource(source);
+            exchange.getExchangeExtension().setHistoryNodeId(id);
+            exchange.getExchangeExtension().setHistoryNodeLabel(label);
+            exchange.getExchangeExtension().setHistoryNodeSource(source);
             return null;
         }
 
         @Override
         public void after(Exchange exchange, Object data) throws Exception {
-            ExtendedExchange ee = (ExtendedExchange) exchange;
-            ee.setHistoryNodeId(null);
-            ee.setHistoryNodeLabel(null);
-            ee.setHistoryNodeSource(null);
+            exchange.getExchangeExtension().setHistoryNodeId(null);
+            exchange.getExchangeExtension().setHistoryNodeLabel(null);
+            exchange.getExchangeExtension().setHistoryNodeSource(null);
         }
 
         @Override
@@ -974,7 +972,7 @@ public class CamelInternalProcessor extends DelegateAsyncProcessor implements In
             }
             boolean failed = cause != null && ObjectHelper.getException(StreamCacheException.class, cause) != null;
             if (!failed) {
-                boolean disabled = exchange.adapt(ExtendedExchange.class).isStreamCacheDisabled();
+                boolean disabled = exchange.getExchangeExtension().isStreamCacheDisabled();
                 if (disabled) {
                     return null;
                 }
diff --git a/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/DefaultInflightRepository.java b/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/DefaultInflightRepository.java
index 9710eb178cb..6e18bde5398 100644
--- a/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/DefaultInflightRepository.java
+++ b/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/DefaultInflightRepository.java
@@ -28,7 +28,6 @@ import java.util.stream.Stream;
 
 import org.apache.camel.Exchange;
 import org.apache.camel.ExchangePropertyKey;
-import org.apache.camel.ExtendedExchange;
 import org.apache.camel.MessageHistory;
 import org.apache.camel.spi.InflightRepository;
 import org.apache.camel.support.ExchangeHelper;
@@ -256,7 +255,7 @@ public class DefaultInflightRepository extends ServiceSupport implements Infligh
         @Override
         @SuppressWarnings("unchecked")
         public String getNodeId() {
-            return exchange.adapt(ExtendedExchange.class).getHistoryNodeId();
+            return exchange.getExchangeExtension().getHistoryNodeId();
         }
 
         @Override
diff --git a/core/camel-core/src/test/java/org/apache/camel/impl/DefaultAsyncProcessorAwaitManagerTest.java b/core/camel-core/src/test/java/org/apache/camel/impl/DefaultAsyncProcessorAwaitManagerTest.java
index e2c83526643..5fe24931806 100644
--- a/core/camel-core/src/test/java/org/apache/camel/impl/DefaultAsyncProcessorAwaitManagerTest.java
+++ b/core/camel-core/src/test/java/org/apache/camel/impl/DefaultAsyncProcessorAwaitManagerTest.java
@@ -18,7 +18,6 @@ package org.apache.camel.impl;
 
 import java.util.concurrent.CountDownLatch;
 
-import org.apache.camel.ExtendedExchange;
 import org.apache.camel.impl.engine.DefaultAsyncProcessorAwaitManager;
 import org.apache.camel.spi.AsyncProcessorAwaitManager;
 import org.apache.camel.support.DefaultExchange;
@@ -76,7 +75,7 @@ public class DefaultAsyncProcessorAwaitManagerTest {
     @Test
     public void testMessageHistoryWithNotNullElements() throws Exception {
         startAsyncProcess();
-        exchange.adapt(ExtendedExchange.class).setHistoryNodeId("nodeId");
+        exchange.getExchangeExtension().setHistoryNodeId("nodeId");
         AsyncProcessorAwaitManager.AwaitThread awaitThread = defaultAsyncProcessorAwaitManager.browse().iterator().next();
         assertThat(awaitThread.getNodeId(), is("nodeId"));
         waitForEndOfAsyncProcess();
diff --git a/core/camel-support/src/main/java/org/apache/camel/support/MessageHelper.java b/core/camel-support/src/main/java/org/apache/camel/support/MessageHelper.java
index e00ce9444db..095e21b995f 100644
--- a/core/camel-support/src/main/java/org/apache/camel/support/MessageHelper.java
+++ b/core/camel-support/src/main/java/org/apache/camel/support/MessageHelper.java
@@ -728,7 +728,7 @@ public final class MessageHelper {
         if (list == null || list.isEmpty()) {
             // message history is not enabled but we can show the last processed
             // instead
-            id = exchange.adapt(ExtendedExchange.class).getHistoryNodeId();
+            id = exchange.getExchangeExtension().getHistoryNodeId();
             if (id != null) {
                 loc = exchange.adapt(ExtendedExchange.class).getHistoryNodeSource();
                 if (loc == null) {
@@ -738,7 +738,7 @@ public final class MessageHelper {
                 if (rid != null) {
                     routeId = rid;
                 }
-                label = exchange.adapt(ExtendedExchange.class).getHistoryNodeLabel();
+                label = exchange.getExchangeExtension().getHistoryNodeLabel();
                 // we need to avoid leak the sensible information here
                 // the sanitizeUri takes a very long time for very long string
                 // and the format cuts this to


[camel] 14/23: CAMEL-15105: adapt DefaultConsumerTemplate to the new extension interface

Posted by or...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

orpiske pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/camel.git

commit 7e6da1de5bb709d7046b9b4f458d9882a642d72c
Author: Otavio Rodolfo Piske <an...@gmail.com>
AuthorDate: Tue Nov 22 18:34:32 2022 +0100

    CAMEL-15105: adapt DefaultConsumerTemplate to the new extension interface
---
 .../java/org/apache/camel/impl/engine/DefaultConsumerTemplate.java     | 3 +--
 1 file changed, 1 insertion(+), 2 deletions(-)

diff --git a/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/DefaultConsumerTemplate.java b/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/DefaultConsumerTemplate.java
index e0abf0e5f68..00914f4b8e0 100644
--- a/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/DefaultConsumerTemplate.java
+++ b/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/DefaultConsumerTemplate.java
@@ -22,7 +22,6 @@ import org.apache.camel.CamelContext;
 import org.apache.camel.ConsumerTemplate;
 import org.apache.camel.Endpoint;
 import org.apache.camel.Exchange;
-import org.apache.camel.ExtendedExchange;
 import org.apache.camel.spi.ConsumerCache;
 import org.apache.camel.spi.Synchronization;
 import org.apache.camel.support.CamelContextHelper;
@@ -219,7 +218,7 @@ public class DefaultConsumerTemplate extends ServiceSupport implements ConsumerT
             }
             if (exchange.getUnitOfWork() == null) {
                 // handover completions and done them manually to ensure they are being executed
-                List<Synchronization> synchronizations = exchange.adapt(ExtendedExchange.class).handoverCompletions();
+                List<Synchronization> synchronizations = exchange.getExchangeExtension().handoverCompletions();
                 UnitOfWorkHelper.doneSynchronizations(exchange, synchronizations, LOG);
             } else {
                 // done the unit of work


[camel] 10/23: CAMEL-15105: rework redelivery handling

Posted by or...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

orpiske pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/camel.git

commit ceaffab948b9ab441b984a1fabaaf3731ba0996e
Author: Otavio Rodolfo Piske <an...@gmail.com>
AuthorDate: Tue Nov 22 18:28:49 2022 +0100

    CAMEL-15105: rework redelivery handling
---
 .../microprofile/faulttolerance/FaultToleranceProcessor.java         | 2 +-
 .../org/apache/camel/component/resilience4j/ResilienceProcessor.java | 3 +--
 .../java/org/apache/camel/impl/engine/CamelInternalProcessor.java    | 4 ++--
 .../src/main/java/org/apache/camel/processor/CatchProcessor.java     | 4 ++--
 .../src/main/java/org/apache/camel/processor/MulticastProcessor.java | 2 +-
 .../main/java/org/apache/camel/processor/OnCompletionProcessor.java  | 2 +-
 .../src/main/java/org/apache/camel/processor/PollEnricher.java       | 2 +-
 .../org/apache/camel/processor/aggregate/AggregateProcessor.java     | 5 ++---
 .../java/org/apache/camel/processor/errorhandler/NoErrorHandler.java | 3 +--
 .../apache/camel/support/BridgeExceptionHandlerToErrorHandler.java   | 3 +--
 10 files changed, 13 insertions(+), 17 deletions(-)

diff --git a/components/camel-microprofile/camel-microprofile-fault-tolerance/src/main/java/org/apache/camel/component/microprofile/faulttolerance/FaultToleranceProcessor.java b/components/camel-microprofile/camel-microprofile-fault-tolerance/src/main/java/org/apache/camel/component/microprofile/faulttolerance/FaultToleranceProcessor.java
index 6c148e068ea..30b8cc538d7 100644
--- a/components/camel-microprofile/camel-microprofile-fault-tolerance/src/main/java/org/apache/camel/component/microprofile/faulttolerance/FaultToleranceProcessor.java
+++ b/components/camel-microprofile/camel-microprofile-fault-tolerance/src/main/java/org/apache/camel/component/microprofile/faulttolerance/FaultToleranceProcessor.java
@@ -548,7 +548,7 @@ public class FaultToleranceProcessor extends AsyncProcessorSupport
             exchange.setException(null);
             // and we should not be regarded as exhausted as we are in a try ..
             // catch block
-            exchange.adapt(ExtendedExchange.class).setRedeliveryExhausted(false);
+            exchange.getExchangeExtension().setRedeliveryExhausted(false);
             // run the fallback processor
             try {
                 LOG.debug("Running fallback: {} with exchange: {}", fallbackProcessor, exchange);
diff --git a/components/camel-resilience4j/src/main/java/org/apache/camel/component/resilience4j/ResilienceProcessor.java b/components/camel-resilience4j/src/main/java/org/apache/camel/component/resilience4j/ResilienceProcessor.java
index 83234a6b165..97a8aa9a17e 100644
--- a/components/camel-resilience4j/src/main/java/org/apache/camel/component/resilience4j/ResilienceProcessor.java
+++ b/components/camel-resilience4j/src/main/java/org/apache/camel/component/resilience4j/ResilienceProcessor.java
@@ -41,7 +41,6 @@ import org.apache.camel.CamelContextAware;
 import org.apache.camel.Exchange;
 import org.apache.camel.ExchangePropertyKey;
 import org.apache.camel.ExtendedCamelContext;
-import org.apache.camel.ExtendedExchange;
 import org.apache.camel.Navigate;
 import org.apache.camel.Processor;
 import org.apache.camel.Route;
@@ -683,7 +682,7 @@ public class ResilienceProcessor extends AsyncProcessorSupport
             exchange.setException(null);
             // and we should not be regarded as exhausted as we are in a try ..
             // catch block
-            exchange.adapt(ExtendedExchange.class).setRedeliveryExhausted(false);
+            exchange.getExchangeExtension().setRedeliveryExhausted(false);
             // run the fallback processor
             try {
                 LOG.debug("Running fallback: {} with exchange: {}", fallback, exchange);
diff --git a/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/CamelInternalProcessor.java b/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/CamelInternalProcessor.java
index ff2e6c51067..05e7b3d1d17 100644
--- a/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/CamelInternalProcessor.java
+++ b/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/CamelInternalProcessor.java
@@ -961,7 +961,7 @@ public class CamelInternalProcessor extends DelegateAsyncProcessor implements In
                 exchange.setException(tce);
                 // because this is stream caching error then we cannot use redelivery as the message body is corrupt
                 // so mark as redelivery exhausted
-                exchange.adapt(ExtendedExchange.class).setRedeliveryExhausted(true);
+                exchange.getExchangeExtension().setRedeliveryExhausted(true);
             }
             // check if we somewhere failed due to a stream caching exception
             Throwable cause = exchange.getException();
@@ -987,7 +987,7 @@ public class CamelInternalProcessor extends DelegateAsyncProcessor implements In
                     exchange.setException(tce);
                     // because this is stream caching error then we cannot use redelivery as the message body is corrupt
                     // so mark as redelivery exhausted
-                    exchange.adapt(ExtendedExchange.class).setRedeliveryExhausted(true);
+                    exchange.getExchangeExtension().setRedeliveryExhausted(true);
                 }
             }
             return null;
diff --git a/core/camel-core-processor/src/main/java/org/apache/camel/processor/CatchProcessor.java b/core/camel-core-processor/src/main/java/org/apache/camel/processor/CatchProcessor.java
index b13fc20f890..64be8c6814a 100644
--- a/core/camel-core-processor/src/main/java/org/apache/camel/processor/CatchProcessor.java
+++ b/core/camel-core-processor/src/main/java/org/apache/camel/processor/CatchProcessor.java
@@ -115,7 +115,7 @@ public class CatchProcessor extends DelegateAsyncProcessor implements Traceable,
         exchange.setProperty(ExchangePropertyKey.EXCEPTION_CAUGHT, e);
         exchange.setException(null);
         // and we should not be regarded as exhausted as we are in a try .. catch block
-        exchange.adapt(ExtendedExchange.class).setRedeliveryExhausted(false);
+        exchange.getExchangeExtension().setRedeliveryExhausted(false);
 
         if (LOG.isDebugEnabled()) {
             LOG.debug("The exception is handled for the exception: {} caused by: {}",
@@ -131,7 +131,7 @@ public class CatchProcessor extends DelegateAsyncProcessor implements Traceable,
                 EventHelper.notifyExchangeFailureHandled(exchange.getContext(), exchange, processor, false, null);
 
                 // always clear redelivery exhausted in a catch clause
-                exchange.adapt(ExtendedExchange.class).setRedeliveryExhausted(false);
+                exchange.getExchangeExtension().setRedeliveryExhausted(false);
 
                 if (rollbackOnly || rollbackOnlyLast || stop) {
                     exchange.setRouteStop(stop);
diff --git a/core/camel-core-processor/src/main/java/org/apache/camel/processor/MulticastProcessor.java b/core/camel-core-processor/src/main/java/org/apache/camel/processor/MulticastProcessor.java
index af740f9b1c2..d4602468844 100644
--- a/core/camel-core-processor/src/main/java/org/apache/camel/processor/MulticastProcessor.java
+++ b/core/camel-core-processor/src/main/java/org/apache/camel/processor/MulticastProcessor.java
@@ -827,7 +827,7 @@ public class MulticastProcessor extends AsyncProcessorSupport
             // multicast uses error handling on its output processors and they have tried to redeliver
             // so we shall signal back to the other error handlers that we are exhausted and they should not
             // also try to redeliver as we would then do that twice
-            original.adapt(ExtendedExchange.class).setRedeliveryExhausted(exhaust);
+            original.getExchangeExtension().setRedeliveryExhausted(exhaust);
         }
 
         reactiveExecutor.schedule(callback);
diff --git a/core/camel-core-processor/src/main/java/org/apache/camel/processor/OnCompletionProcessor.java b/core/camel-core-processor/src/main/java/org/apache/camel/processor/OnCompletionProcessor.java
index 58c708c29cc..fc7da959e16 100644
--- a/core/camel-core-processor/src/main/java/org/apache/camel/processor/OnCompletionProcessor.java
+++ b/core/camel-core-processor/src/main/java/org/apache/camel/processor/OnCompletionProcessor.java
@@ -177,7 +177,7 @@ public class OnCompletionProcessor extends AsyncProcessorSupport implements Trac
         boolean rollbackOnlyLast = ee.isRollbackOnlyLast();
         ee.setRollbackOnlyLast(false);
         // and we should not be regarded as exhausted as we are in a onCompletion block
-        boolean exhausted = ee.adapt(ExtendedExchange.class).isRedeliveryExhausted();
+        boolean exhausted = ee.getExchangeExtension().isRedeliveryExhausted();
         ee.setRedeliveryExhausted(false);
 
         Exception cause = ee.getException();
diff --git a/core/camel-core-processor/src/main/java/org/apache/camel/processor/PollEnricher.java b/core/camel-core-processor/src/main/java/org/apache/camel/processor/PollEnricher.java
index 522a53f6944..4a1bd3605c3 100644
--- a/core/camel-core-processor/src/main/java/org/apache/camel/processor/PollEnricher.java
+++ b/core/camel-core-processor/src/main/java/org/apache/camel/processor/PollEnricher.java
@@ -322,7 +322,7 @@ public class PollEnricher extends AsyncProcessorSupport implements IdAware, Rout
                 // restore caused exception
                 exchange.setException(cause);
                 // remove the exhausted marker as we want to be able to perform redeliveries with the error handler
-                exchange.adapt(ExtendedExchange.class).setRedeliveryExhausted(false);
+                exchange.getExchangeExtension().setRedeliveryExhausted(false);
 
                 // preserve the redelivery stats
                 if (redeliveried != null) {
diff --git a/core/camel-core-processor/src/main/java/org/apache/camel/processor/aggregate/AggregateProcessor.java b/core/camel-core-processor/src/main/java/org/apache/camel/processor/aggregate/AggregateProcessor.java
index b7a4e9a7a6d..b96e38ae395 100644
--- a/core/camel-core-processor/src/main/java/org/apache/camel/processor/aggregate/AggregateProcessor.java
+++ b/core/camel-core-processor/src/main/java/org/apache/camel/processor/aggregate/AggregateProcessor.java
@@ -42,7 +42,6 @@ import org.apache.camel.Exchange;
 import org.apache.camel.ExchangePropertyKey;
 import org.apache.camel.Expression;
 import org.apache.camel.ExtendedCamelContext;
-import org.apache.camel.ExtendedExchange;
 import org.apache.camel.Navigate;
 import org.apache.camel.NoSuchEndpointException;
 import org.apache.camel.Predicate;
@@ -1435,8 +1434,8 @@ public class AggregateProcessor extends AsyncProcessorSupport
                                         // set redelivery counter
                                         exchange.getIn().setHeader(Exchange.REDELIVERY_COUNTER, data.redeliveryCounter);
                                         // and prepare for sending to DLC
-                                        exchange.adapt(ExtendedExchange.class).setRedeliveryExhausted(false);
-                                        exchange.adapt(ExtendedExchange.class).setRollbackOnly(false);
+                                        exchange.getExchangeExtension().setRedeliveryExhausted(false);
+                                        exchange.setRollbackOnly(false);
                                         deadLetterProducerTemplate.send(recoverable.getDeadLetterUri(), exchange);
                                     } catch (Throwable e) {
                                         exchange.setException(e);
diff --git a/core/camel-core-processor/src/main/java/org/apache/camel/processor/errorhandler/NoErrorHandler.java b/core/camel-core-processor/src/main/java/org/apache/camel/processor/errorhandler/NoErrorHandler.java
index 3a74e89c82e..59d00a72fd8 100644
--- a/core/camel-core-processor/src/main/java/org/apache/camel/processor/errorhandler/NoErrorHandler.java
+++ b/core/camel-core-processor/src/main/java/org/apache/camel/processor/errorhandler/NoErrorHandler.java
@@ -21,7 +21,6 @@ import java.util.concurrent.CompletableFuture;
 import org.apache.camel.AsyncCallback;
 import org.apache.camel.AsyncProcessor;
 import org.apache.camel.Exchange;
-import org.apache.camel.ExtendedExchange;
 import org.apache.camel.Processor;
 import org.apache.camel.spi.ErrorHandler;
 import org.apache.camel.support.AsyncCallbackToCompletableFutureAdapter;
@@ -47,7 +46,7 @@ public class NoErrorHandler extends ErrorHandlerSupport implements AsyncProcesso
         return output.process(exchange, new AsyncCallback() {
             @Override
             public void done(boolean doneSync) {
-                exchange.adapt(ExtendedExchange.class).setRedeliveryExhausted(false);
+                exchange.getExchangeExtension().setRedeliveryExhausted(false);
                 callback.done(doneSync);
             }
         });
diff --git a/core/camel-support/src/main/java/org/apache/camel/support/BridgeExceptionHandlerToErrorHandler.java b/core/camel-support/src/main/java/org/apache/camel/support/BridgeExceptionHandlerToErrorHandler.java
index 88d6e806453..f56ddfbbe9b 100644
--- a/core/camel-support/src/main/java/org/apache/camel/support/BridgeExceptionHandlerToErrorHandler.java
+++ b/core/camel-support/src/main/java/org/apache/camel/support/BridgeExceptionHandlerToErrorHandler.java
@@ -18,7 +18,6 @@ package org.apache.camel.support;
 
 import org.apache.camel.Exchange;
 import org.apache.camel.ExchangePropertyKey;
-import org.apache.camel.ExtendedExchange;
 import org.apache.camel.Processor;
 import org.apache.camel.spi.ExceptionHandler;
 import org.apache.camel.spi.UnitOfWork;
@@ -71,7 +70,7 @@ public class BridgeExceptionHandlerToErrorHandler implements ExceptionHandler {
         // mark as bridged
         exchange.setProperty(ExchangePropertyKey.ERRORHANDLER_BRIDGE, true);
         // and mark as redelivery exhausted as we cannot do redeliveries
-        exchange.adapt(ExtendedExchange.class).setRedeliveryExhausted(true);
+        exchange.getExchangeExtension().setRedeliveryExhausted(true);
 
         // wrap in UoW
         UnitOfWork uow = null;


[camel] 05/23: CAMEL-15105: rework handling addOnCompletions on Exchanges in several components

Posted by or...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

orpiske pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/camel.git

commit 43a6574cbd699733dd174f60dcc5a87c68068e21
Author: Otavio Rodolfo Piske <an...@gmail.com>
AuthorDate: Wed Nov 23 13:51:12 2022 +0100

    CAMEL-15105: rework handling addOnCompletions on Exchanges in several components
---
 .../org/apache/camel/component/aws2/s3/AWS2S3Consumer.java  |  5 ++---
 .../org/apache/camel/component/aws2/sqs/Sqs2Consumer.java   |  5 ++---
 .../camel/component/azure/cosmosdb/CosmosDbConsumer.java    |  3 +--
 .../camel/component/azure/eventhubs/EventHubsConsumer.java  |  3 +--
 .../component/azure/servicebus/ServiceBusConsumer.java      |  3 +--
 .../camel/component/azure/storage/blob/BlobConsumer.java    |  3 +--
 .../component/azure/storage/datalake/DataLakeConsumer.java  |  3 +--
 .../camel/component/azure/storage/queue/QueueConsumer.java  |  3 +--
 .../org/apache/camel/dataformat/csv/CsvUnmarshaller.java    |  3 +--
 .../cxf/jaxrs/CxfRsConsumerClientDisconnectedTest.java      |  3 +--
 .../camel/component/cxf/jaxrs/CxfRsStreamCacheTest.java     |  3 +--
 .../apache/camel/component/cxf/jaxws/DefaultCxfBinding.java |  3 +--
 .../cxf/jaxws/CxfConsumerClientDisconnectedTest.java        |  3 +--
 .../component/cxf/jaxws/CxfConsumerStreamCacheTest.java     |  3 +--
 .../component/disruptor/AbstractSynchronizedExchange.java   |  5 ++---
 .../apache/camel/component/disruptor/DisruptorConsumer.java |  2 +-
 .../apache/camel/component/disruptor/DisruptorProducer.java |  2 +-
 .../DisruptorInOutChainedWithOnCompletionTest.java          |  3 +--
 .../DisruptorWaitForTaskCompleteOnCompletionTest.java       |  3 +--
 .../DisruptorWaitForTaskNeverOnCompletionTest.java          |  3 +--
 .../apache/camel/component/file/GenericFileConsumer.java    |  3 +--
 .../camel/component/file/remote/RemoteFileConsumer.java     |  3 +--
 .../google/mail/stream/GoogleMailStreamConsumer.java        |  3 +--
 .../camel/component/google/pubsub/GooglePubsubConsumer.java |  3 +--
 .../google/pubsub/consumer/CamelMessageReceiver.java        |  3 +--
 .../google/storage/GoogleCloudStorageConsumer.java          |  3 +--
 .../java/org/apache/camel/component/http/HttpProducer.java  |  3 +--
 .../apache/camel/component/huaweicloud/obs/OBSConsumer.java |  3 +--
 .../camel/component/ignite/cache/IgniteCacheProducer.java   |  3 +--
 .../org/apache/camel/component/ironmq/IronMQConsumer.java   |  3 +--
 .../java/org/apache/camel/component/jdbc/JdbcProducer.java  |  5 ++---
 .../component/kamelet/KameletConsumerUoWIssueTest.java      |  3 +--
 .../apache/camel/component/kamelet/KameletUoWIssueTest.java |  3 +--
 .../java/org/apache/camel/component/mail/MailConsumer.java  |  3 +--
 .../org/apache/camel/component/minio/MinioConsumer.java     |  5 ++---
 .../camel/component/netty/http/DefaultNettyHttpBinding.java |  4 ++--
 .../camel/component/netty/http/NettyHttpProducer.java       |  2 +-
 .../org/apache/camel/component/netty/NettyProducer.java     |  3 +--
 .../pg/replication/slot/PgReplicationSlotConsumer.java      |  3 +--
 .../streams/engine/DefaultCamelReactiveStreamsService.java  |  3 +--
 .../component/reactor/engine/ReactorStreamsService.java     |  3 +--
 .../camel/component/rxjava/engine/RxJavaStreamsService.java |  3 +--
 .../java/org/apache/camel/component/seda/SedaProducer.java  |  3 +--
 .../java/org/apache/camel/component/sjms/SjmsTemplate.java  | 13 ++++++++-----
 .../java/org/apache/camel/component/sql/SqlProducer.java    |  3 +--
 .../processor/aggregate/tarfile/TarAggregationStrategy.java |  2 +-
 .../java/org/apache/camel/component/xslt/XsltBuilder.java   |  4 ++--
 .../processor/aggregate/zipfile/ZipAggregationStrategy.java |  2 +-
 .../camel/component/seda/SedaDiscardIfNoConsumerTest.java   |  3 +--
 .../seda/SedaInOutChainedWithOnCompletionTest.java          |  3 +--
 .../seda/SedaWaitForTaskCompleteOnCompletionTest.java       |  3 +--
 .../seda/SedaWaitForTaskNewerOnCompletionTest.java          |  3 +--
 52 files changed, 66 insertions(+), 107 deletions(-)

diff --git a/components/camel-aws/camel-aws2-s3/src/main/java/org/apache/camel/component/aws2/s3/AWS2S3Consumer.java b/components/camel-aws/camel-aws2-s3/src/main/java/org/apache/camel/component/aws2/s3/AWS2S3Consumer.java
index b19c85b5abf..ce801418763 100644
--- a/components/camel-aws/camel-aws2-s3/src/main/java/org/apache/camel/component/aws2/s3/AWS2S3Consumer.java
+++ b/components/camel-aws/camel-aws2-s3/src/main/java/org/apache/camel/component/aws2/s3/AWS2S3Consumer.java
@@ -28,7 +28,6 @@ import org.apache.camel.AsyncCallback;
 import org.apache.camel.Exchange;
 import org.apache.camel.ExchangePattern;
 import org.apache.camel.ExchangePropertyKey;
-import org.apache.camel.ExtendedExchange;
 import org.apache.camel.Message;
 import org.apache.camel.Processor;
 import org.apache.camel.RuntimeCamelException;
@@ -283,7 +282,7 @@ public class AWS2S3Consumer extends ScheduledBatchPollingConsumer {
             pendingExchanges = total - index - 1;
 
             // add on completion to handle after work when the exchange is done
-            exchange.adapt(ExtendedExchange.class).addOnCompletion(new Synchronization() {
+            exchange.getExchangeExtension().addOnCompletion(new Synchronization() {
                 public void onComplete(Exchange exchange) {
                     processCommit(exchange);
                 }
@@ -437,7 +436,7 @@ public class AWS2S3Consumer extends ScheduledBatchPollingConsumer {
             IOHelper.close(s3Object);
         } else {
             if (getConfiguration().isAutocloseBody()) {
-                exchange.adapt(ExtendedExchange.class).addOnCompletion(new SynchronizationAdapter() {
+                exchange.getExchangeExtension().addOnCompletion(new SynchronizationAdapter() {
                     @Override
                     public void onDone(Exchange exchange) {
                         IOHelper.close(s3Object);
diff --git a/components/camel-aws/camel-aws2-sqs/src/main/java/org/apache/camel/component/aws2/sqs/Sqs2Consumer.java b/components/camel-aws/camel-aws2-sqs/src/main/java/org/apache/camel/component/aws2/sqs/Sqs2Consumer.java
index f9e5e0627a8..a945c838e4b 100644
--- a/components/camel-aws/camel-aws2-sqs/src/main/java/org/apache/camel/component/aws2/sqs/Sqs2Consumer.java
+++ b/components/camel-aws/camel-aws2-sqs/src/main/java/org/apache/camel/component/aws2/sqs/Sqs2Consumer.java
@@ -31,7 +31,6 @@ import org.apache.camel.AsyncCallback;
 import org.apache.camel.Exchange;
 import org.apache.camel.ExchangePattern;
 import org.apache.camel.ExchangePropertyKey;
-import org.apache.camel.ExtendedExchange;
 import org.apache.camel.Message;
 import org.apache.camel.Processor;
 import org.apache.camel.health.HealthCheckHelper;
@@ -188,7 +187,7 @@ public class Sqs2Consumer extends ScheduledBatchPollingConsumer {
                 final ScheduledFuture<?> scheduledFuture = this.scheduledExecutor.scheduleAtFixedRate(
                         new TimeoutExtender(exchange, repeatSeconds), delay, period,
                         TimeUnit.SECONDS);
-                exchange.adapt(ExtendedExchange.class).addOnCompletion(new Synchronization() {
+                exchange.getExchangeExtension().addOnCompletion(new Synchronization() {
                     @Override
                     public void onComplete(Exchange exchange) {
                         cancelExtender(exchange);
@@ -209,7 +208,7 @@ public class Sqs2Consumer extends ScheduledBatchPollingConsumer {
             }
 
             // add on completion to handle after work when the exchange is done
-            exchange.adapt(ExtendedExchange.class).addOnCompletion(new Synchronization() {
+            exchange.getExchangeExtension().addOnCompletion(new Synchronization() {
                 @Override
                 public void onComplete(Exchange exchange) {
                     processCommit(exchange);
diff --git a/components/camel-azure/camel-azure-cosmosdb/src/main/java/org/apache/camel/component/azure/cosmosdb/CosmosDbConsumer.java b/components/camel-azure/camel-azure-cosmosdb/src/main/java/org/apache/camel/component/azure/cosmosdb/CosmosDbConsumer.java
index b252ca5d537..91e67820f67 100644
--- a/components/camel-azure/camel-azure-cosmosdb/src/main/java/org/apache/camel/component/azure/cosmosdb/CosmosDbConsumer.java
+++ b/components/camel-azure/camel-azure-cosmosdb/src/main/java/org/apache/camel/component/azure/cosmosdb/CosmosDbConsumer.java
@@ -22,7 +22,6 @@ import java.util.Map;
 import com.azure.cosmos.ChangeFeedProcessor;
 import com.azure.cosmos.implementation.apachecommons.lang.RandomStringUtils;
 import org.apache.camel.Exchange;
-import org.apache.camel.ExtendedExchange;
 import org.apache.camel.Message;
 import org.apache.camel.Processor;
 import org.apache.camel.component.azure.cosmosdb.client.CosmosAsyncClientWrapper;
@@ -87,7 +86,7 @@ public class CosmosDbConsumer extends DefaultConsumer {
         final Exchange exchange = createAzureCosmosDbExchange(record);
 
         // add exchange callback
-        exchange.adapt(ExtendedExchange.class).addOnCompletion(onCompletion);
+        exchange.getExchangeExtension().addOnCompletion(onCompletion);
         // use default consumer callback
         getAsyncProcessor().process(exchange, EmptyAsyncCallback.get());
     }
diff --git a/components/camel-azure/camel-azure-eventhubs/src/main/java/org/apache/camel/component/azure/eventhubs/EventHubsConsumer.java b/components/camel-azure/camel-azure-eventhubs/src/main/java/org/apache/camel/component/azure/eventhubs/EventHubsConsumer.java
index e9f43681954..89b9a71b518 100644
--- a/components/camel-azure/camel-azure-eventhubs/src/main/java/org/apache/camel/component/azure/eventhubs/EventHubsConsumer.java
+++ b/components/camel-azure/camel-azure-eventhubs/src/main/java/org/apache/camel/component/azure/eventhubs/EventHubsConsumer.java
@@ -24,7 +24,6 @@ import com.azure.messaging.eventhubs.models.ErrorContext;
 import com.azure.messaging.eventhubs.models.EventContext;
 import org.apache.camel.AsyncCallback;
 import org.apache.camel.Exchange;
-import org.apache.camel.ExtendedExchange;
 import org.apache.camel.Message;
 import org.apache.camel.Processor;
 import org.apache.camel.component.azure.eventhubs.client.EventHubsClientFactory;
@@ -127,7 +126,7 @@ public class EventHubsConsumer extends DefaultConsumer {
         final Exchange exchange = createAzureEventHubExchange(eventContext);
 
         // add exchange callback
-        exchange.adapt(ExtendedExchange.class).addOnCompletion(new Synchronization() {
+        exchange.getExchangeExtension().addOnCompletion(new Synchronization() {
             @Override
             public void onComplete(Exchange exchange) {
                 // we update the consumer offsets
diff --git a/components/camel-azure/camel-azure-servicebus/src/main/java/org/apache/camel/component/azure/servicebus/ServiceBusConsumer.java b/components/camel-azure/camel-azure-servicebus/src/main/java/org/apache/camel/component/azure/servicebus/ServiceBusConsumer.java
index fcf1f5c6385..2719a0187b9 100644
--- a/components/camel-azure/camel-azure-servicebus/src/main/java/org/apache/camel/component/azure/servicebus/ServiceBusConsumer.java
+++ b/components/camel-azure/camel-azure-servicebus/src/main/java/org/apache/camel/component/azure/servicebus/ServiceBusConsumer.java
@@ -23,7 +23,6 @@ import com.azure.messaging.servicebus.ServiceBusReceivedMessage;
 import com.azure.messaging.servicebus.ServiceBusReceiverAsyncClient;
 import org.apache.camel.AsyncCallback;
 import org.apache.camel.Exchange;
-import org.apache.camel.ExtendedExchange;
 import org.apache.camel.Message;
 import org.apache.camel.Processor;
 import org.apache.camel.RuntimeCamelException;
@@ -141,7 +140,7 @@ public class ServiceBusConsumer extends DefaultConsumer {
         final Exchange exchange = createServiceBusExchange(message);
 
         // add exchange callback
-        exchange.adapt(ExtendedExchange.class).addOnCompletion(onCompletion);
+        exchange.getExchangeExtension().addOnCompletion(onCompletion);
         // use default consumer callback
         AsyncCallback cb = defaultConsumerCallback(exchange, true);
         getAsyncProcessor().process(exchange, cb);
diff --git a/components/camel-azure/camel-azure-storage-blob/src/main/java/org/apache/camel/component/azure/storage/blob/BlobConsumer.java b/components/camel-azure/camel-azure-storage-blob/src/main/java/org/apache/camel/component/azure/storage/blob/BlobConsumer.java
index 1cf39cd1593..be69d8b7f1e 100644
--- a/components/camel-azure/camel-azure-storage-blob/src/main/java/org/apache/camel/component/azure/storage/blob/BlobConsumer.java
+++ b/components/camel-azure/camel-azure-storage-blob/src/main/java/org/apache/camel/component/azure/storage/blob/BlobConsumer.java
@@ -27,7 +27,6 @@ import com.azure.storage.blob.models.BlobStorageException;
 import org.apache.camel.AsyncCallback;
 import org.apache.camel.Exchange;
 import org.apache.camel.ExchangePropertyKey;
-import org.apache.camel.ExtendedExchange;
 import org.apache.camel.Processor;
 import org.apache.camel.component.azure.storage.blob.client.BlobClientWrapper;
 import org.apache.camel.component.azure.storage.blob.client.BlobContainerClientWrapper;
@@ -139,7 +138,7 @@ public class BlobConsumer extends ScheduledBatchPollingConsumer {
             pendingExchanges = total - index - 1;
 
             // add on completion to handle after work when the exchange is done
-            exchange.adapt(ExtendedExchange.class).addOnCompletion(new Synchronization() {
+            exchange.getExchangeExtension().addOnCompletion(new Synchronization() {
                 @Override
                 public void onComplete(Exchange exchange) {
                     LOG.trace("Completed from processing all exchanges...");
diff --git a/components/camel-azure/camel-azure-storage-datalake/src/main/java/org/apache/camel/component/azure/storage/datalake/DataLakeConsumer.java b/components/camel-azure/camel-azure-storage-datalake/src/main/java/org/apache/camel/component/azure/storage/datalake/DataLakeConsumer.java
index 7fc5981b384..f288230e078 100644
--- a/components/camel-azure/camel-azure-storage-datalake/src/main/java/org/apache/camel/component/azure/storage/datalake/DataLakeConsumer.java
+++ b/components/camel-azure/camel-azure-storage-datalake/src/main/java/org/apache/camel/component/azure/storage/datalake/DataLakeConsumer.java
@@ -28,7 +28,6 @@ import org.apache.camel.AsyncCallback;
 import org.apache.camel.Endpoint;
 import org.apache.camel.Exchange;
 import org.apache.camel.ExchangePropertyKey;
-import org.apache.camel.ExtendedExchange;
 import org.apache.camel.Processor;
 import org.apache.camel.component.azure.storage.datalake.client.DataLakeFileClientWrapper;
 import org.apache.camel.component.azure.storage.datalake.client.DataLakeFileSystemClientWrapper;
@@ -138,7 +137,7 @@ public class DataLakeConsumer extends ScheduledBatchPollingConsumer {
 
             pendingExchanges = total - i - 1;
 
-            exchange.adapt(ExtendedExchange.class).addOnCompletion(new Synchronization() {
+            exchange.getExchangeExtension().addOnCompletion(new Synchronization() {
                 @Override
                 public void onComplete(Exchange exchange) {
                     LOG.trace("Processing all exchanges completed");
diff --git a/components/camel-azure/camel-azure-storage-queue/src/main/java/org/apache/camel/component/azure/storage/queue/QueueConsumer.java b/components/camel-azure/camel-azure-storage-queue/src/main/java/org/apache/camel/component/azure/storage/queue/QueueConsumer.java
index d48ab826327..85441a97c39 100644
--- a/components/camel-azure/camel-azure-storage-queue/src/main/java/org/apache/camel/component/azure/storage/queue/QueueConsumer.java
+++ b/components/camel-azure/camel-azure-storage-queue/src/main/java/org/apache/camel/component/azure/storage/queue/QueueConsumer.java
@@ -29,7 +29,6 @@ import com.azure.storage.queue.models.QueueStorageException;
 import org.apache.camel.AsyncCallback;
 import org.apache.camel.Exchange;
 import org.apache.camel.ExchangePropertyKey;
-import org.apache.camel.ExtendedExchange;
 import org.apache.camel.Message;
 import org.apache.camel.Processor;
 import org.apache.camel.component.azure.storage.queue.client.QueueClientWrapper;
@@ -129,7 +128,7 @@ public class QueueConsumer extends ScheduledBatchPollingConsumer {
             final Duration timeout = exchange.getIn().getHeader(QueueConstants.TIMEOUT, Duration.class);
 
             // add on completion to handle after work when the exchange is done
-            exchange.adapt(ExtendedExchange.class).addOnCompletion(new Synchronization() {
+            exchange.getExchangeExtension().addOnCompletion(new Synchronization() {
                 @Override
                 public void onComplete(Exchange exchange) {
                     // past messageId, popReceipt, timeout for fix exchange override case
diff --git a/components/camel-csv/src/main/java/org/apache/camel/dataformat/csv/CsvUnmarshaller.java b/components/camel-csv/src/main/java/org/apache/camel/dataformat/csv/CsvUnmarshaller.java
index 945d4d2788a..a76039c7044 100644
--- a/components/camel-csv/src/main/java/org/apache/camel/dataformat/csv/CsvUnmarshaller.java
+++ b/components/camel-csv/src/main/java/org/apache/camel/dataformat/csv/CsvUnmarshaller.java
@@ -26,7 +26,6 @@ import java.util.Iterator;
 import java.util.List;
 
 import org.apache.camel.Exchange;
-import org.apache.camel.ExtendedExchange;
 import org.apache.camel.support.ExchangeHelper;
 import org.apache.camel.util.IOHelper;
 import org.apache.commons.csv.CSVFormat;
@@ -140,7 +139,7 @@ abstract class CsvUnmarshaller {
                 CSVParser parser = new CSVParser(reader, format);
                 CsvIterator answer = new CsvIterator(parser, converter);
                 // add to UoW so we can close the iterator so it can release any resources
-                exchange.adapt(ExtendedExchange.class).addOnCompletion(new CsvUnmarshalOnCompletion(answer));
+                exchange.getExchangeExtension().addOnCompletion(new CsvUnmarshalOnCompletion(answer));
                 return answer;
             } catch (Exception e) {
                 IOHelper.close(reader);
diff --git a/components/camel-cxf/camel-cxf-rest/src/test/java/org/apache/camel/component/cxf/jaxrs/CxfRsConsumerClientDisconnectedTest.java b/components/camel-cxf/camel-cxf-rest/src/test/java/org/apache/camel/component/cxf/jaxrs/CxfRsConsumerClientDisconnectedTest.java
index d41ef5e2ac5..84d35ed86a8 100644
--- a/components/camel-cxf/camel-cxf-rest/src/test/java/org/apache/camel/component/cxf/jaxrs/CxfRsConsumerClientDisconnectedTest.java
+++ b/components/camel-cxf/camel-cxf-rest/src/test/java/org/apache/camel/component/cxf/jaxrs/CxfRsConsumerClientDisconnectedTest.java
@@ -20,7 +20,6 @@ import java.io.BufferedWriter;
 import java.io.OutputStreamWriter;
 
 import org.apache.camel.Exchange;
-import org.apache.camel.ExtendedExchange;
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.component.cxf.common.CXFTestSupport;
 import org.apache.camel.component.mock.MockEndpoint;
@@ -56,7 +55,7 @@ public class CxfRsConsumerClientDisconnectedTest extends CamelTestSupport {
                         .process(exchange -> {
                             Thread.sleep(100);
 
-                            exchange.adapt(ExtendedExchange.class).addOnCompletion(new Synchronization() {
+                            exchange.getExchangeExtension().addOnCompletion(new Synchronization() {
                                 @Override
                                 public void onComplete(Exchange exchange) {
                                     template.sendBody("mock:onComplete", "");
diff --git a/components/camel-cxf/camel-cxf-rest/src/test/java/org/apache/camel/component/cxf/jaxrs/CxfRsStreamCacheTest.java b/components/camel-cxf/camel-cxf-rest/src/test/java/org/apache/camel/component/cxf/jaxrs/CxfRsStreamCacheTest.java
index fef5033eff3..a7829a3af0f 100644
--- a/components/camel-cxf/camel-cxf-rest/src/test/java/org/apache/camel/component/cxf/jaxrs/CxfRsStreamCacheTest.java
+++ b/components/camel-cxf/camel-cxf-rest/src/test/java/org/apache/camel/component/cxf/jaxrs/CxfRsStreamCacheTest.java
@@ -17,7 +17,6 @@
 package org.apache.camel.component.cxf.jaxrs;
 
 import org.apache.camel.Exchange;
-import org.apache.camel.ExtendedExchange;
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.component.cxf.common.CXFTestSupport;
 import org.apache.camel.component.cxf.jaxrs.testbean.Customer;
@@ -65,7 +64,7 @@ public class CxfRsStreamCacheTest extends CamelTestSupport {
                             cos.close();
                             exchange.getMessage().setBody(cos.newStreamCache());
 
-                            exchange.adapt(ExtendedExchange.class).addOnCompletion(new Synchronization() {
+                            exchange.getExchangeExtension().addOnCompletion(new Synchronization() {
                                 @Override
                                 public void onComplete(Exchange exchange) {
                                     template.sendBody("mock:onComplete", "");
diff --git a/components/camel-cxf/camel-cxf-soap/src/main/java/org/apache/camel/component/cxf/jaxws/DefaultCxfBinding.java b/components/camel-cxf/camel-cxf-soap/src/main/java/org/apache/camel/component/cxf/jaxws/DefaultCxfBinding.java
index 768331285b2..a2c234e1989 100644
--- a/components/camel-cxf/camel-cxf-soap/src/main/java/org/apache/camel/component/cxf/jaxws/DefaultCxfBinding.java
+++ b/components/camel-cxf/camel-cxf-soap/src/main/java/org/apache/camel/component/cxf/jaxws/DefaultCxfBinding.java
@@ -51,7 +51,6 @@ import org.w3c.dom.Node;
 import org.apache.camel.Exchange;
 import org.apache.camel.ExchangePattern;
 import org.apache.camel.ExchangePropertyKey;
-import org.apache.camel.ExtendedExchange;
 import org.apache.camel.attachment.AttachmentMessage;
 import org.apache.camel.attachment.DefaultAttachment;
 import org.apache.camel.component.cxf.common.CxfBinding;
@@ -223,7 +222,7 @@ public class DefaultCxfBinding implements CxfBinding, HeaderFilterStrategyAware
      * @param cxfExchange
      */
     private void addAttachmentFileCloseUoW(Exchange camelExchange, org.apache.cxf.message.Exchange cxfExchange) {
-        camelExchange.adapt(ExtendedExchange.class).addOnCompletion(new SynchronizationAdapter() {
+        camelExchange.getExchangeExtension().addOnCompletion(new SynchronizationAdapter() {
             @Override
             public void onDone(org.apache.camel.Exchange exchange) {
                 Collection<Attachment> atts = cxfExchange.getInMessage().getAttachments();
diff --git a/components/camel-cxf/camel-cxf-soap/src/test/java/org/apache/camel/component/cxf/jaxws/CxfConsumerClientDisconnectedTest.java b/components/camel-cxf/camel-cxf-soap/src/test/java/org/apache/camel/component/cxf/jaxws/CxfConsumerClientDisconnectedTest.java
index fd3e68f48da..b2d9a58cdb9 100644
--- a/components/camel-cxf/camel-cxf-soap/src/test/java/org/apache/camel/component/cxf/jaxws/CxfConsumerClientDisconnectedTest.java
+++ b/components/camel-cxf/camel-cxf-soap/src/test/java/org/apache/camel/component/cxf/jaxws/CxfConsumerClientDisconnectedTest.java
@@ -20,7 +20,6 @@ import java.io.BufferedWriter;
 import java.io.OutputStreamWriter;
 
 import org.apache.camel.Exchange;
-import org.apache.camel.ExtendedExchange;
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.component.cxf.common.CXFTestSupport;
 import org.apache.camel.component.mock.MockEndpoint;
@@ -56,7 +55,7 @@ public class CxfConsumerClientDisconnectedTest extends CamelTestSupport {
                         .process(exchange -> {
                             Thread.sleep(100);
 
-                            exchange.adapt(ExtendedExchange.class).addOnCompletion(new Synchronization() {
+                            exchange.getExchangeExtension().addOnCompletion(new Synchronization() {
                                 @Override
                                 public void onComplete(Exchange exchange) {
                                     template.sendBody("mock:onComplete", "");
diff --git a/components/camel-cxf/camel-cxf-soap/src/test/java/org/apache/camel/component/cxf/jaxws/CxfConsumerStreamCacheTest.java b/components/camel-cxf/camel-cxf-soap/src/test/java/org/apache/camel/component/cxf/jaxws/CxfConsumerStreamCacheTest.java
index 2a164a6859d..a13988a03cb 100644
--- a/components/camel-cxf/camel-cxf-soap/src/test/java/org/apache/camel/component/cxf/jaxws/CxfConsumerStreamCacheTest.java
+++ b/components/camel-cxf/camel-cxf-soap/src/test/java/org/apache/camel/component/cxf/jaxws/CxfConsumerStreamCacheTest.java
@@ -19,7 +19,6 @@ package org.apache.camel.component.cxf.jaxws;
 import org.w3c.dom.Node;
 
 import org.apache.camel.Exchange;
-import org.apache.camel.ExtendedExchange;
 import org.apache.camel.Message;
 import org.apache.camel.Processor;
 import org.apache.camel.builder.RouteBuilder;
@@ -73,7 +72,7 @@ public class CxfConsumerStreamCacheTest extends CamelTestSupport {
                         cos.close();
                         exchange.getMessage().setBody(cos.newStreamCache());
 
-                        exchange.adapt(ExtendedExchange.class).addOnCompletion(new Synchronization() {
+                        exchange.getExchangeExtension().addOnCompletion(new Synchronization() {
                             @Override
                             public void onComplete(Exchange exchange) {
                                 template.sendBody("mock:onComplete", "");
diff --git a/components/camel-disruptor/src/main/java/org/apache/camel/component/disruptor/AbstractSynchronizedExchange.java b/components/camel-disruptor/src/main/java/org/apache/camel/component/disruptor/AbstractSynchronizedExchange.java
index 3709e4193d3..0018aca72e2 100644
--- a/components/camel-disruptor/src/main/java/org/apache/camel/component/disruptor/AbstractSynchronizedExchange.java
+++ b/components/camel-disruptor/src/main/java/org/apache/camel/component/disruptor/AbstractSynchronizedExchange.java
@@ -19,7 +19,6 @@ package org.apache.camel.component.disruptor;
 import java.util.List;
 
 import org.apache.camel.Exchange;
-import org.apache.camel.ExtendedExchange;
 import org.apache.camel.spi.Synchronization;
 import org.apache.camel.support.UnitOfWorkHelper;
 import org.slf4j.Logger;
@@ -32,7 +31,7 @@ public abstract class AbstractSynchronizedExchange implements SynchronizedExchan
 
     public AbstractSynchronizedExchange(Exchange exchange) {
         this.exchange = exchange;
-        synchronizations = exchange.adapt(ExtendedExchange.class).handoverCompletions();
+        synchronizations = exchange.getExchangeExtension().handoverCompletions();
     }
 
     @Override
@@ -44,7 +43,7 @@ public abstract class AbstractSynchronizedExchange implements SynchronizedExchan
     public Exchange cancelAndGetOriginalExchange() {
         if (synchronizations != null) {
             for (Synchronization synchronization : synchronizations) {
-                exchange.adapt(ExtendedExchange.class).addOnCompletion(synchronization);
+                exchange.getExchangeExtension().addOnCompletion(synchronization);
             }
         }
 
diff --git a/components/camel-disruptor/src/main/java/org/apache/camel/component/disruptor/DisruptorConsumer.java b/components/camel-disruptor/src/main/java/org/apache/camel/component/disruptor/DisruptorConsumer.java
index b9734afee15..cee5b483814 100644
--- a/components/camel-disruptor/src/main/java/org/apache/camel/component/disruptor/DisruptorConsumer.java
+++ b/components/camel-disruptor/src/main/java/org/apache/camel/component/disruptor/DisruptorConsumer.java
@@ -164,7 +164,7 @@ public class DisruptorConsumer extends ServiceSupport implements Consumer, Suspe
             // (see org.apache.camel.processor.CamelInternalProcessor.InternalCallback#done).
             // To solve this problem, a new synchronization is set on the exchange that is to be
             // processed
-            result.adapt(ExtendedExchange.class).addOnCompletion(new Synchronization() {
+            result.getExchangeExtension().addOnCompletion(new Synchronization() {
                 @Override
                 public void onComplete(Exchange exchange) {
                     synchronizedExchange.consumed(result);
diff --git a/components/camel-disruptor/src/main/java/org/apache/camel/component/disruptor/DisruptorProducer.java b/components/camel-disruptor/src/main/java/org/apache/camel/component/disruptor/DisruptorProducer.java
index 529fe901b30..a35ba77cf9b 100644
--- a/components/camel-disruptor/src/main/java/org/apache/camel/component/disruptor/DisruptorProducer.java
+++ b/components/camel-disruptor/src/main/java/org/apache/camel/component/disruptor/DisruptorProducer.java
@@ -86,7 +86,7 @@ public class DisruptorProducer extends DefaultAsyncProducer {
             final CountDownLatch latch = new CountDownLatch(1);
 
             // we should wait for the reply so install a on completion so we know when its complete
-            copy.adapt(ExtendedExchange.class).addOnCompletion(new SynchronizationAdapter() {
+            copy.getExchangeExtension().addOnCompletion(new SynchronizationAdapter() {
                 @Override
                 public void onDone(final Exchange response) {
                     // check for timeout, which then already would have invoked the latch
diff --git a/components/camel-disruptor/src/test/java/org/apache/camel/component/disruptor/DisruptorInOutChainedWithOnCompletionTest.java b/components/camel-disruptor/src/test/java/org/apache/camel/component/disruptor/DisruptorInOutChainedWithOnCompletionTest.java
index a7eab138ca0..a0f1f89a202 100644
--- a/components/camel-disruptor/src/test/java/org/apache/camel/component/disruptor/DisruptorInOutChainedWithOnCompletionTest.java
+++ b/components/camel-disruptor/src/test/java/org/apache/camel/component/disruptor/DisruptorInOutChainedWithOnCompletionTest.java
@@ -17,7 +17,6 @@
 package org.apache.camel.component.disruptor;
 
 import org.apache.camel.Exchange;
-import org.apache.camel.ExtendedExchange;
 import org.apache.camel.Processor;
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.component.mock.MockEndpoint;
@@ -50,7 +49,7 @@ public class DisruptorInOutChainedWithOnCompletionTest extends CamelTestSupport
                     @Override
                     public void process(final Exchange exchange) {
                         // should come in last
-                        exchange.adapt(ExtendedExchange.class).addOnCompletion(new SynchronizationAdapter() {
+                        exchange.getExchangeExtension().addOnCompletion(new SynchronizationAdapter() {
                             @Override
                             public void onDone(final Exchange exchange) {
                                 template.sendBody("mock:c", "onCustomCompletion");
diff --git a/components/camel-disruptor/src/test/java/org/apache/camel/component/disruptor/DisruptorWaitForTaskCompleteOnCompletionTest.java b/components/camel-disruptor/src/test/java/org/apache/camel/component/disruptor/DisruptorWaitForTaskCompleteOnCompletionTest.java
index 8b8b1add1a3..97b57fdf272 100644
--- a/components/camel-disruptor/src/test/java/org/apache/camel/component/disruptor/DisruptorWaitForTaskCompleteOnCompletionTest.java
+++ b/components/camel-disruptor/src/test/java/org/apache/camel/component/disruptor/DisruptorWaitForTaskCompleteOnCompletionTest.java
@@ -18,7 +18,6 @@ package org.apache.camel.component.disruptor;
 
 import org.apache.camel.CamelExecutionException;
 import org.apache.camel.Exchange;
-import org.apache.camel.ExtendedExchange;
 import org.apache.camel.Processor;
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.component.mock.MockEndpoint;
@@ -62,7 +61,7 @@ public class DisruptorWaitForTaskCompleteOnCompletionTest extends CamelTestSuppo
                 from("direct:start").process(new Processor() {
                     @Override
                     public void process(final Exchange exchange) {
-                        exchange.adapt(ExtendedExchange.class).addOnCompletion(new SynchronizationAdapter() {
+                        exchange.getExchangeExtension().addOnCompletion(new SynchronizationAdapter() {
                             @Override
                             public void onDone(final Exchange exchange) {
                                 done += "A";
diff --git a/components/camel-disruptor/src/test/java/org/apache/camel/component/disruptor/DisruptorWaitForTaskNeverOnCompletionTest.java b/components/camel-disruptor/src/test/java/org/apache/camel/component/disruptor/DisruptorWaitForTaskNeverOnCompletionTest.java
index 53e0e51a71c..934eada31b6 100644
--- a/components/camel-disruptor/src/test/java/org/apache/camel/component/disruptor/DisruptorWaitForTaskNeverOnCompletionTest.java
+++ b/components/camel-disruptor/src/test/java/org/apache/camel/component/disruptor/DisruptorWaitForTaskNeverOnCompletionTest.java
@@ -20,7 +20,6 @@ import java.util.concurrent.CountDownLatch;
 import java.util.concurrent.TimeUnit;
 
 import org.apache.camel.Exchange;
-import org.apache.camel.ExtendedExchange;
 import org.apache.camel.Processor;
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.component.mock.MockEndpoint;
@@ -61,7 +60,7 @@ public class DisruptorWaitForTaskNeverOnCompletionTest extends CamelTestSupport
                 from("direct:start").process(new Processor() {
                     @Override
                     public void process(final Exchange exchange) {
-                        exchange.adapt(ExtendedExchange.class).addOnCompletion(new SynchronizationAdapter() {
+                        exchange.getExchangeExtension().addOnCompletion(new SynchronizationAdapter() {
                             @Override
                             public void onDone(final Exchange exchange) {
                                 done = done + "A";
diff --git a/components/camel-file/src/main/java/org/apache/camel/component/file/GenericFileConsumer.java b/components/camel-file/src/main/java/org/apache/camel/component/file/GenericFileConsumer.java
index 1b7b8adf562..ef3c28a2d71 100644
--- a/components/camel-file/src/main/java/org/apache/camel/component/file/GenericFileConsumer.java
+++ b/components/camel-file/src/main/java/org/apache/camel/component/file/GenericFileConsumer.java
@@ -27,7 +27,6 @@ import java.util.regex.Pattern;
 import org.apache.camel.CamelContextAware;
 import org.apache.camel.Exchange;
 import org.apache.camel.ExchangePropertyKey;
-import org.apache.camel.ExtendedExchange;
 import org.apache.camel.Message;
 import org.apache.camel.Processor;
 import org.apache.camel.RuntimeCamelException;
@@ -475,7 +474,7 @@ public abstract class GenericFileConsumer<T> extends ScheduledBatchPollingConsum
             // register on completion callback that does the completion
             // strategies
             // (for instance to move the file after we have processed it)
-            exchange.adapt(ExtendedExchange.class).addOnCompletion(
+            exchange.getExchangeExtension().addOnCompletion(
                     new GenericFileOnCompletion<>(endpoint, operations, processStrategy, target, absoluteFileName));
 
             LOG.debug("About to process file: {} using exchange: {}", target, exchange);
diff --git a/components/camel-ftp/src/main/java/org/apache/camel/component/file/remote/RemoteFileConsumer.java b/components/camel-ftp/src/main/java/org/apache/camel/component/file/remote/RemoteFileConsumer.java
index 9b1486256a8..a829fd5c3e8 100644
--- a/components/camel-ftp/src/main/java/org/apache/camel/component/file/remote/RemoteFileConsumer.java
+++ b/components/camel-ftp/src/main/java/org/apache/camel/component/file/remote/RemoteFileConsumer.java
@@ -20,7 +20,6 @@ import java.util.List;
 
 import org.apache.camel.Exchange;
 import org.apache.camel.ExchangePropertyKey;
-import org.apache.camel.ExtendedExchange;
 import org.apache.camel.Ordered;
 import org.apache.camel.Processor;
 import org.apache.camel.component.file.GenericFile;
@@ -122,7 +121,7 @@ public abstract class RemoteFileConsumer<T> extends GenericFileConsumer<T> {
         // from the batch should do that
         boolean isLast = exchange.getProperty(ExchangePropertyKey.BATCH_COMPLETE, true, Boolean.class);
         if (isLast && getEndpoint().isDisconnect()) {
-            exchange.adapt(ExtendedExchange.class).addOnCompletion(new SynchronizationAdapter() {
+            exchange.getExchangeExtension().addOnCompletion(new SynchronizationAdapter() {
                 @Override
                 public void onDone(Exchange exchange) {
                     LOG.trace("processExchange disconnect from: {}", getEndpoint());
diff --git a/components/camel-google/camel-google-mail/src/main/java/org/apache/camel/component/google/mail/stream/GoogleMailStreamConsumer.java b/components/camel-google/camel-google-mail/src/main/java/org/apache/camel/component/google/mail/stream/GoogleMailStreamConsumer.java
index 425189d1bd9..d65e4ea86be 100644
--- a/components/camel-google/camel-google-mail/src/main/java/org/apache/camel/component/google/mail/stream/GoogleMailStreamConsumer.java
+++ b/components/camel-google/camel-google-mail/src/main/java/org/apache/camel/component/google/mail/stream/GoogleMailStreamConsumer.java
@@ -33,7 +33,6 @@ import org.apache.camel.Endpoint;
 import org.apache.camel.Exchange;
 import org.apache.camel.ExchangePattern;
 import org.apache.camel.ExchangePropertyKey;
-import org.apache.camel.ExtendedExchange;
 import org.apache.camel.Processor;
 import org.apache.camel.spi.Synchronization;
 import org.apache.camel.support.EmptyAsyncCallback;
@@ -114,7 +113,7 @@ public class GoogleMailStreamConsumer extends ScheduledBatchPollingConsumer {
             pendingExchanges = total - index - 1;
 
             // add on completion to handle after work when the exchange is done
-            exchange.adapt(ExtendedExchange.class).addOnCompletion(new Synchronization() {
+            exchange.getExchangeExtension().addOnCompletion(new Synchronization() {
                 public void onComplete(Exchange exchange) {
                     processCommit(exchange, unreadLabelId);
                 }
diff --git a/components/camel-google/camel-google-pubsub/src/main/java/org/apache/camel/component/google/pubsub/GooglePubsubConsumer.java b/components/camel-google/camel-google-pubsub/src/main/java/org/apache/camel/component/google/pubsub/GooglePubsubConsumer.java
index ef3dc08a443..1d9d5012360 100644
--- a/components/camel-google/camel-google-pubsub/src/main/java/org/apache/camel/component/google/pubsub/GooglePubsubConsumer.java
+++ b/components/camel-google/camel-google-pubsub/src/main/java/org/apache/camel/component/google/pubsub/GooglePubsubConsumer.java
@@ -39,7 +39,6 @@ import com.google.pubsub.v1.PullRequest;
 import com.google.pubsub.v1.PullResponse;
 import com.google.pubsub.v1.ReceivedMessage;
 import org.apache.camel.Exchange;
-import org.apache.camel.ExtendedExchange;
 import org.apache.camel.Processor;
 import org.apache.camel.component.google.pubsub.consumer.AcknowledgeSync;
 import org.apache.camel.component.google.pubsub.consumer.CamelMessageReceiver;
@@ -195,7 +194,7 @@ public class GooglePubsubConsumer extends DefaultConsumer {
                             //existing subscriber can not be propagated, because it will be closed at the end of this block
                             //subscriber will be created at the moment of use
                             // (see  https://issues.apache.org/jira/browse/CAMEL-18447)
-                            exchange.adapt(ExtendedExchange.class)
+                            exchange.getExchangeExtension()
                                     .addOnCompletion(new AcknowledgeSync(
                                             () -> endpoint.getComponent().getSubscriberStub(endpoint), subscriptionName));
                         }
diff --git a/components/camel-google/camel-google-pubsub/src/main/java/org/apache/camel/component/google/pubsub/consumer/CamelMessageReceiver.java b/components/camel-google/camel-google-pubsub/src/main/java/org/apache/camel/component/google/pubsub/consumer/CamelMessageReceiver.java
index d26d649af7a..470d7396d80 100644
--- a/components/camel-google/camel-google-pubsub/src/main/java/org/apache/camel/component/google/pubsub/consumer/CamelMessageReceiver.java
+++ b/components/camel-google/camel-google-pubsub/src/main/java/org/apache/camel/component/google/pubsub/consumer/CamelMessageReceiver.java
@@ -21,7 +21,6 @@ import com.google.cloud.pubsub.v1.MessageReceiver;
 import com.google.common.base.Strings;
 import com.google.pubsub.v1.PubsubMessage;
 import org.apache.camel.Exchange;
-import org.apache.camel.ExtendedExchange;
 import org.apache.camel.Processor;
 import org.apache.camel.component.google.pubsub.GooglePubsubConstants;
 import org.apache.camel.component.google.pubsub.GooglePubsubConsumer;
@@ -64,7 +63,7 @@ public class CamelMessageReceiver implements MessageReceiver {
         }
 
         if (endpoint.getAckMode() != GooglePubsubConstants.AckMode.NONE) {
-            exchange.adapt(ExtendedExchange.class).addOnCompletion(new AcknowledgeAsync(ackReplyConsumer));
+            exchange.getExchangeExtension().addOnCompletion(new AcknowledgeAsync(ackReplyConsumer));
         }
 
         try {
diff --git a/components/camel-google/camel-google-storage/src/main/java/org/apache/camel/component/google/storage/GoogleCloudStorageConsumer.java b/components/camel-google/camel-google-storage/src/main/java/org/apache/camel/component/google/storage/GoogleCloudStorageConsumer.java
index 6f839702b55..7b488098706 100644
--- a/components/camel-google/camel-google-storage/src/main/java/org/apache/camel/component/google/storage/GoogleCloudStorageConsumer.java
+++ b/components/camel-google/camel-google-storage/src/main/java/org/apache/camel/component/google/storage/GoogleCloudStorageConsumer.java
@@ -33,7 +33,6 @@ import org.apache.camel.Exchange;
 import org.apache.camel.ExchangePattern;
 import org.apache.camel.ExchangePropertyKey;
 import org.apache.camel.Expression;
-import org.apache.camel.ExtendedExchange;
 import org.apache.camel.Message;
 import org.apache.camel.Processor;
 import org.apache.camel.RuntimeCamelException;
@@ -198,7 +197,7 @@ public class GoogleCloudStorageConsumer extends ScheduledBatchPollingConsumer {
             pendingExchanges = total - index - 1;
 
             // add on completion to handle after work when the exchange is done
-            exchange.adapt(ExtendedExchange.class).addOnCompletion(new Synchronization() {
+            exchange.getExchangeExtension().addOnCompletion(new Synchronization() {
                 public void onComplete(Exchange exchange) {
                     processCommit(exchange);
                 }
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 04aa2d8191d..cad827fc62d 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
@@ -37,7 +37,6 @@ import java.util.Map.Entry;
 import org.apache.camel.CamelExchangeException;
 import org.apache.camel.Exchange;
 import org.apache.camel.ExchangePropertyKey;
-import org.apache.camel.ExtendedExchange;
 import org.apache.camel.Message;
 import org.apache.camel.TypeConverter;
 import org.apache.camel.component.file.GenericFile;
@@ -298,7 +297,7 @@ public class HttpProducer extends DefaultProducer {
             final HttpResponse response = httpResponse;
             if (httpResponse != null && getEndpoint().isDisableStreamCache()) {
                 // close the stream at the end of the exchange to ensure it gets eventually closed later
-                exchange.adapt(ExtendedExchange.class).addOnCompletion(new SynchronizationAdapter() {
+                exchange.getExchangeExtension().addOnCompletion(new SynchronizationAdapter() {
                     @Override
                     public void onDone(Exchange exchange) {
                         try {
diff --git a/components/camel-huawei/camel-huaweicloud-obs/src/main/java/org/apache/camel/component/huaweicloud/obs/OBSConsumer.java b/components/camel-huawei/camel-huaweicloud-obs/src/main/java/org/apache/camel/component/huaweicloud/obs/OBSConsumer.java
index a0f3d8ca44e..89412cdb101 100644
--- a/components/camel-huawei/camel-huaweicloud-obs/src/main/java/org/apache/camel/component/huaweicloud/obs/OBSConsumer.java
+++ b/components/camel-huawei/camel-huaweicloud-obs/src/main/java/org/apache/camel/component/huaweicloud/obs/OBSConsumer.java
@@ -31,7 +31,6 @@ import com.obs.services.model.ObsObject;
 import org.apache.camel.AsyncCallback;
 import org.apache.camel.Exchange;
 import org.apache.camel.ExchangePropertyKey;
-import org.apache.camel.ExtendedExchange;
 import org.apache.camel.Processor;
 import org.apache.camel.component.huaweicloud.obs.constants.OBSHeaders;
 import org.apache.camel.spi.Synchronization;
@@ -167,7 +166,7 @@ public class OBSConsumer extends ScheduledBatchPollingConsumer {
             // update number of pending exchanges
             pendingExchanges = total - index - 1;
 
-            exchange.adapt(ExtendedExchange.class).addOnCompletion(new Synchronization() {
+            exchange.getExchangeExtension().addOnCompletion(new Synchronization() {
                 @Override
                 public void onComplete(Exchange exchange) {
                     processComplete(exchange);
diff --git a/components/camel-ignite/src/main/java/org/apache/camel/component/ignite/cache/IgniteCacheProducer.java b/components/camel-ignite/src/main/java/org/apache/camel/component/ignite/cache/IgniteCacheProducer.java
index 59422e6e679..ebcb4f5552b 100644
--- a/components/camel-ignite/src/main/java/org/apache/camel/component/ignite/cache/IgniteCacheProducer.java
+++ b/components/camel-ignite/src/main/java/org/apache/camel/component/ignite/cache/IgniteCacheProducer.java
@@ -22,7 +22,6 @@ import java.util.Set;
 
 import org.apache.camel.AsyncCallback;
 import org.apache.camel.Exchange;
-import org.apache.camel.ExtendedExchange;
 import org.apache.camel.InvalidPayloadException;
 import org.apache.camel.Message;
 import org.apache.camel.RuntimeCamelException;
@@ -144,7 +143,7 @@ public class IgniteCacheProducer extends DefaultAsyncProducer {
 
         out.setBody(cursor.iterator());
 
-        exchange.adapt(ExtendedExchange.class).addOnCompletion(new Synchronization() {
+        exchange.getExchangeExtension().addOnCompletion(new Synchronization() {
             @Override
             public void onFailure(Exchange exchange) {
                 cursor.close();
diff --git a/components/camel-ironmq/src/main/java/org/apache/camel/component/ironmq/IronMQConsumer.java b/components/camel-ironmq/src/main/java/org/apache/camel/component/ironmq/IronMQConsumer.java
index 21a21cc9eca..6bad0e60fe5 100644
--- a/components/camel-ironmq/src/main/java/org/apache/camel/component/ironmq/IronMQConsumer.java
+++ b/components/camel-ironmq/src/main/java/org/apache/camel/component/ironmq/IronMQConsumer.java
@@ -25,7 +25,6 @@ import io.iron.ironmq.Messages;
 import org.apache.camel.Endpoint;
 import org.apache.camel.Exchange;
 import org.apache.camel.ExchangePropertyKey;
-import org.apache.camel.ExtendedExchange;
 import org.apache.camel.Processor;
 import org.apache.camel.spi.ScheduledPollConsumerScheduler;
 import org.apache.camel.spi.Synchronization;
@@ -122,7 +121,7 @@ public class IronMQConsumer extends ScheduledBatchPollingConsumer {
             // add on completion to handle after work when the exchange is done
             // if batchDelete is not enabled
             if (!getEndpoint().getConfiguration().isBatchDelete()) {
-                exchange.adapt(ExtendedExchange.class).addOnCompletion(new Synchronization() {
+                exchange.getExchangeExtension().addOnCompletion(new Synchronization() {
                     final String reservationId
                             = ExchangeHelper.getMandatoryHeader(exchange, IronMQConstants.MESSAGE_RESERVATION_ID, String.class);
                     final String messageid
diff --git a/components/camel-jdbc/src/main/java/org/apache/camel/component/jdbc/JdbcProducer.java b/components/camel-jdbc/src/main/java/org/apache/camel/component/jdbc/JdbcProducer.java
index a774d6249f2..03edc8fb1ab 100644
--- a/components/camel-jdbc/src/main/java/org/apache/camel/component/jdbc/JdbcProducer.java
+++ b/components/camel-jdbc/src/main/java/org/apache/camel/component/jdbc/JdbcProducer.java
@@ -31,7 +31,6 @@ import java.util.Map;
 import javax.sql.DataSource;
 
 import org.apache.camel.Exchange;
-import org.apache.camel.ExtendedExchange;
 import org.apache.camel.spi.Synchronization;
 import org.apache.camel.support.DefaultProducer;
 import org.apache.camel.support.PropertyBindingSupport;
@@ -203,7 +202,7 @@ public class JdbcProducer extends DefaultProducer {
             // are not using try-with-resources here.
             final Statement stmt = conn.createStatement();
             // ensure statement is closed (to not leak) when exchange is done
-            exchange.adapt(ExtendedExchange.class).addOnCompletion(new SynchronizationAdapter() {
+            exchange.getExchangeExtension().addOnCompletion(new SynchronizationAdapter() {
                 @Override
                 public void onDone(Exchange exchange) {
                     closeQuietly(stmt);
@@ -346,7 +345,7 @@ public class JdbcProducer extends DefaultProducer {
                     .setBody(new StreamListIterator(
                             getEndpoint().getCamelContext(), getEndpoint().getOutputClass(), getEndpoint().getBeanRowMapper(),
                             iterator));
-            exchange.adapt(ExtendedExchange.class).addOnCompletion(new ResultSetIteratorCompletion(iterator));
+            exchange.getExchangeExtension().addOnCompletion(new ResultSetIteratorCompletion(iterator));
             // do not close resources as we are in streaming mode
             answer = false;
         } else if (outputType == JdbcOutputType.SelectList) {
diff --git a/components/camel-kamelet/src/test/java/org/apache/camel/component/kamelet/KameletConsumerUoWIssueTest.java b/components/camel-kamelet/src/test/java/org/apache/camel/component/kamelet/KameletConsumerUoWIssueTest.java
index 9494eaa06cb..6eff0c9d778 100644
--- a/components/camel-kamelet/src/test/java/org/apache/camel/component/kamelet/KameletConsumerUoWIssueTest.java
+++ b/components/camel-kamelet/src/test/java/org/apache/camel/component/kamelet/KameletConsumerUoWIssueTest.java
@@ -17,7 +17,6 @@
 package org.apache.camel.component.kamelet;
 
 import org.apache.camel.Exchange;
-import org.apache.camel.ExtendedExchange;
 import org.apache.camel.Processor;
 import org.apache.camel.RoutesBuilder;
 import org.apache.camel.builder.RouteBuilder;
@@ -54,7 +53,7 @@ public class KameletConsumerUoWIssueTest extends CamelTestSupport {
                         .process(new Processor() {
                             @Override
                             public void process(Exchange exchange) {
-                                exchange.adapt(ExtendedExchange.class).addOnCompletion(new SynchronizationAdapter() {
+                                exchange.getExchangeExtension().addOnCompletion(new SynchronizationAdapter() {
                                     @Override
                                     public void onDone(Exchange exchange) {
                                         super.onDone(exchange);
diff --git a/components/camel-kamelet/src/test/java/org/apache/camel/component/kamelet/KameletUoWIssueTest.java b/components/camel-kamelet/src/test/java/org/apache/camel/component/kamelet/KameletUoWIssueTest.java
index 919fa226d4d..eda294564d4 100644
--- a/components/camel-kamelet/src/test/java/org/apache/camel/component/kamelet/KameletUoWIssueTest.java
+++ b/components/camel-kamelet/src/test/java/org/apache/camel/component/kamelet/KameletUoWIssueTest.java
@@ -17,7 +17,6 @@
 package org.apache.camel.component.kamelet;
 
 import org.apache.camel.Exchange;
-import org.apache.camel.ExtendedExchange;
 import org.apache.camel.Processor;
 import org.apache.camel.RoutesBuilder;
 import org.apache.camel.builder.RouteBuilder;
@@ -54,7 +53,7 @@ public class KameletUoWIssueTest extends CamelTestSupport {
                         .process(new Processor() {
                             @Override
                             public void process(Exchange exchange) {
-                                exchange.adapt(ExtendedExchange.class).addOnCompletion(new SynchronizationAdapter() {
+                                exchange.getExchangeExtension().addOnCompletion(new SynchronizationAdapter() {
                                     @Override
                                     public void onDone(Exchange exchange) {
                                         super.onDone(exchange);
diff --git a/components/camel-mail/src/main/java/org/apache/camel/component/mail/MailConsumer.java b/components/camel-mail/src/main/java/org/apache/camel/component/mail/MailConsumer.java
index ffde63a2068..3304f10b1c3 100644
--- a/components/camel-mail/src/main/java/org/apache/camel/component/mail/MailConsumer.java
+++ b/components/camel-mail/src/main/java/org/apache/camel/component/mail/MailConsumer.java
@@ -39,7 +39,6 @@ import com.sun.mail.imap.SortTerm;
 import org.apache.camel.Exchange;
 import org.apache.camel.ExchangePropertyKey;
 import org.apache.camel.ExtendedCamelContext;
-import org.apache.camel.ExtendedExchange;
 import org.apache.camel.Processor;
 import org.apache.camel.RuntimeCamelException;
 import org.apache.camel.attachment.Attachment;
@@ -235,7 +234,7 @@ public class MailConsumer extends ScheduledBatchPollingConsumer {
             final Message mail = exchange.getIn(MailMessage.class).getOriginalMessage();
 
             // add on completion to handle after work when the exchange is done
-            exchange.adapt(ExtendedExchange.class).addOnCompletion(new SynchronizationAdapter() {
+            exchange.getExchangeExtension().addOnCompletion(new SynchronizationAdapter() {
                 @Override
                 public void onComplete(Exchange exchange) {
                     processCommit(mail, exchange);
diff --git a/components/camel-minio/src/main/java/org/apache/camel/component/minio/MinioConsumer.java b/components/camel-minio/src/main/java/org/apache/camel/component/minio/MinioConsumer.java
index f693a53a79f..49647d77814 100644
--- a/components/camel-minio/src/main/java/org/apache/camel/component/minio/MinioConsumer.java
+++ b/components/camel-minio/src/main/java/org/apache/camel/component/minio/MinioConsumer.java
@@ -38,7 +38,6 @@ import io.minio.errors.MinioException;
 import io.minio.messages.Item;
 import org.apache.camel.Exchange;
 import org.apache.camel.ExchangePropertyKey;
-import org.apache.camel.ExtendedExchange;
 import org.apache.camel.Message;
 import org.apache.camel.Processor;
 import org.apache.camel.spi.Synchronization;
@@ -272,7 +271,7 @@ public class MinioConsumer extends ScheduledBatchPollingConsumer {
                     minioObject = getObject(srcBucketName, getMinioClient(), srcObjectName);
                     exchange.getIn().setBody(IOUtils.toByteArray(minioObject));
                     if (getConfiguration().isAutoCloseBody()) {
-                        exchange.adapt(ExtendedExchange.class).addOnCompletion(new SynchronizationAdapter() {
+                        exchange.getExchangeExtension().addOnCompletion(new SynchronizationAdapter() {
                             @Override
                             public void onDone(Exchange exchange) {
                                 IOHelper.close(minioObject);
@@ -286,7 +285,7 @@ public class MinioConsumer extends ScheduledBatchPollingConsumer {
             }
 
             // add on completion to handle after work when the exchange is done
-            exchange.adapt(ExtendedExchange.class).addOnCompletion(new Synchronization() {
+            exchange.getExchangeExtension().addOnCompletion(new Synchronization() {
                 public void onComplete(Exchange exchange) {
                     processCommit(exchange);
                 }
diff --git a/components/camel-netty-http/src/main/java/org/apache/camel/component/netty/http/DefaultNettyHttpBinding.java b/components/camel-netty-http/src/main/java/org/apache/camel/component/netty/http/DefaultNettyHttpBinding.java
index e3750efb9d9..b1e949593ab 100644
--- a/components/camel-netty-http/src/main/java/org/apache/camel/component/netty/http/DefaultNettyHttpBinding.java
+++ b/components/camel-netty-http/src/main/java/org/apache/camel/component/netty/http/DefaultNettyHttpBinding.java
@@ -105,7 +105,7 @@ public class DefaultNettyHttpBinding implements NettyHttpBinding, Cloneable {
             // we need to retain it so that the request can be released and we can keep the content
             answer.setBody(request.content().retain());
             answer.getExchange().adapt(ExtendedExchange.class).setStreamCacheDisabled(true);
-            exchange.adapt(ExtendedExchange.class).addOnCompletion(new SynchronizationAdapter() {
+            exchange.getExchangeExtension().addOnCompletion(new SynchronizationAdapter() {
                 @Override
                 public void onDone(Exchange exchange) {
                     ReferenceCountUtil.release(request.content());
@@ -115,7 +115,7 @@ public class DefaultNettyHttpBinding implements NettyHttpBinding, Cloneable {
             // turn the body into stream cached (on the client/consumer side we can facade the netty stream instead of converting to byte array)
             NettyChannelBufferStreamCache cache = new NettyChannelBufferStreamCache(request.content());
             // add on completion to the cache which is needed for Camel to keep track of the lifecycle of the cache
-            exchange.adapt(ExtendedExchange.class).addOnCompletion(new NettyChannelBufferStreamCacheOnCompletion(cache));
+            exchange.getExchangeExtension().addOnCompletion(new NettyChannelBufferStreamCacheOnCompletion(cache));
             answer.setBody(cache);
         }
         return answer;
diff --git a/components/camel-netty-http/src/main/java/org/apache/camel/component/netty/http/NettyHttpProducer.java b/components/camel-netty-http/src/main/java/org/apache/camel/component/netty/http/NettyHttpProducer.java
index 0baa9b67b36..e615b624cd9 100644
--- a/components/camel-netty-http/src/main/java/org/apache/camel/component/netty/http/NettyHttpProducer.java
+++ b/components/camel-netty-http/src/main/java/org/apache/camel/component/netty/http/NettyHttpProducer.java
@@ -148,7 +148,7 @@ public class NettyHttpProducer extends NettyProducer {
                             response.content().retain();
 
                             // need to release the response when we are done
-                            exchange.adapt(ExtendedExchange.class).addOnCompletion(new SynchronizationAdapter() {
+                            exchange.getExchangeExtension().addOnCompletion(new SynchronizationAdapter() {
                                 @Override
                                 public void onDone(Exchange exchange) {
                                     if (response.refCnt() > 0) {
diff --git a/components/camel-netty/src/main/java/org/apache/camel/component/netty/NettyProducer.java b/components/camel-netty/src/main/java/org/apache/camel/component/netty/NettyProducer.java
index 0683f07ad17..71a4a23bb5a 100644
--- a/components/camel-netty/src/main/java/org/apache/camel/component/netty/NettyProducer.java
+++ b/components/camel-netty/src/main/java/org/apache/camel/component/netty/NettyProducer.java
@@ -47,7 +47,6 @@ import org.apache.camel.CamelContextAware;
 import org.apache.camel.CamelExchangeException;
 import org.apache.camel.Exchange;
 import org.apache.camel.ExchangePropertyKey;
-import org.apache.camel.ExtendedExchange;
 import org.apache.camel.spi.CamelLogger;
 import org.apache.camel.support.DefaultAsyncProducer;
 import org.apache.camel.support.ExchangeHelper;
@@ -291,7 +290,7 @@ public class NettyProducer extends DefaultAsyncProducer {
             channel.attr(CORRELATION_MANAGER_ATTR).set(correlationManager);
             exchange.setProperty(NettyConstants.NETTY_CHANNEL, channel);
             // and defer closing the channel until we are done routing the exchange
-            exchange.adapt(ExtendedExchange.class).addOnCompletion(new SynchronizationAdapter() {
+            exchange.getExchangeExtension().addOnCompletion(new SynchronizationAdapter() {
                 @Override
                 public void onComplete(Exchange exchange) {
                     // should channel be closed after complete?
diff --git a/components/camel-pg-replication-slot/src/main/java/org/apache/camel/component/pg/replication/slot/PgReplicationSlotConsumer.java b/components/camel-pg-replication-slot/src/main/java/org/apache/camel/component/pg/replication/slot/PgReplicationSlotConsumer.java
index ad278b0e62c..28b11762148 100644
--- a/components/camel-pg-replication-slot/src/main/java/org/apache/camel/component/pg/replication/slot/PgReplicationSlotConsumer.java
+++ b/components/camel-pg-replication-slot/src/main/java/org/apache/camel/component/pg/replication/slot/PgReplicationSlotConsumer.java
@@ -28,7 +28,6 @@ import java.util.concurrent.ScheduledFuture;
 import java.util.concurrent.TimeUnit;
 
 import org.apache.camel.Exchange;
-import org.apache.camel.ExtendedExchange;
 import org.apache.camel.Message;
 import org.apache.camel.Processor;
 import org.apache.camel.spi.Synchronization;
@@ -141,7 +140,7 @@ public class PgReplicationSlotConsumer extends ScheduledPollConsumer {
             }
         }, delay, delay, TimeUnit.SECONDS);
 
-        exchange.adapt(ExtendedExchange.class).addOnCompletion(new Synchronization() {
+        exchange.getExchangeExtension().addOnCompletion(new Synchronization() {
             @Override
             public void onComplete(Exchange exchange) {
                 processCommit(exchange);
diff --git a/components/camel-reactive-streams/src/main/java/org/apache/camel/component/reactive/streams/engine/DefaultCamelReactiveStreamsService.java b/components/camel-reactive-streams/src/main/java/org/apache/camel/component/reactive/streams/engine/DefaultCamelReactiveStreamsService.java
index f5a15b2ad12..c77c84e2d5c 100644
--- a/components/camel-reactive-streams/src/main/java/org/apache/camel/component/reactive/streams/engine/DefaultCamelReactiveStreamsService.java
+++ b/components/camel-reactive-streams/src/main/java/org/apache/camel/component/reactive/streams/engine/DefaultCamelReactiveStreamsService.java
@@ -35,7 +35,6 @@ import javax.management.openmbean.TabularType;
 
 import org.apache.camel.CamelContext;
 import org.apache.camel.Exchange;
-import org.apache.camel.ExtendedExchange;
 import org.apache.camel.RuntimeCamelException;
 import org.apache.camel.api.management.ManagedOperation;
 import org.apache.camel.api.management.ManagedResource;
@@ -175,7 +174,7 @@ public class DefaultCamelReactiveStreamsService extends ServiceSupport implement
 
         DelayedMonoPublisher<Exchange> publisher = new DelayedMonoPublisher<>(this.workerPool);
 
-        data.adapt(ExtendedExchange.class).addOnCompletion(new Synchronization() {
+        data.getExchangeExtension().addOnCompletion(new Synchronization() {
             @Override
             public void onComplete(Exchange exchange) {
                 publisher.setData(exchange);
diff --git a/components/camel-reactor/src/main/java/org/apache/camel/component/reactor/engine/ReactorStreamsService.java b/components/camel-reactor/src/main/java/org/apache/camel/component/reactor/engine/ReactorStreamsService.java
index dbc7f8ffe11..407dddcf820 100644
--- a/components/camel-reactor/src/main/java/org/apache/camel/component/reactor/engine/ReactorStreamsService.java
+++ b/components/camel-reactor/src/main/java/org/apache/camel/component/reactor/engine/ReactorStreamsService.java
@@ -23,7 +23,6 @@ import java.util.function.Supplier;
 
 import org.apache.camel.CamelContext;
 import org.apache.camel.Exchange;
-import org.apache.camel.ExtendedExchange;
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.component.reactive.streams.ReactiveStreamsCamelSubscriber;
 import org.apache.camel.component.reactive.streams.ReactiveStreamsConsumer;
@@ -316,7 +315,7 @@ final class ReactorStreamsService extends ServiceSupport implements CamelReactiv
         }
 
         return Mono.<Exchange> create(
-                sink -> data.adapt(ExtendedExchange.class).addOnCompletion(new Synchronization() {
+                sink -> data.getExchangeExtension().addOnCompletion(new Synchronization() {
                     @Override
                     public void onComplete(Exchange exchange) {
                         sink.success(exchange);
diff --git a/components/camel-rxjava/src/main/java/org/apache/camel/component/rxjava/engine/RxJavaStreamsService.java b/components/camel-rxjava/src/main/java/org/apache/camel/component/rxjava/engine/RxJavaStreamsService.java
index bb3623ab313..7dcf1a5df23 100644
--- a/components/camel-rxjava/src/main/java/org/apache/camel/component/rxjava/engine/RxJavaStreamsService.java
+++ b/components/camel-rxjava/src/main/java/org/apache/camel/component/rxjava/engine/RxJavaStreamsService.java
@@ -25,7 +25,6 @@ import io.reactivex.Flowable;
 import io.reactivex.Single;
 import org.apache.camel.CamelContext;
 import org.apache.camel.Exchange;
-import org.apache.camel.ExtendedExchange;
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.component.reactive.streams.ReactiveStreamsCamelSubscriber;
 import org.apache.camel.component.reactive.streams.ReactiveStreamsConsumer;
@@ -304,7 +303,7 @@ final class RxJavaStreamsService extends ServiceSupport implements CamelReactive
         }
 
         Single<Exchange> source = Single.<Exchange> create(
-                emitter -> data.adapt(ExtendedExchange.class).addOnCompletion(new Synchronization() {
+                emitter -> data.getExchangeExtension().addOnCompletion(new Synchronization() {
                     @Override
                     public void onComplete(Exchange exchange) {
                         emitter.onSuccess(exchange);
diff --git a/components/camel-seda/src/main/java/org/apache/camel/component/seda/SedaProducer.java b/components/camel-seda/src/main/java/org/apache/camel/component/seda/SedaProducer.java
index c7a65142957..f75b47b7c09 100644
--- a/components/camel-seda/src/main/java/org/apache/camel/component/seda/SedaProducer.java
+++ b/components/camel-seda/src/main/java/org/apache/camel/component/seda/SedaProducer.java
@@ -23,7 +23,6 @@ import java.util.concurrent.TimeUnit;
 import org.apache.camel.AsyncCallback;
 import org.apache.camel.Exchange;
 import org.apache.camel.ExchangeTimedOutException;
-import org.apache.camel.ExtendedExchange;
 import org.apache.camel.WaitForTaskToComplete;
 import org.apache.camel.support.DefaultAsyncProducer;
 import org.apache.camel.support.ExchangeHelper;
@@ -69,7 +68,7 @@ public class SedaProducer extends DefaultAsyncProducer {
             final CountDownLatch latch = new CountDownLatch(1);
 
             // we should wait for the reply so install a on completion so we know when its complete
-            copy.adapt(ExtendedExchange.class).addOnCompletion(new SynchronizationAdapter() {
+            copy.getExchangeExtension().addOnCompletion(new SynchronizationAdapter() {
                 @Override
                 public void onDone(Exchange response) {
                     // check for timeout, which then already would have invoked the latch
diff --git a/components/camel-sjms/src/main/java/org/apache/camel/component/sjms/SjmsTemplate.java b/components/camel-sjms/src/main/java/org/apache/camel/component/sjms/SjmsTemplate.java
index e56211edc9b..12bdc59b822 100644
--- a/components/camel-sjms/src/main/java/org/apache/camel/component/sjms/SjmsTemplate.java
+++ b/components/camel-sjms/src/main/java/org/apache/camel/component/sjms/SjmsTemplate.java
@@ -26,14 +26,18 @@ import jakarta.jms.MessageProducer;
 import jakarta.jms.Session;
 
 import org.apache.camel.Exchange;
-import org.apache.camel.ExtendedExchange;
 import org.apache.camel.component.sjms.jms.DestinationCreationStrategy;
 import org.apache.camel.component.sjms.jms.JmsConstants;
 import org.apache.camel.component.sjms.jms.JmsMessageHelper;
 import org.apache.camel.component.sjms.jms.MessageCreator;
 import org.apache.camel.util.ObjectHelper;
 
-import static org.apache.camel.component.sjms.SjmsHelper.*;
+import static org.apache.camel.component.sjms.SjmsHelper.closeConnection;
+import static org.apache.camel.component.sjms.SjmsHelper.closeConsumer;
+import static org.apache.camel.component.sjms.SjmsHelper.closeProducer;
+import static org.apache.camel.component.sjms.SjmsHelper.closeSession;
+import static org.apache.camel.component.sjms.SjmsHelper.commitIfNeeded;
+import static org.apache.camel.component.sjms.SjmsHelper.isTransactionOrClientAcknowledgeMode;
 
 public class SjmsTemplate {
 
@@ -148,10 +152,9 @@ public class SjmsTemplate {
                 try {
                     if (transacted) {
                         // defer closing till end of UoW
-                        ExtendedExchange ecc = exchange.adapt(ExtendedExchange.class);
                         TransactionOnCompletion toc = new TransactionOnCompletion(session, this.message);
-                        if (!ecc.containsOnCompletion(toc)) {
-                            ecc.addOnCompletion(toc);
+                        if (!exchange.getExchangeExtension().containsOnCompletion(toc)) {
+                            exchange.getExchangeExtension().addOnCompletion(toc);
                         }
                     } else {
                         closeSession(session);
diff --git a/components/camel-sql/src/main/java/org/apache/camel/component/sql/SqlProducer.java b/components/camel-sql/src/main/java/org/apache/camel/component/sql/SqlProducer.java
index 7af835a77fb..1852c8f4cbf 100644
--- a/components/camel-sql/src/main/java/org/apache/camel/component/sql/SqlProducer.java
+++ b/components/camel-sql/src/main/java/org/apache/camel/component/sql/SqlProducer.java
@@ -26,7 +26,6 @@ import java.util.Iterator;
 import java.util.List;
 
 import org.apache.camel.Exchange;
-import org.apache.camel.ExtendedExchange;
 import org.apache.camel.support.DefaultProducer;
 import org.apache.camel.support.ResourceHelper;
 import org.slf4j.Logger;
@@ -231,7 +230,7 @@ public class SqlProducer extends DefaultProducer {
 
                 // we do not know the row count so we cannot set a ROW_COUNT header
                 // defer closing the iterator when the exchange is complete
-                exchange.adapt(ExtendedExchange.class).addOnCompletion(new ResultSetIteratorCompletion(iterator));
+                exchange.getExchangeExtension().addOnCompletion(new ResultSetIteratorCompletion(iterator));
             }
             return iterator;
         } catch (Exception e) {
diff --git a/components/camel-tarfile/src/main/java/org/apache/camel/processor/aggregate/tarfile/TarAggregationStrategy.java b/components/camel-tarfile/src/main/java/org/apache/camel/processor/aggregate/tarfile/TarAggregationStrategy.java
index 76710b322dd..0699f05b227 100644
--- a/components/camel-tarfile/src/main/java/org/apache/camel/processor/aggregate/tarfile/TarAggregationStrategy.java
+++ b/components/camel-tarfile/src/main/java/org/apache/camel/processor/aggregate/tarfile/TarAggregationStrategy.java
@@ -153,7 +153,7 @@ public class TarAggregationStrategy implements AggregationStrategy {
                 throw new GenericFileOperationFailedException(e.getMessage(), e);
             }
             answer = newExchange;
-            answer.adapt(ExtendedExchange.class).addOnCompletion(new DeleteTarFileOnCompletion(tarFile));
+            answer.getExchangeExtension().addOnCompletion(new DeleteTarFileOnCompletion(tarFile));
         } else {
             tarFile = oldExchange.getIn().getBody(File.class);
         }
diff --git a/components/camel-xslt/src/main/java/org/apache/camel/component/xslt/XsltBuilder.java b/components/camel-xslt/src/main/java/org/apache/camel/component/xslt/XsltBuilder.java
index 0fc6904e955..dbe4c8f669f 100644
--- a/components/camel-xslt/src/main/java/org/apache/camel/component/xslt/XsltBuilder.java
+++ b/components/camel-xslt/src/main/java/org/apache/camel/component/xslt/XsltBuilder.java
@@ -40,7 +40,6 @@ import javax.xml.transform.stream.StreamSource;
 import org.xml.sax.EntityResolver;
 
 import org.apache.camel.Exchange;
-import org.apache.camel.ExtendedExchange;
 import org.apache.camel.Message;
 import org.apache.camel.Processor;
 import org.apache.camel.support.ExchangeHelper;
@@ -51,6 +50,7 @@ import org.apache.camel.util.IOHelper;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+
 import static org.apache.camel.util.ObjectHelper.notNull;
 
 /**
@@ -96,7 +96,7 @@ public class XsltBuilder implements Processor {
         if (isDeleteOutputFile()) {
             // add on completion so we can delete the file when the Exchange is done
             String fileName = ExchangeHelper.getMandatoryHeader(exchange, XsltConstants.XSLT_FILE_NAME, String.class);
-            exchange.adapt(ExtendedExchange.class).addOnCompletion(new XsltBuilderOnCompletion(fileName));
+            exchange.getExchangeExtension().addOnCompletion(new XsltBuilderOnCompletion(fileName));
         }
 
         Transformer transformer = getTransformer();
diff --git a/components/camel-zipfile/src/main/java/org/apache/camel/processor/aggregate/zipfile/ZipAggregationStrategy.java b/components/camel-zipfile/src/main/java/org/apache/camel/processor/aggregate/zipfile/ZipAggregationStrategy.java
index 9d8d3d3c54d..b13df829839 100644
--- a/components/camel-zipfile/src/main/java/org/apache/camel/processor/aggregate/zipfile/ZipAggregationStrategy.java
+++ b/components/camel-zipfile/src/main/java/org/apache/camel/processor/aggregate/zipfile/ZipAggregationStrategy.java
@@ -170,7 +170,7 @@ public class ZipAggregationStrategy implements AggregationStrategy {
                 throw new GenericFileOperationFailedException(e.getMessage(), e);
             }
             answer = newExchange;
-            answer.adapt(ExtendedExchange.class).addOnCompletion(new DeleteZipFileOnCompletion(zipFile));
+            answer.getExchangeExtension().addOnCompletion(new DeleteZipFileOnCompletion(zipFile));
         } else {
             zipFile = oldExchange.getIn().getBody(File.class);
         }
diff --git a/core/camel-core/src/test/java/org/apache/camel/component/seda/SedaDiscardIfNoConsumerTest.java b/core/camel-core/src/test/java/org/apache/camel/component/seda/SedaDiscardIfNoConsumerTest.java
index 709e1eec559..07dd34a5a21 100644
--- a/core/camel-core/src/test/java/org/apache/camel/component/seda/SedaDiscardIfNoConsumerTest.java
+++ b/core/camel-core/src/test/java/org/apache/camel/component/seda/SedaDiscardIfNoConsumerTest.java
@@ -18,7 +18,6 @@ package org.apache.camel.component.seda;
 
 import org.apache.camel.ContextTestSupport;
 import org.apache.camel.Exchange;
-import org.apache.camel.ExtendedExchange;
 import org.apache.camel.Processor;
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.support.SynchronizationAdapter;
@@ -56,7 +55,7 @@ public class SedaDiscardIfNoConsumerTest extends ContextTestSupport {
             @Override
             public void process(Exchange exchange) throws Exception {
                 exchange.getIn().setBody("Hello World");
-                exchange.adapt(ExtendedExchange.class).addOnCompletion(myCompletion);
+                exchange.getExchangeExtension().addOnCompletion(myCompletion);
             }
         });
 
diff --git a/core/camel-core/src/test/java/org/apache/camel/component/seda/SedaInOutChainedWithOnCompletionTest.java b/core/camel-core/src/test/java/org/apache/camel/component/seda/SedaInOutChainedWithOnCompletionTest.java
index f420c82a030..62158d5e6a0 100644
--- a/core/camel-core/src/test/java/org/apache/camel/component/seda/SedaInOutChainedWithOnCompletionTest.java
+++ b/core/camel-core/src/test/java/org/apache/camel/component/seda/SedaInOutChainedWithOnCompletionTest.java
@@ -18,7 +18,6 @@ package org.apache.camel.component.seda;
 
 import org.apache.camel.ContextTestSupport;
 import org.apache.camel.Exchange;
-import org.apache.camel.ExtendedExchange;
 import org.apache.camel.Processor;
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.support.SynchronizationAdapter;
@@ -50,7 +49,7 @@ public class SedaInOutChainedWithOnCompletionTest extends ContextTestSupport {
                 from("seda:a").process(new Processor() {
                     public void process(Exchange exchange) throws Exception {
                         // should come in last
-                        exchange.adapt(ExtendedExchange.class).addOnCompletion(new SynchronizationAdapter() {
+                        exchange.getExchangeExtension().addOnCompletion(new SynchronizationAdapter() {
                             @Override
                             public void onDone(Exchange exchange) {
                                 template.sendBody("mock:c", "onCustomCompletion");
diff --git a/core/camel-core/src/test/java/org/apache/camel/component/seda/SedaWaitForTaskCompleteOnCompletionTest.java b/core/camel-core/src/test/java/org/apache/camel/component/seda/SedaWaitForTaskCompleteOnCompletionTest.java
index 2f15f4c0287..c12891081bb 100644
--- a/core/camel-core/src/test/java/org/apache/camel/component/seda/SedaWaitForTaskCompleteOnCompletionTest.java
+++ b/core/camel-core/src/test/java/org/apache/camel/component/seda/SedaWaitForTaskCompleteOnCompletionTest.java
@@ -19,7 +19,6 @@ package org.apache.camel.component.seda;
 import org.apache.camel.CamelExecutionException;
 import org.apache.camel.ContextTestSupport;
 import org.apache.camel.Exchange;
-import org.apache.camel.ExtendedExchange;
 import org.apache.camel.Processor;
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.support.SynchronizationAdapter;
@@ -60,7 +59,7 @@ public class SedaWaitForTaskCompleteOnCompletionTest extends ContextTestSupport
                 from("direct:start").process(new Processor() {
                     @Override
                     public void process(Exchange exchange) throws Exception {
-                        exchange.adapt(ExtendedExchange.class).addOnCompletion(new SynchronizationAdapter() {
+                        exchange.getExchangeExtension().addOnCompletion(new SynchronizationAdapter() {
                             @Override
                             public void onDone(Exchange exchange) {
                                 done = done + "A";
diff --git a/core/camel-core/src/test/java/org/apache/camel/component/seda/SedaWaitForTaskNewerOnCompletionTest.java b/core/camel-core/src/test/java/org/apache/camel/component/seda/SedaWaitForTaskNewerOnCompletionTest.java
index af99379528b..13dc1b15bd3 100644
--- a/core/camel-core/src/test/java/org/apache/camel/component/seda/SedaWaitForTaskNewerOnCompletionTest.java
+++ b/core/camel-core/src/test/java/org/apache/camel/component/seda/SedaWaitForTaskNewerOnCompletionTest.java
@@ -21,7 +21,6 @@ import java.util.concurrent.TimeUnit;
 
 import org.apache.camel.ContextTestSupport;
 import org.apache.camel.Exchange;
-import org.apache.camel.ExtendedExchange;
 import org.apache.camel.Processor;
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.support.SynchronizationAdapter;
@@ -59,7 +58,7 @@ public class SedaWaitForTaskNewerOnCompletionTest extends ContextTestSupport {
                 from("direct:start").process(new Processor() {
                     @Override
                     public void process(Exchange exchange) throws Exception {
-                        exchange.adapt(ExtendedExchange.class).addOnCompletion(new SynchronizationAdapter() {
+                        exchange.getExchangeExtension().addOnCompletion(new SynchronizationAdapter() {
                             @Override
                             public void onDone(Exchange exchange) {
                                 done = done + "A";


[camel] 22/23: CAMEL-15105: deprecated and cleaned up the ExtendedExchange API interface

Posted by or...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

orpiske pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/camel.git

commit 94b807e5c5e29f3f337751b23229cc0b1bcc40d5
Author: Otavio Rodolfo Piske <an...@gmail.com>
AuthorDate: Wed Nov 23 08:49:51 2022 +0100

    CAMEL-15105: deprecated and cleaned up the ExtendedExchange API interface
---
 .../src/main/java/org/apache/camel/Exchange.java   |   1 +
 .../main/java/org/apache/camel/PooledExchange.java |   2 +-
 .../org/apache/camel/support/AbstractExchange.java | 147 ++-------------------
 3 files changed, 16 insertions(+), 134 deletions(-)

diff --git a/core/camel-api/src/main/java/org/apache/camel/Exchange.java b/core/camel-api/src/main/java/org/apache/camel/Exchange.java
index 1ad47031e7b..cbd050a93e5 100644
--- a/core/camel-api/src/main/java/org/apache/camel/Exchange.java
+++ b/core/camel-api/src/main/java/org/apache/camel/Exchange.java
@@ -275,6 +275,7 @@ public interface Exchange {
      * @param  type the type to adapt to
      * @return      this {@link org.apache.camel.Exchange} adapted to the given type
      */
+    @Deprecated
     <T extends Exchange> T adapt(Class<T> type);
 
     /**
diff --git a/core/camel-api/src/main/java/org/apache/camel/PooledExchange.java b/core/camel-api/src/main/java/org/apache/camel/PooledExchange.java
index 0c471a78a51..a1b85aa73ec 100644
--- a/core/camel-api/src/main/java/org/apache/camel/PooledExchange.java
+++ b/core/camel-api/src/main/java/org/apache/camel/PooledExchange.java
@@ -23,7 +23,7 @@ import org.apache.camel.spi.ExchangeFactory;
  * internally by Camel for optimizing memory footprint by reusing exchanges created by {@link Consumer}s via
  * {@link ExchangeFactory}.
  */
-public interface PooledExchange extends ExtendedExchange {
+public interface PooledExchange extends Exchange {
 
     /**
      * Task to execute when the exchange is done.
diff --git a/core/camel-support/src/main/java/org/apache/camel/support/AbstractExchange.java b/core/camel-support/src/main/java/org/apache/camel/support/AbstractExchange.java
index 72093d3afae..89883da2690 100644
--- a/core/camel-support/src/main/java/org/apache/camel/support/AbstractExchange.java
+++ b/core/camel-support/src/main/java/org/apache/camel/support/AbstractExchange.java
@@ -30,11 +30,9 @@ import org.apache.camel.CamelContext;
 import org.apache.camel.CamelExecutionException;
 import org.apache.camel.Endpoint;
 import org.apache.camel.Exchange;
-import org.apache.camel.ExchangeExtension;
 import org.apache.camel.ExchangePattern;
 import org.apache.camel.ExchangePropertyKey;
 import org.apache.camel.ExtendedCamelContext;
-import org.apache.camel.ExtendedExchange;
 import org.apache.camel.Message;
 import org.apache.camel.MessageHistory;
 import org.apache.camel.SafeCopyProperty;
@@ -54,7 +52,7 @@ import static org.apache.camel.support.MessageHelper.copyBody;
  *
  * @see DefaultExchange
  */
-class AbstractExchange implements ExtendedExchange {
+class AbstractExchange implements Exchange {
     // number of elements in array
     static final int INTERNAL_LENGTH = ExchangePropertyKey.values().length;
     // empty array for reset
@@ -365,8 +363,7 @@ class AbstractExchange implements ExtendedExchange {
         }
     }
 
-    @Override
-    public void setProperties(Map<String, Object> properties) {
+    void setProperties(Map<String, Object> properties) {
         if (this.properties == null) {
             this.properties = new ConcurrentHashMap<>(8);
         } else {
@@ -504,8 +501,7 @@ class AbstractExchange implements ExtendedExchange {
         return context.getTypeConverter().convertTo(type, this, in);
     }
 
-    @Override
-    public <T> T getInOrNull(Class<T> type) {
+    <T> T getInOrNull(Class<T> type) {
         if (in == null) {
             return null;
         }
@@ -630,21 +626,11 @@ class AbstractExchange implements ExtendedExchange {
         return fromEndpoint;
     }
 
-    @Override
-    public void setFromEndpoint(Endpoint fromEndpoint) {
-        this.fromEndpoint = fromEndpoint;
-    }
-
     @Override
     public String getFromRouteId() {
         return fromRouteId;
     }
 
-    @Override
-    public void setFromRouteId(String fromRouteId) {
-        this.fromRouteId = fromRouteId;
-    }
-
     @Override
     public String getExchangeId() {
         if (exchangeId == null) {
@@ -668,11 +654,6 @@ class AbstractExchange implements ExtendedExchange {
         return transacted;
     }
 
-    @Override
-    public void setTransacted(boolean transacted) {
-        this.transacted = transacted;
-    }
-
     @Override
     public boolean isRouteStop() {
         return routeStop;
@@ -726,8 +707,7 @@ class AbstractExchange implements ExtendedExchange {
         return unitOfWork;
     }
 
-    @Override
-    public void setUnitOfWork(UnitOfWork unitOfWork) {
+    void setUnitOfWork(UnitOfWork unitOfWork) {
         this.unitOfWork = unitOfWork;
         if (unitOfWork != null && onCompletions != null) {
             // now an unit of work has been assigned so add the on completions
@@ -742,8 +722,7 @@ class AbstractExchange implements ExtendedExchange {
         }
     }
 
-    @Override
-    public void addOnCompletion(Synchronization onCompletion) {
+    void addOnCompletion(Synchronization onCompletion) {
         if (unitOfWork == null) {
             // unit of work not yet registered so we store the on completion temporary
             // until the unit of work is assigned to this exchange by the unit of work
@@ -756,8 +735,7 @@ class AbstractExchange implements ExtendedExchange {
         }
     }
 
-    @Override
-    public boolean containsOnCompletion(Synchronization onCompletion) {
+    boolean containsOnCompletion(Synchronization onCompletion) {
         if (unitOfWork != null) {
             // if there is an unit of work then the completions is moved there
             return unitOfWork.containsSynchronization(onCompletion);
@@ -767,8 +745,7 @@ class AbstractExchange implements ExtendedExchange {
         }
     }
 
-    @Override
-    public void handoverCompletions(Exchange target) {
+    void handoverCompletions(Exchange target) {
         if (onCompletions != null) {
             for (Synchronization onCompletion : onCompletions) {
                 target.getExchangeExtension().addOnCompletion(onCompletion);
@@ -782,8 +759,7 @@ class AbstractExchange implements ExtendedExchange {
         }
     }
 
-    @Override
-    public List<Synchronization> handoverCompletions() {
+    List<Synchronization> handoverCompletions() {
         List<Synchronization> answer = null;
         if (onCompletions != null) {
             answer = new ArrayList<>(onCompletions);
@@ -793,103 +769,16 @@ class AbstractExchange implements ExtendedExchange {
         return answer;
     }
 
-    @Override
-    public String getHistoryNodeId() {
-        return historyNodeId;
-    }
-
-    @Override
-    public void setHistoryNodeId(String historyNodeId) {
-        this.historyNodeId = historyNodeId;
-    }
-
-    @Override
-    public String getHistoryNodeLabel() {
-        return historyNodeLabel;
-    }
-
-    @Override
-    public void setHistoryNodeLabel(String historyNodeLabel) {
-        this.historyNodeLabel = historyNodeLabel;
-    }
-
-    @Override
-    public String getHistoryNodeSource() {
-        return historyNodeSource;
-    }
-
-    @Override
-    public void setHistoryNodeSource(String historyNodeSource) {
-        this.historyNodeSource = historyNodeSource;
-    }
-
-    @Override
-    public boolean isNotifyEvent() {
-        return notifyEvent;
-    }
-
-    @Override
-    public void setNotifyEvent(boolean notifyEvent) {
-        this.notifyEvent = notifyEvent;
-    }
-
-    @Override
-    public boolean isInterrupted() {
-        return interrupted;
-    }
-
-    @Override
-    public void setInterrupted(boolean interrupted) {
+    void setInterrupted(boolean interrupted) {
         if (interruptable) {
             this.interrupted = interrupted;
         }
     }
 
-    @Override
-    public void setInterruptable(boolean interruptable) {
-        this.interruptable = interruptable;
-    }
-
-    @Override
-    public boolean isRedeliveryExhausted() {
-        return redeliveryExhausted;
-    }
-
-    @Override
-    public void setRedeliveryExhausted(boolean redeliveryExhausted) {
-        this.redeliveryExhausted = redeliveryExhausted;
-    }
-
-    @Override
-    public Boolean getErrorHandlerHandled() {
-        return errorHandlerHandled;
-    }
-
-    @Override
-    public boolean isErrorHandlerHandledSet() {
+    boolean isErrorHandlerHandledSet() {
         return errorHandlerHandled != null;
     }
 
-    @Override
-    public boolean isErrorHandlerHandled() {
-        return errorHandlerHandled;
-    }
-
-    @Override
-    public void setErrorHandlerHandled(Boolean errorHandlerHandled) {
-        this.errorHandlerHandled = errorHandlerHandled;
-    }
-
-    @Override
-    public boolean isStreamCacheDisabled() {
-        return streamCacheDisabled;
-    }
-
-    @Override
-    public void setStreamCacheDisabled(boolean streamCacheDisabled) {
-        this.streamCacheDisabled = streamCacheDisabled;
-    }
-
     /**
      * Configures the message after it has been set on the exchange
      */
@@ -901,8 +790,7 @@ class AbstractExchange implements ExtendedExchange {
         }
     }
 
-    @Override
-    public void copyInternalProperties(Exchange target) {
+    void copyInternalProperties(Exchange target) {
         AbstractExchange ae = (AbstractExchange) target;
         for (int i = 0; i < internalProperties.length; i++) {
             Object value = internalProperties[i];
@@ -912,8 +800,7 @@ class AbstractExchange implements ExtendedExchange {
         }
     }
 
-    @Override
-    public Map<String, Object> getInternalProperties() {
+    Map<String, Object> getInternalProperties() {
         Map<String, Object> map = new HashMap<>();
         for (ExchangePropertyKey key : ExchangePropertyKey.values()) {
             Object value = internalProperties[key.ordinal()];
@@ -924,12 +811,10 @@ class AbstractExchange implements ExtendedExchange {
         return map;
     }
 
-    @Override
     public AsyncCallback getDefaultConsumerCallback() {
         return defaultConsumerCallback;
     }
 
-    @Override
     public void setDefaultConsumerCallback(AsyncCallback defaultConsumerCallback) {
         this.defaultConsumerCallback = defaultConsumerCallback;
     }
@@ -948,8 +833,7 @@ class AbstractExchange implements ExtendedExchange {
         }
     }
 
-    @Override
-    public void setSafeCopyProperty(String key, SafeCopyProperty value) {
+    void setSafeCopyProperty(String key, SafeCopyProperty value) {
         if (value != null) {
             // avoid the NullPointException
             if (safeCopyProperties == null) {
@@ -964,8 +848,7 @@ class AbstractExchange implements ExtendedExchange {
     }
 
     @SuppressWarnings("unchecked")
-    @Override
-    public <T> T getSafeCopyProperty(String key, Class<T> type) {
+    <T> T getSafeCopyProperty(String key, Class<T> type) {
         if (!hasSafeCopyProperties()) {
             return null;
         }
@@ -982,6 +865,4 @@ class AbstractExchange implements ExtendedExchange {
     public ExtendedExchangeExtension getExchangeExtension() {
         return privateExtension;
     }
-
-
 }


[camel] 21/23: CAMEL-15105: removed the extended exchange imports

Posted by or...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

orpiske pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/camel.git

commit aec1d1d0596e2a909b1dded8a0eaf2ca4b92e1a9
Author: Otavio Rodolfo Piske <an...@gmail.com>
AuthorDate: Thu Jan 12 16:36:57 2023 +0100

    CAMEL-15105: removed the extended exchange imports
---
 .../java/org/apache/camel/component/disruptor/DisruptorConsumer.java     | 1 -
 .../main/java/org/apache/camel/impl/engine/CamelInternalProcessor.java   | 1 -
 2 files changed, 2 deletions(-)

diff --git a/components/camel-disruptor/src/main/java/org/apache/camel/component/disruptor/DisruptorConsumer.java b/components/camel-disruptor/src/main/java/org/apache/camel/component/disruptor/DisruptorConsumer.java
index 224b27e3d1f..99c79f1646f 100644
--- a/components/camel-disruptor/src/main/java/org/apache/camel/component/disruptor/DisruptorConsumer.java
+++ b/components/camel-disruptor/src/main/java/org/apache/camel/component/disruptor/DisruptorConsumer.java
@@ -23,7 +23,6 @@ import org.apache.camel.AsyncCallback;
 import org.apache.camel.AsyncProcessor;
 import org.apache.camel.Consumer;
 import org.apache.camel.Exchange;
-import org.apache.camel.ExtendedExchange;
 import org.apache.camel.Processor;
 import org.apache.camel.ShutdownRunningTask;
 import org.apache.camel.Suspendable;
diff --git a/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/CamelInternalProcessor.java b/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/CamelInternalProcessor.java
index c4d59eff15e..48bf5702c20 100644
--- a/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/CamelInternalProcessor.java
+++ b/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/CamelInternalProcessor.java
@@ -27,7 +27,6 @@ import org.apache.camel.CamelContext;
 import org.apache.camel.Exchange;
 import org.apache.camel.ExchangePropertyKey;
 import org.apache.camel.ExtendedCamelContext;
-import org.apache.camel.ExtendedExchange;
 import org.apache.camel.MessageHistory;
 import org.apache.camel.NamedNode;
 import org.apache.camel.NamedRoute;


[camel] 20/23: CAMEL-15105: adapted the copy exchange logic in AbstractExchange

Posted by or...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

orpiske pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/camel.git

commit 48fd93058a8f534747e9a2c27fe959d83c468645
Author: Otavio Rodolfo Piske <an...@gmail.com>
AuthorDate: Wed Nov 23 08:46:41 2022 +0100

    CAMEL-15105: adapted the copy exchange logic in AbstractExchange
---
 .../src/main/java/org/apache/camel/support/AbstractExchange.java  | 8 ++++----
 1 file changed, 4 insertions(+), 4 deletions(-)

diff --git a/core/camel-support/src/main/java/org/apache/camel/support/AbstractExchange.java b/core/camel-support/src/main/java/org/apache/camel/support/AbstractExchange.java
index c1c9bd43016..72093d3afae 100644
--- a/core/camel-support/src/main/java/org/apache/camel/support/AbstractExchange.java
+++ b/core/camel-support/src/main/java/org/apache/camel/support/AbstractExchange.java
@@ -160,10 +160,10 @@ class AbstractExchange implements ExtendedExchange {
         exchange.setRouteStop(routeStop);
         exchange.setRollbackOnly(rollbackOnly);
         exchange.setRollbackOnlyLast(rollbackOnlyLast);
-        exchange.setNotifyEvent(notifyEvent);
-        exchange.setRedeliveryExhausted(redeliveryExhausted);
-        exchange.setErrorHandlerHandled(errorHandlerHandled);
-        exchange.setStreamCacheDisabled(streamCacheDisabled);
+        exchange.getExchangeExtension().setNotifyEvent(notifyEvent);
+        exchange.getExchangeExtension().setRedeliveryExhausted(redeliveryExhausted);
+        exchange.getExchangeExtension().setErrorHandlerHandled(errorHandlerHandled);
+        exchange.getExchangeExtension().setStreamCacheDisabled(streamCacheDisabled);
 
         // copy properties after body as body may trigger lazy init
         if (hasProperties()) {