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

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


The following commit(s) were added to refs/heads/main by this push:
     new 00cecd714b4 fix(CAMEL-21555): by default do not use lazily start 
Smooks and use lazyStartProducer to lazily start Smooks (#16594)
00cecd714b4 is described below

commit 00cecd714b4f321c21c3a270684732ebe933ce9a
Author: cjmamo <[email protected]>
AuthorDate: Tue Dec 17 11:04:36 2024 +0100

    fix(CAMEL-21555): by default do not use lazily start Smooks and use 
lazyStartProducer to lazily start Smooks (#16594)
---
 .../camel/component/smooks/SmooksProcessor.java    | 13 ++++
 .../component/smooks/SmooksProcessorTest.java      | 72 ++++++++++++++++++++++
 2 files changed, 85 insertions(+)

diff --git 
a/components/camel-smooks/src/main/java/org/apache/camel/component/smooks/SmooksProcessor.java
 
b/components/camel-smooks/src/main/java/org/apache/camel/component/smooks/SmooksProcessor.java
index 234c58c9264..5794dcfcdad 100644
--- 
a/components/camel-smooks/src/main/java/org/apache/camel/component/smooks/SmooksProcessor.java
+++ 
b/components/camel-smooks/src/main/java/org/apache/camel/component/smooks/SmooksProcessor.java
@@ -84,6 +84,7 @@ public class SmooksProcessor extends ServiceSupport 
implements Processor, CamelC
     private String configUri;
     private String reportPath;
     private Boolean allowExecutionContextFromHeader = false;
+    private Boolean lazyStartProducer = false;
 
     private final Set<VisitorAppender> visitorAppender = new HashSet<>();
     private final Map<String, Visitor> selectorVisitorMap = new HashMap<>();
@@ -278,6 +279,14 @@ public class SmooksProcessor extends ServiceSupport 
implements Processor, CamelC
             smooks.addVisitor(entry.getValue(), entry.getKey());
     }
 
+    public Boolean getLazyStartProducer() {
+        return lazyStartProducer;
+    }
+
+    public void setLazyStartProducer(Boolean lazyStartProducer) {
+        this.lazyStartProducer = lazyStartProducer;
+    }
+
     @Override
     protected void doStart() {
         try {
@@ -294,6 +303,10 @@ public class SmooksProcessor extends ServiceSupport 
implements Processor, CamelC
             addAppender(smooks, visitorAppender);
             addVisitor(smooks, selectorVisitorMap);
 
+            if (!lazyStartProducer) {
+                smooks.createExecutionContext();
+            }
+
         } catch (Exception e) {
             throw new SmooksException(e.getMessage(), e);
         }
diff --git 
a/components/camel-smooks/src/test/java/org/apache/camel/component/smooks/SmooksProcessorTest.java
 
b/components/camel-smooks/src/test/java/org/apache/camel/component/smooks/SmooksProcessorTest.java
index c4b511e719f..93c35d63bea 100644
--- 
a/components/camel-smooks/src/test/java/org/apache/camel/component/smooks/SmooksProcessorTest.java
+++ 
b/components/camel-smooks/src/test/java/org/apache/camel/component/smooks/SmooksProcessorTest.java
@@ -43,8 +43,10 @@ import org.smooks.Smooks;
 import org.smooks.SmooksFactory;
 import org.smooks.api.ExecutionContext;
 import org.smooks.api.NotAppContextScoped;
+import org.smooks.cartridges.edi.parser.EdiParser;
 import org.smooks.cartridges.javabean.Bean;
 import org.smooks.cartridges.javabean.Value;
+import org.smooks.engine.lookup.InstanceLookup;
 import org.smooks.io.payload.Exports;
 import org.smooks.io.sink.JavaSink;
 import org.smooks.io.sink.StringSink;
@@ -192,6 +194,76 @@ public class SmooksProcessorTest extends CamelTestSupport {
         assertNotEquals(executionContext[0], 
exchange.getMessage().getHeader(SmooksConstants.SMOOKS_EXECUTION_CONTEXT));
     }
 
+    @Test
+    public void testProcessWhenLazyStartProducerIsFalse()
+            throws Exception {
+        Smooks smooks = new Smooks();
+        SmooksProcessor processor = new 
SmooksProcessor("edi-to-xml-smooks-config.xml", context);
+        processor.setSmooksFactory(new SmooksFactory() {
+            @Override
+            public Smooks createInstance() {
+                return smooks;
+            }
+
+            @Override
+            public Smooks createInstance(InputStream config) {
+                return null;
+            }
+
+            @Override
+            public Smooks createInstance(String config) {
+                return null;
+            }
+        });
+        processor.setLazyStartProducer(false);
+
+        context.addRoutes(new RouteBuilder() {
+            @Override
+            public void configure() {
+                from("direct:input")
+                        .process(processor);
+            }
+
+        });
+        context.start();
+        assertEquals(1, 
smooks.getApplicationContext().getRegistry().lookup(new 
InstanceLookup<>(EdiParser.class)).size());
+    }
+
+    @Test
+    public void testProcessWhenLazyStartProducerIsTrue()
+            throws Exception {
+        Smooks smooks = new Smooks();
+        SmooksProcessor processor = new 
SmooksProcessor("edi-to-xml-smooks-config.xml", context);
+        processor.setSmooksFactory(new SmooksFactory() {
+            @Override
+            public Smooks createInstance() {
+                return smooks;
+            }
+
+            @Override
+            public Smooks createInstance(InputStream config) {
+                return null;
+            }
+
+            @Override
+            public Smooks createInstance(String config) {
+                return null;
+            }
+        });
+        processor.setLazyStartProducer(true);
+
+        context.addRoutes(new RouteBuilder() {
+            @Override
+            public void configure() {
+                from("direct:input")
+                        .process(processor);
+            }
+
+        });
+        context.start();
+        assertEquals(0, 
smooks.getApplicationContext().getRegistry().lookup(new 
InstanceLookup<>(EdiParser.class)).size());
+    }
+
     @Test
     public void testProcessGivenAttachment() throws Exception {
         context.addRoutes(createEdiToXmlRouteBuilder());

Reply via email to