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

davsclaus pushed a commit to branch camel-4.14.x
in repository https://gitbox.apache.org/repos/asf/camel.git


The following commit(s) were added to refs/heads/camel-4.14.x by this push:
     new c0c96ee7e805 CAMEL-23036: camel-core - Fix NPE with pooled exchange 
when using producer template
c0c96ee7e805 is described below

commit c0c96ee7e8056049fcc3208070881ed7660548f6
Author: Claus Ibsen <[email protected]>
AuthorDate: Mon Feb 23 19:43:35 2026 +0100

    CAMEL-23036: camel-core - Fix NPE with pooled exchange when using producer 
template
---
 .../org/apache/camel/impl/engine/DefaultUnitOfWork.java |  4 +++-
 ...eSplitTest.java => PooledExchangeSplitOnceTest.java} | 17 +++++------------
 ...itTest.java => PooledExchangeSplitParallelTest.java} |  3 +--
 .../apache/camel/processor/PooledExchangeSplitTest.java |  5 ++---
 4 files changed, 11 insertions(+), 18 deletions(-)

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 2c5d1dba6be3..2201f3dc2294 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
@@ -307,7 +307,9 @@ 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)
-        exchange.getExchangeExtension().setUnitOfWork(null);
+        if (exchange != null) {
+            exchange.getExchangeExtension().setUnitOfWork(null);
+        }
     }
 
     @Override
diff --git 
a/core/camel-core/src/test/java/org/apache/camel/processor/PooledExchangeSplitTest.java
 
b/core/camel-core/src/test/java/org/apache/camel/processor/PooledExchangeSplitOnceTest.java
similarity index 84%
copy from 
core/camel-core/src/test/java/org/apache/camel/processor/PooledExchangeSplitTest.java
copy to 
core/camel-core/src/test/java/org/apache/camel/processor/PooledExchangeSplitOnceTest.java
index da724d73fb6e..2f5fa5ff1afd 100644
--- 
a/core/camel-core/src/test/java/org/apache/camel/processor/PooledExchangeSplitTest.java
+++ 
b/core/camel-core/src/test/java/org/apache/camel/processor/PooledExchangeSplitOnceTest.java
@@ -16,9 +16,7 @@
  */
 package org.apache.camel.processor;
 
-import java.util.ArrayList;
 import java.util.Arrays;
-import java.util.List;
 
 import org.apache.camel.CamelContext;
 import org.apache.camel.ContextTestSupport;
@@ -30,7 +28,7 @@ import org.apache.camel.impl.engine.PooledExchangeFactory;
 import org.apache.camel.impl.engine.PooledProcessorExchangeFactory;
 import org.junit.jupiter.api.Test;
 
-class PooledExchangeSplitTest extends ContextTestSupport {
+class PooledExchangeSplitOnceTest extends ContextTestSupport {
 
     @Override
     protected CamelContext createCamelContext() throws Exception {
@@ -38,7 +36,6 @@ class PooledExchangeSplitTest extends ContextTestSupport {
         ExtendedCamelContext ecc = camelContext.getCamelContextExtension();
 
         ecc.setExchangeFactory(new PooledExchangeFactory());
-
         ecc.setProcessorExchangeFactory(new PooledProcessorExchangeFactory());
         ecc.getExchangeFactory().setStatisticsEnabled(true);
         ecc.getProcessorExchangeFactory().setStatisticsEnabled(true);
@@ -47,13 +44,8 @@ class PooledExchangeSplitTest extends ContextTestSupport {
     }
 
     @Test
-    public void testSplitter() throws Exception {
-        List<Integer> data = new ArrayList<>(Arrays.asList(1, 2, 3));
-
+    public void testSplitter() throws InterruptedException {
         getMockEndpoint("mock:result").expectedMessageCount(3);
-
-        template.sendBody("direct:processData", data);
-
         MockEndpoint.assertIsSatisfied(context);
     }
 
@@ -62,8 +54,9 @@ class PooledExchangeSplitTest extends ContextTestSupport {
         return new RouteBuilder() {
             @Override
             public void configure() {
-                from("direct:processData")
-                        .split(body()).streaming().parallelProcessing()
+                from("timer:once?repeatCount=1&delay=0")
+                        .setBody(constant(Arrays.asList(1, 2, 3)))
+                        .split(body())
                         .to("mock:result");
             }
         };
diff --git 
a/core/camel-core/src/test/java/org/apache/camel/processor/PooledExchangeSplitTest.java
 
b/core/camel-core/src/test/java/org/apache/camel/processor/PooledExchangeSplitParallelTest.java
similarity index 97%
copy from 
core/camel-core/src/test/java/org/apache/camel/processor/PooledExchangeSplitTest.java
copy to 
core/camel-core/src/test/java/org/apache/camel/processor/PooledExchangeSplitParallelTest.java
index da724d73fb6e..f64257cebd0e 100644
--- 
a/core/camel-core/src/test/java/org/apache/camel/processor/PooledExchangeSplitTest.java
+++ 
b/core/camel-core/src/test/java/org/apache/camel/processor/PooledExchangeSplitParallelTest.java
@@ -30,7 +30,7 @@ import org.apache.camel.impl.engine.PooledExchangeFactory;
 import org.apache.camel.impl.engine.PooledProcessorExchangeFactory;
 import org.junit.jupiter.api.Test;
 
-class PooledExchangeSplitTest extends ContextTestSupport {
+class PooledExchangeSplitParallelTest extends ContextTestSupport {
 
     @Override
     protected CamelContext createCamelContext() throws Exception {
@@ -38,7 +38,6 @@ class PooledExchangeSplitTest extends ContextTestSupport {
         ExtendedCamelContext ecc = camelContext.getCamelContextExtension();
 
         ecc.setExchangeFactory(new PooledExchangeFactory());
-
         ecc.setProcessorExchangeFactory(new PooledProcessorExchangeFactory());
         ecc.getExchangeFactory().setStatisticsEnabled(true);
         ecc.getProcessorExchangeFactory().setStatisticsEnabled(true);
diff --git 
a/core/camel-core/src/test/java/org/apache/camel/processor/PooledExchangeSplitTest.java
 
b/core/camel-core/src/test/java/org/apache/camel/processor/PooledExchangeSplitTest.java
index da724d73fb6e..497a62343f09 100644
--- 
a/core/camel-core/src/test/java/org/apache/camel/processor/PooledExchangeSplitTest.java
+++ 
b/core/camel-core/src/test/java/org/apache/camel/processor/PooledExchangeSplitTest.java
@@ -38,7 +38,6 @@ class PooledExchangeSplitTest extends ContextTestSupport {
         ExtendedCamelContext ecc = camelContext.getCamelContextExtension();
 
         ecc.setExchangeFactory(new PooledExchangeFactory());
-
         ecc.setProcessorExchangeFactory(new PooledProcessorExchangeFactory());
         ecc.getExchangeFactory().setStatisticsEnabled(true);
         ecc.getProcessorExchangeFactory().setStatisticsEnabled(true);
@@ -47,7 +46,7 @@ class PooledExchangeSplitTest extends ContextTestSupport {
     }
 
     @Test
-    public void testSplitter() throws Exception {
+    public void testSplitter() throws InterruptedException {
         List<Integer> data = new ArrayList<>(Arrays.asList(1, 2, 3));
 
         getMockEndpoint("mock:result").expectedMessageCount(3);
@@ -63,7 +62,7 @@ class PooledExchangeSplitTest extends ContextTestSupport {
             @Override
             public void configure() {
                 from("direct:processData")
-                        .split(body()).streaming().parallelProcessing()
+                        .split(body())
                         .to("mock:result");
             }
         };

Reply via email to