CAMEL-15753: camel-core - Modularize and move internal processors into their own factory
diff --git a/components/camel-seda/src/main/java/org/apache/camel/component/seda/SedaEndpoint.java b/components/camel-seda/src/main/java/org/apache/camel/component/seda/SedaEndpoint.java
index 225903f..dacffa4 100644
--- a/components/camel-seda/src/main/java/org/apache/camel/component/seda/SedaEndpoint.java
+++ b/components/camel-seda/src/main/java/org/apache/camel/component/seda/SedaEndpoint.java
@@ -17,10 +17,8 @@
 package org.apache.camel.component.seda;
 
 import java.util.ArrayList;
-import java.util.HashMap;
 import java.util.HashSet;
 import java.util.List;
-import java.util.Map;
 import java.util.Set;
 import java.util.concurrent.BlockingQueue;
 import java.util.concurrent.CopyOnWriteArraySet;
@@ -257,12 +255,9 @@
             // create multicast processor
             multicastStarted = false;
 
-            Map<String, Object> args = new HashMap<>();
-            args.put("processors", processors);
-            args.put("executor", multicastExecutor);
-            args.put("shutdownExecutorService", false);
             consumerMulticastProcessor = (AsyncProcessor) getCamelContext().adapt(ExtendedCamelContext.class)
-                    .getProcessorFactory().createProcessor(getCamelContext(), "MulticastProcessor", args);
+                    .getProcessorFactory().createProcessor(getCamelContext(), "MulticastProcessor",
+                            new Object[] { processors, multicastExecutor, false });
         }
     }
 
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 4830369..56355c9 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,8 +16,6 @@
  */
 package org.apache.camel.spi;
 
-import java.util.Map;
-
 import org.apache.camel.CamelContext;
 import org.apache.camel.NamedNode;
 import org.apache.camel.Processor;
@@ -73,10 +71,10 @@
      *
      * @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)
+     * @param  args           arguments for creating the processor (optimized to use fixed order of parameters)
      * @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;
+    Processor createProcessor(CamelContext camelContext, String definitionName, Object[] args) throws Exception;
 
 }
diff --git a/core/camel-base/src/main/java/org/apache/camel/impl/engine/DefaultFluentProducerTemplate.java b/core/camel-base/src/main/java/org/apache/camel/impl/engine/DefaultFluentProducerTemplate.java
index 40d4bd1..501a69a 100644
--- a/core/camel-base/src/main/java/org/apache/camel/impl/engine/DefaultFluentProducerTemplate.java
+++ b/core/camel-base/src/main/java/org/apache/camel/impl/engine/DefaultFluentProducerTemplate.java
@@ -66,10 +66,8 @@
         this.resultProcessors = new ClassValue<Processor>() {
             @Override
             protected Processor computeValue(Class<?> type) {
-                Map<String, Object> args = new HashMap<>();
-                args.put("type", type);
                 try {
-                    return processorFactory.createProcessor(context, "ConvertBodyProcessor", args);
+                    return processorFactory.createProcessor(context, "ConvertBodyProcessor", new Object[] { type });
                 } catch (Exception e) {
                     throw RuntimeCamelException.wrapRuntimeException(e);
                 }
diff --git a/core/camel-base/src/main/java/org/apache/camel/impl/engine/DefaultProducerTemplate.java b/core/camel-base/src/main/java/org/apache/camel/impl/engine/DefaultProducerTemplate.java
index 0cf510d..fd015f9 100644
--- a/core/camel-base/src/main/java/org/apache/camel/impl/engine/DefaultProducerTemplate.java
+++ b/core/camel-base/src/main/java/org/apache/camel/impl/engine/DefaultProducerTemplate.java
@@ -16,7 +16,6 @@
  */
 package org.apache.camel.impl.engine;
 
-import java.util.HashMap;
 import java.util.Map;
 import java.util.concurrent.CompletableFuture;
 import java.util.concurrent.ExecutorService;
@@ -560,10 +559,8 @@
     }
 
     protected Processor createConvertBodyProcessor(final Class<?> type) {
-        Map<String, Object> args = new HashMap<>();
-        args.put("type", type);
         try {
-            return processorFactory.createProcessor(camelContext, "ConvertBodyProcessor", args);
+            return processorFactory.createProcessor(camelContext, "ConvertBodyProcessor", new Object[] { type });
         } catch (Exception e) {
             throw RuntimeCamelException.wrapRuntimeException(e);
         }
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 0e756db..88dae7a 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,7 +16,6 @@
  */
 package org.apache.camel.impl.cloud;
 
-import java.util.HashMap;
 import java.util.Map;
 
 import org.apache.camel.AsyncCallback;
@@ -134,13 +133,8 @@
         ObjectHelper.notNull(expression, "expression");
         ObjectHelper.notNull(loadBalancer, "load balancer");
 
-        Map<String, Object> args = new HashMap<>();
-        args.put("uri", uri);
-        args.put("expression", expression);
-        args.put("exchangePattern", exchangePattern);
-
         Processor send = camelContext.adapt(ExtendedCamelContext.class).getProcessorFactory().createProcessor(camelContext,
-                "SendDynamicProcessor", args);
+                "SendDynamicProcessor", new Object[] { uri, expression, exchangePattern });
         processor = AsyncProcessorConverterHelper.convert(send);
 
         // optimize and build expressions that are static ahead of time
diff --git a/core/camel-core-processor/src/main/java/org/apache/camel/processor/DefaultProcessorFactory.java b/core/camel-core-processor/src/main/java/org/apache/camel/processor/DefaultProcessorFactory.java
index 3657868..e4d7f31 100644
--- a/core/camel-core-processor/src/main/java/org/apache/camel/processor/DefaultProcessorFactory.java
+++ b/core/camel-core-processor/src/main/java/org/apache/camel/processor/DefaultProcessorFactory.java
@@ -17,7 +17,6 @@
 package org.apache.camel.processor;
 
 import java.util.Collection;
-import java.util.Map;
 import java.util.concurrent.ExecutorService;
 
 import org.apache.camel.CamelContext;
@@ -82,16 +81,14 @@
         return null;
     }
 
-    // TODO: For map args then use Object[] as its faster
-
     @Override
     @SuppressWarnings("unchecked")
-    public Processor createProcessor(CamelContext camelContext, String definitionName, Map<String, Object> args)
+    public Processor createProcessor(CamelContext camelContext, String definitionName, Object[] args)
             throws Exception {
         if ("SendDynamicProcessor".equals(definitionName)) {
-            String uri = (String) args.get("uri");
-            Expression expression = (Expression) args.get("expression");
-            ExchangePattern exchangePattern = (ExchangePattern) args.get("exchangePattern");
+            String uri = (String) args[0];
+            Expression expression = (Expression) args[1];
+            ExchangePattern exchangePattern = (ExchangePattern) args[2];
             SendDynamicProcessor processor = new SendDynamicProcessor(uri, expression);
             processor.setCamelContext(camelContext);
             if (exchangePattern != null) {
@@ -99,14 +96,14 @@
             }
             return processor;
         } else if ("MulticastProcessor".equals(definitionName)) {
-            Collection<Processor> processors = (Collection<Processor>) args.get("processors");
-            ExecutorService executor = (ExecutorService) args.get("executor");
-            boolean shutdownExecutorService = (boolean) args.get("shutdownExecutorService");
+            Collection<Processor> processors = (Collection<Processor>) args[0];
+            ExecutorService executor = (ExecutorService) args[1];
+            boolean shutdownExecutorService = (boolean) args[2];
             return new MulticastProcessor(
                     camelContext, null, processors, null, true, executor, shutdownExecutorService, false, false, 0,
                     null, false, false);
         } else if ("ConvertBodyProcessor".equals(definitionName)) {
-            Class<?> type = (Class<?>) args.get("type");
+            Class<?> type = (Class<?>) args[0];
             return new ConvertBodyProcessor(type);
         }
 
diff --git a/core/camel-support/src/main/java/org/apache/camel/support/TypedProcessorFactory.java b/core/camel-support/src/main/java/org/apache/camel/support/TypedProcessorFactory.java
index 55b4b3b..8fe5bac 100644
--- a/core/camel-support/src/main/java/org/apache/camel/support/TypedProcessorFactory.java
+++ b/core/camel-support/src/main/java/org/apache/camel/support/TypedProcessorFactory.java
@@ -16,8 +16,6 @@
  */
 package org.apache.camel.support;
 
-import java.util.Map;
-
 import org.apache.camel.CamelContext;
 import org.apache.camel.NamedNode;
 import org.apache.camel.Processor;
@@ -50,16 +48,19 @@
     }
 
     @Override
-    public Processor createProcessor(CamelContext camelContext, String definitionName, Map<String, Object> args)
+    public Processor createProcessor(CamelContext camelContext, String definitionName, Object[] args)
             throws Exception {
+        // not in use
         return null;
     }
 
     protected Processor doCreateChildProcessor(Route route, T definition, boolean mandatory) throws Exception {
+        // not in use
         return null;
     }
 
     public Processor doCreateProcessor(Route route, T definition) throws Exception {
+        // not in use
         return null;
     }
 }