This is an automated email from the ASF dual-hosted git repository. davsclaus pushed a commit to branch cloud2 in repository https://gitbox.apache.org/repos/asf/camel.git
commit edffa0469b852c68e1bb5d77c3b06cf14cfccc7f Author: Claus Ibsen <[email protected]> AuthorDate: Fri Apr 5 16:11:50 2019 +0200 CAMEL-13380: camel-core - Move cloud out into camel-cloud component. Woprk in progress --- .../org/apache/camel/spi/ProcessorFactory.java | 15 ++++++++++++++ .../impl/cloud/DefaultServiceCallProcessor.java | 19 ++++++++++------- .../apache/camel/impl/DefaultProcessorFactory.java | 24 ++++++++++++++++++++++ .../apache/camel/impl/TypedProcessorFactory.java | 7 +++++++ .../processor/CustomProcessorFactoryTest.java | 9 ++++++++ 5 files changed, 67 insertions(+), 7 deletions(-) diff --git a/core/camel-api/src/main/java/org/apache/camel/spi/ProcessorFactory.java b/core/camel-api/src/main/java/org/apache/camel/spi/ProcessorFactory.java index cf750e6..b88cf57 100644 --- a/core/camel-api/src/main/java/org/apache/camel/spi/ProcessorFactory.java +++ b/core/camel-api/src/main/java/org/apache/camel/spi/ProcessorFactory.java @@ -16,6 +16,9 @@ */ package org.apache.camel.spi; +import java.util.Map; + +import org.apache.camel.CamelContext; import org.apache.camel.NamedNode; import org.apache.camel.Processor; @@ -56,4 +59,16 @@ public interface ProcessorFactory { */ Processor createProcessor(RouteContext routeContext, NamedNode definition) throws Exception; + /** + * Creates a processor by the name of the definition. This should only be used in some special situations + * where the processor is used internally in some features such as camel-cloud. + * + * @param camelContext the camel context + * @param definitionName the name of the definition that represents the processor + * @param args arguments for creating the processor (name=vale pairs) + * @return the created processor, or <tt>null</tt> if this situation is not yet implemented. + * @throws Exception can be thrown if error creating the processor + */ + Processor createProcessor(CamelContext camelContext, String definitionName, Map<String, Object> args) throws Exception; + } 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 11d3940..9218ce9 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 @@ -16,19 +16,22 @@ */ package org.apache.camel.impl.cloud; +import java.util.HashMap; import java.util.Map; import org.apache.camel.AsyncCallback; +import org.apache.camel.AsyncProcessor; import org.apache.camel.CamelContext; import org.apache.camel.Exchange; import org.apache.camel.ExchangePattern; import org.apache.camel.Expression; import org.apache.camel.Message; +import org.apache.camel.Processor; import org.apache.camel.cloud.ServiceCallConstants; import org.apache.camel.cloud.ServiceDefinition; import org.apache.camel.cloud.ServiceLoadBalancer; -import org.apache.camel.processor.SendDynamicProcessor; import org.apache.camel.spi.Language; +import org.apache.camel.support.AsyncProcessorConverterHelper; import org.apache.camel.support.AsyncProcessorSupport; import org.apache.camel.support.service.ServiceHelper; import org.apache.camel.util.ObjectHelper; @@ -44,7 +47,7 @@ public class DefaultServiceCallProcessor extends AsyncProcessorSupport { private final CamelContext camelContext; private final ServiceLoadBalancer loadBalancer; private final Expression expression; - private SendDynamicProcessor processor; + private AsyncProcessor processor; public DefaultServiceCallProcessor( CamelContext camelContext, String name, String scheme, String uri, ExchangePattern exchangePattern, @@ -122,11 +125,13 @@ public class DefaultServiceCallProcessor extends AsyncProcessorSupport { ObjectHelper.notNull(expression, "expression"); ObjectHelper.notNull(loadBalancer, "load balancer"); - processor = new SendDynamicProcessor(uri, expression); - processor.setCamelContext(camelContext); - if (exchangePattern != null) { - processor.setPattern(exchangePattern); - } + Map<String, Object> args = new HashMap<>(); + args.put("uri", uri); + args.put("expression", expression); + args.put("pattern", exchangePattern); + + Processor send = camelContext.getProcessorFactory().createProcessor(camelContext, "SendDynamicProcessor", args); + processor = AsyncProcessorConverterHelper.convert(send); // Start services if needed ServiceHelper.startService(processor); diff --git a/core/camel-core/src/main/java/org/apache/camel/impl/DefaultProcessorFactory.java b/core/camel-core/src/main/java/org/apache/camel/impl/DefaultProcessorFactory.java index 2a7b9a1..a9c18c8 100644 --- a/core/camel-core/src/main/java/org/apache/camel/impl/DefaultProcessorFactory.java +++ b/core/camel-core/src/main/java/org/apache/camel/impl/DefaultProcessorFactory.java @@ -16,9 +16,15 @@ */ package org.apache.camel.impl; +import java.util.Map; + +import org.apache.camel.CamelContext; +import org.apache.camel.ExchangePattern; +import org.apache.camel.Expression; import org.apache.camel.NamedNode; import org.apache.camel.NoFactoryAvailableException; import org.apache.camel.Processor; +import org.apache.camel.processor.SendDynamicProcessor; import org.apache.camel.spi.FactoryFinder; import org.apache.camel.spi.ProcessorFactory; import org.apache.camel.spi.RouteContext; @@ -75,4 +81,22 @@ public class DefaultProcessorFactory implements ProcessorFactory { return null; } + + @Override + public Processor createProcessor(CamelContext camelContext, String definitionName, Map<String, Object> args) throws Exception { + // currently only SendDynamicProcessor is supported + SendDynamicProcessor answer = null; + if ("SendDynamicProcessor".equals(definitionName)) { + String uri = (String) args.get("uri"); + Expression expression = (Expression) args.get("expression"); + ExchangePattern pattern = (ExchangePattern) args.get("exchangePattern"); + answer = new SendDynamicProcessor(uri, expression); + if (pattern != null) { + answer.setPattern(pattern); + } + } + + return answer; + } + } diff --git a/core/camel-core/src/main/java/org/apache/camel/impl/TypedProcessorFactory.java b/core/camel-core/src/main/java/org/apache/camel/impl/TypedProcessorFactory.java index e25137d..ab91921 100644 --- a/core/camel-core/src/main/java/org/apache/camel/impl/TypedProcessorFactory.java +++ b/core/camel-core/src/main/java/org/apache/camel/impl/TypedProcessorFactory.java @@ -16,6 +16,9 @@ */ package org.apache.camel.impl; +import java.util.Map; + +import org.apache.camel.CamelContext; import org.apache.camel.NamedNode; import org.apache.camel.Processor; import org.apache.camel.model.ProcessorDefinition; @@ -47,6 +50,10 @@ public class TypedProcessorFactory<T extends ProcessorDefinition<T>> implements return null; } + @Override + public Processor createProcessor(CamelContext camelContext, String definitionName, Map<String, Object> args) throws Exception { + return null; + } protected Processor doCreateChildProcessor(RouteContext routeContext, T definition, boolean mandatory) throws Exception { return null; diff --git a/core/camel-core/src/test/java/org/apache/camel/processor/CustomProcessorFactoryTest.java b/core/camel-core/src/test/java/org/apache/camel/processor/CustomProcessorFactoryTest.java index 23b9aa3..6f97c5a 100644 --- a/core/camel-core/src/test/java/org/apache/camel/processor/CustomProcessorFactoryTest.java +++ b/core/camel-core/src/test/java/org/apache/camel/processor/CustomProcessorFactoryTest.java @@ -16,6 +16,8 @@ */ package org.apache.camel.processor; +import java.util.Map; + import org.apache.camel.CamelContext; import org.apache.camel.ContextTestSupport; import org.apache.camel.NamedNode; @@ -83,10 +85,12 @@ public class CustomProcessorFactoryTest extends ContextTestSupport { // START SNIPPET: e3 public static class MyFactory implements ProcessorFactory { + @Override public Processor createChildProcessor(RouteContext routeContext, NamedNode definition, boolean mandatory) throws Exception { return null; } + @Override public Processor createProcessor(RouteContext routeContext, NamedNode definition) throws Exception { if (definition instanceof SplitDefinition) { // add additional output to the splitter @@ -103,6 +107,11 @@ public class CustomProcessorFactoryTest extends ContextTestSupport { // before the processor was created return null; } + + @Override + public Processor createProcessor(CamelContext camelContext, String definitionName, Map<String, Object> args) throws Exception { + return null; + } } // END SNIPPET: e3
