This is an automated email from the ASF dual-hosted git repository.
davsclaus pushed a commit to branch camel-4.18.x
in repository https://gitbox.apache.org/repos/asf/camel.git
The following commit(s) were added to refs/heads/camel-4.18.x by this push:
new ff8fbfab5e20 CAMEL-23036: camel-core - Fix NPE with pooled exchange
when using producer template
ff8fbfab5e20 is described below
commit ff8fbfab5e20e26844c8f38c2b88c5d6a341ca5b
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");
}
};