You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by gn...@apache.org on 2020/03/27 10:01:32 UTC

[camel] branch master updated: Fix some lifecycle issues in camel cloud

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

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


The following commit(s) were added to refs/heads/master by this push:
     new 91a0fee  Fix some lifecycle issues in camel cloud
91a0fee is described below

commit 91a0feeff0ea69d95d9785a9c19246b80aee1785
Author: Claus Ibsen <cl...@gmail.com>
AuthorDate: Fri Mar 27 10:08:28 2020 +0100

    Fix some lifecycle issues in camel cloud
---
 .../main/java/org/apache/camel/processor/SendDynamicProcessor.java | 5 +++++
 .../org/apache/camel/impl/cloud/DefaultServiceCallProcessor.java   | 6 +++++-
 .../org/apache/camel/impl/cloud/ServiceCallProcessorFactory.java   | 7 ++++++-
 .../org/apache/camel/impl/cloud/ServiceCallConfigurationTest.java  | 3 ++-
 .../java/org/apache/camel/builder/ExpressionClauseSupport.java     | 5 +++--
 5 files changed, 21 insertions(+), 5 deletions(-)

diff --git a/core/camel-base/src/main/java/org/apache/camel/processor/SendDynamicProcessor.java b/core/camel-base/src/main/java/org/apache/camel/processor/SendDynamicProcessor.java
index 61e8d7c..e96b458 100644
--- a/core/camel-base/src/main/java/org/apache/camel/processor/SendDynamicProcessor.java
+++ b/core/camel-base/src/main/java/org/apache/camel/processor/SendDynamicProcessor.java
@@ -95,6 +95,11 @@ public class SendDynamicProcessor extends AsyncProcessorSupport implements IdAwa
     }
 
     @Override
+    protected void doInit() throws Exception {
+        expression.init(camelContext);
+    }
+
+    @Override
     public boolean process(Exchange exchange, final AsyncCallback callback) {
         if (!isStarted()) {
             exchange.setException(new IllegalStateException("SendProcessor has not been started: " + this));
diff --git a/core/camel-cloud/src/main/java/org/apache/camel/impl/cloud/DefaultServiceCallProcessor.java b/core/camel-cloud/src/main/java/org/apache/camel/impl/cloud/DefaultServiceCallProcessor.java
index 46edcea..a0b2d4c 100644
--- a/core/camel-cloud/src/main/java/org/apache/camel/impl/cloud/DefaultServiceCallProcessor.java
+++ b/core/camel-cloud/src/main/java/org/apache/camel/impl/cloud/DefaultServiceCallProcessor.java
@@ -122,8 +122,9 @@ public class DefaultServiceCallProcessor extends AsyncProcessorSupport {
     // Lifecycle
     // *************************************
 
+
     @Override
-    protected void doStart() throws Exception {
+    protected void doInit() throws Exception {
         StringHelper.notEmpty(name, "name", "service name");
         ObjectHelper.notNull(camelContext, "camel context");
         ObjectHelper.notNull(expression, "expression");
@@ -136,7 +137,10 @@ public class DefaultServiceCallProcessor extends AsyncProcessorSupport {
 
         Processor send = camelContext.adapt(ExtendedCamelContext.class).getProcessorFactory().createProcessor(camelContext, "SendDynamicProcessor", args);
         processor = AsyncProcessorConverterHelper.convert(send);
+    }
 
+    @Override
+    protected void doStart() throws Exception {
         // Start services if needed
         ServiceHelper.startService(processor);
         ServiceHelper.startService(loadBalancer);
diff --git a/core/camel-cloud/src/main/java/org/apache/camel/impl/cloud/ServiceCallProcessorFactory.java b/core/camel-cloud/src/main/java/org/apache/camel/impl/cloud/ServiceCallProcessorFactory.java
index 982e58d..4ce8345 100644
--- a/core/camel-cloud/src/main/java/org/apache/camel/impl/cloud/ServiceCallProcessorFactory.java
+++ b/core/camel-cloud/src/main/java/org/apache/camel/impl/cloud/ServiceCallProcessorFactory.java
@@ -24,6 +24,7 @@ import org.apache.camel.CamelContext;
 import org.apache.camel.CamelContextAware;
 import org.apache.camel.ExchangePattern;
 import org.apache.camel.Expression;
+import org.apache.camel.ExpressionFactory;
 import org.apache.camel.ExtendedCamelContext;
 import org.apache.camel.Processor;
 import org.apache.camel.Route;
@@ -127,8 +128,12 @@ public class ServiceCallProcessorFactory extends TypedProcessorFactory<ServiceCa
         endpointUri = ThrowingHelper.applyIfNotEmpty(endpointUri, camelContext::resolvePropertyPlaceholders, () -> null);
         ExchangePattern pattern = CamelContextHelper.parse(camelContext, ExchangePattern.class, definition.getPattern());
 
+        Expression expression = retrieveExpression(camelContext, endpointScheme);
+        if (expression instanceof ExpressionFactory) {
+            expression = ((ExpressionFactory) expression).createExpression(camelContext);
+        }
         return new DefaultServiceCallProcessor(camelContext, camelContext.resolvePropertyPlaceholders(definition.getName()), endpointScheme, endpointUri, pattern,
-                                               loadBalancer, retrieveExpression(camelContext, endpointScheme));
+                                               loadBalancer, expression);
     }
 
     // *****************************
diff --git a/core/camel-cloud/src/test/java/org/apache/camel/impl/cloud/ServiceCallConfigurationTest.java b/core/camel-cloud/src/test/java/org/apache/camel/impl/cloud/ServiceCallConfigurationTest.java
index 8c71e23..20a1de3 100644
--- a/core/camel-cloud/src/test/java/org/apache/camel/impl/cloud/ServiceCallConfigurationTest.java
+++ b/core/camel-cloud/src/test/java/org/apache/camel/impl/cloud/ServiceCallConfigurationTest.java
@@ -426,7 +426,8 @@ public class ServiceCallConfigurationTest {
             DefaultServiceCallProcessor proc = findServiceCallProcessor(context.getRoute("default"));
 
             Assert.assertNotNull(proc);
-            Assert.assertTrue(proc.getExpression() instanceof SimpleExpression);
+            Assert.assertEquals("file:${header.CamelServiceCallServiceHost}:${header.CamelServiceCallServicePort}",
+                    proc.getExpression().toString());
 
         } finally {
             if (context != null) {
diff --git a/core/camel-core-engine/src/main/java/org/apache/camel/builder/ExpressionClauseSupport.java b/core/camel-core-engine/src/main/java/org/apache/camel/builder/ExpressionClauseSupport.java
index b5690e2..4f52d3e 100644
--- a/core/camel-core-engine/src/main/java/org/apache/camel/builder/ExpressionClauseSupport.java
+++ b/core/camel-core-engine/src/main/java/org/apache/camel/builder/ExpressionClauseSupport.java
@@ -65,9 +65,10 @@ public class ExpressionClauseSupport<T> {
      * Specify an {@link org.apache.camel.Expression} instance
      */
     public T expression(Expression expression) {
-        setExpressionValue(expression);
         if (expression instanceof ExpressionFactory) {
-            setExpressionType((ExpressionFactory)expression);
+            setExpressionType((ExpressionFactory) expression);
+        } else {
+            setExpressionValue(expression);
         }
         return result;
     }