CAMEL-8526: Add more EIP as specialized mbeans

Project: http://git-wip-us.apache.org/repos/asf/camel/repo
Commit: http://git-wip-us.apache.org/repos/asf/camel/commit/4de78cea
Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/4de78cea
Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/4de78cea

Branch: refs/heads/master
Commit: 4de78cea6e165834e2488179886cda2e2f6d4bb4
Parents: e82fd11
Author: Claus Ibsen <[email protected]>
Authored: Tue Jul 21 15:13:20 2015 +0200
Committer: Claus Ibsen <[email protected]>
Committed: Tue Jul 21 15:13:20 2015 +0200

----------------------------------------------------------------------
 .../mbean/ManagedDynamicRouterMBean.java        |  2 +-
 .../management/mbean/ManagedMulticastMBean.java | 12 +--
 .../mbean/ManagedRecipientListMBean.java        | 50 +++++++++++
 .../mbean/ManagedRoutingSlipMBean.java          |  2 +-
 .../DefaultManagementObjectStrategy.java        | 17 ++++
 .../management/mbean/ManagedDynamicRouter.java  | 15 +++-
 .../management/mbean/ManagedRecipientList.java  | 94 ++++++++++++++++++++
 .../management/mbean/ManagedRoutingSlip.java    | 19 +++-
 .../apache/camel/processor/RecipientList.java   |  8 ++
 .../management/ManagedRecipientListTest.java    | 91 +++++++++++++++++++
 10 files changed, 296 insertions(+), 14 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/camel/blob/4de78cea/camel-core/src/main/java/org/apache/camel/api/management/mbean/ManagedDynamicRouterMBean.java
----------------------------------------------------------------------
diff --git 
a/camel-core/src/main/java/org/apache/camel/api/management/mbean/ManagedDynamicRouterMBean.java
 
b/camel-core/src/main/java/org/apache/camel/api/management/mbean/ManagedDynamicRouterMBean.java
index 303b514..7a6abf3 100644
--- 
a/camel-core/src/main/java/org/apache/camel/api/management/mbean/ManagedDynamicRouterMBean.java
+++ 
b/camel-core/src/main/java/org/apache/camel/api/management/mbean/ManagedDynamicRouterMBean.java
@@ -20,7 +20,7 @@ import org.apache.camel.api.management.ManagedAttribute;
 
 public interface ManagedDynamicRouterMBean extends ManagedProcessorMBean {
 
-    @ManagedAttribute(description = "Expression to call that returns the 
endpoint(s) to route to in the dynamic routing")
+    @ManagedAttribute(description = "Expression to call that returns the 
endpoint(s) to route to in the dynamic routing", mask = true)
     String getExpression();
 
     @ManagedAttribute(description = "The uri delimiter to use")

http://git-wip-us.apache.org/repos/asf/camel/blob/4de78cea/camel-core/src/main/java/org/apache/camel/api/management/mbean/ManagedMulticastMBean.java
----------------------------------------------------------------------
diff --git 
a/camel-core/src/main/java/org/apache/camel/api/management/mbean/ManagedMulticastMBean.java
 
b/camel-core/src/main/java/org/apache/camel/api/management/mbean/ManagedMulticastMBean.java
index 98c7c6c..edd8513 100644
--- 
a/camel-core/src/main/java/org/apache/camel/api/management/mbean/ManagedMulticastMBean.java
+++ 
b/camel-core/src/main/java/org/apache/camel/api/management/mbean/ManagedMulticastMBean.java
@@ -20,22 +20,22 @@ import org.apache.camel.api.management.ManagedAttribute;
 
 public interface ManagedMulticastMBean extends ManagedProcessorMBean {
 
-    @ManagedAttribute(description = "")
+    @ManagedAttribute(description = "If enabled then the aggregate method on 
AggregationStrategy can be called concurrently.")
     Boolean isParallelAggregate();
 
-    @ManagedAttribute(description = "")
+    @ManagedAttribute(description = "If enabled then sending messages to the 
multicasts occurs concurrently.")
     Boolean isParallelProcessing();
 
-    @ManagedAttribute(description = "")
+    @ManagedAttribute(description = "If enabled then Camel will process 
replies out-of-order, eg in the order they come back.")
     Boolean isStreaming();
 
-    @ManagedAttribute(description = "")
+    @ManagedAttribute(description = "Will now stop further processing if an 
exception or failure occurred during processing.")
     Boolean isStopOnException();
 
-    @ManagedAttribute(description = "")
+    @ManagedAttribute(description = "Shares the UnitOfWork with the parent and 
the resource exchange")
     Boolean isShareUnitOfWork();
 
-    @ManagedAttribute(description = "")
+    @ManagedAttribute(description = "The total timeout specified in millis, 
when using parallel processing.")
     Long getTimeout();
 
 }
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/camel/blob/4de78cea/camel-core/src/main/java/org/apache/camel/api/management/mbean/ManagedRecipientListMBean.java
----------------------------------------------------------------------
diff --git 
a/camel-core/src/main/java/org/apache/camel/api/management/mbean/ManagedRecipientListMBean.java
 
b/camel-core/src/main/java/org/apache/camel/api/management/mbean/ManagedRecipientListMBean.java
new file mode 100644
index 0000000..73d4a3e
--- /dev/null
+++ 
b/camel-core/src/main/java/org/apache/camel/api/management/mbean/ManagedRecipientListMBean.java
@@ -0,0 +1,50 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.api.management.mbean;
+
+import org.apache.camel.api.management.ManagedAttribute;
+
+public interface ManagedRecipientListMBean extends ManagedProcessorMBean {
+
+    @ManagedAttribute(description = "Expression that returns which endpoints 
(url) to send the message to (the recipients).", mask = true)
+    String getExpression();
+
+    @ManagedAttribute(description = "The uri delimiter to use")
+    String getUriDelimiter();
+
+    @ManagedAttribute(description = "Sets the maximum size used by the 
ProducerCache which is used to cache and reuse producers")
+    Integer getCacheSize();
+
+    @ManagedAttribute(description = "If enabled then the aggregate method on 
AggregationStrategy can be called concurrently.")
+    Boolean isParallelAggregate();
+
+    @ManagedAttribute(description = "If enabled then sending messages to the 
recipient lists occurs concurrently.")
+    Boolean isParallelProcessing();
+
+    @ManagedAttribute(description = "If enabled then Camel will process 
replies out-of-order, eg in the order they come back.")
+    Boolean isStreaming();
+
+    @ManagedAttribute(description = "Will now stop further processing if an 
exception or failure occurred during processing.")
+    Boolean isStopOnException();
+
+    @ManagedAttribute(description = "Shares the UnitOfWork with the parent and 
the resource exchange")
+    Boolean isShareUnitOfWork();
+
+    @ManagedAttribute(description = "The total timeout specified in millis, 
when using parallel processing.")
+    Long getTimeout();
+
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/camel/blob/4de78cea/camel-core/src/main/java/org/apache/camel/api/management/mbean/ManagedRoutingSlipMBean.java
----------------------------------------------------------------------
diff --git 
a/camel-core/src/main/java/org/apache/camel/api/management/mbean/ManagedRoutingSlipMBean.java
 
b/camel-core/src/main/java/org/apache/camel/api/management/mbean/ManagedRoutingSlipMBean.java
index 95130bb..22fb510 100644
--- 
a/camel-core/src/main/java/org/apache/camel/api/management/mbean/ManagedRoutingSlipMBean.java
+++ 
b/camel-core/src/main/java/org/apache/camel/api/management/mbean/ManagedRoutingSlipMBean.java
@@ -20,7 +20,7 @@ import org.apache.camel.api.management.ManagedAttribute;
 
 public interface ManagedRoutingSlipMBean extends ManagedProcessorMBean {
 
-    @ManagedAttribute(description = "Expression to define the routing slip, 
which defines which endpoints to route the message in a pipeline style.")
+    @ManagedAttribute(description = "Expression to define the routing slip, 
which defines which endpoints to route the message in a pipeline style.", mask 
= true)
     String getExpression();
 
     @ManagedAttribute(description = "The uri delimiter to use")

http://git-wip-us.apache.org/repos/asf/camel/blob/4de78cea/camel-core/src/main/java/org/apache/camel/management/DefaultManagementObjectStrategy.java
----------------------------------------------------------------------
diff --git 
a/camel-core/src/main/java/org/apache/camel/management/DefaultManagementObjectStrategy.java
 
b/camel-core/src/main/java/org/apache/camel/management/DefaultManagementObjectStrategy.java
index be00fce..b00f746 100644
--- 
a/camel-core/src/main/java/org/apache/camel/management/DefaultManagementObjectStrategy.java
+++ 
b/camel-core/src/main/java/org/apache/camel/management/DefaultManagementObjectStrategy.java
@@ -16,6 +16,7 @@
  */
 package org.apache.camel.management;
 
+import java.util.Iterator;
 import java.util.concurrent.ThreadPoolExecutor;
 
 import org.apache.camel.CamelContext;
@@ -50,6 +51,7 @@ import org.apache.camel.management.mbean.ManagedMulticast;
 import org.apache.camel.management.mbean.ManagedPollEnricher;
 import org.apache.camel.management.mbean.ManagedProcessor;
 import org.apache.camel.management.mbean.ManagedProducer;
+import org.apache.camel.management.mbean.ManagedRecipientList;
 import org.apache.camel.management.mbean.ManagedRoute;
 import org.apache.camel.management.mbean.ManagedRoutingSlip;
 import org.apache.camel.management.mbean.ManagedScheduledPollConsumer;
@@ -63,6 +65,8 @@ import 
org.apache.camel.management.mbean.ManagedThroughputLogger;
 import org.apache.camel.management.mbean.ManagedWireTapProcessor;
 import org.apache.camel.model.ModelCamelContext;
 import org.apache.camel.model.ProcessorDefinition;
+import org.apache.camel.model.RecipientListDefinition;
+import org.apache.camel.model.ThreadsDefinition;
 import org.apache.camel.processor.Delayer;
 import org.apache.camel.processor.DynamicRouter;
 import org.apache.camel.processor.Enricher;
@@ -70,7 +74,9 @@ import org.apache.camel.processor.ErrorHandler;
 import org.apache.camel.processor.FilterProcessor;
 import org.apache.camel.processor.LoopProcessor;
 import org.apache.camel.processor.MulticastProcessor;
+import org.apache.camel.processor.Pipeline;
 import org.apache.camel.processor.PollEnricher;
+import org.apache.camel.processor.RecipientList;
 import org.apache.camel.processor.RoutingSlip;
 import org.apache.camel.processor.SendDynamicProcessor;
 import org.apache.camel.processor.SendProcessor;
@@ -185,6 +191,15 @@ public class DefaultManagementObjectStrategy implements 
ManagementObjectStrategy
                                                ProcessorDefinition<?> 
definition, Route route) {
         ManagedProcessor answer = null;
 
+        if (definition instanceof RecipientListDefinition || definition 
instanceof ThreadsDefinition) {
+            // special for RecipientListDefinition/ThreadsDefinition, as the 
processor is wrapped in a pipeline as last
+            Pipeline pipeline = (Pipeline) processor;
+            Iterator<Processor> it = pipeline.getProcessors().iterator();
+            while (it.hasNext()) {
+                processor = it.next();
+            }
+        }
+
         // unwrap delegates as we want the real target processor
         Processor target = processor;
         while (target != null) {
@@ -207,6 +222,8 @@ public class DefaultManagementObjectStrategy implements 
ManagementObjectStrategy
                 answer = new ManagedFilter(context, (FilterProcessor) target, 
definition);
             } else if (target instanceof LoopProcessor) {
                 answer = new ManagedLoop(context, (LoopProcessor) target, 
definition);
+            } else if (target instanceof RecipientList) {
+                answer = new ManagedRecipientList(context, (RecipientList) 
target, definition);
             } else if (target instanceof MulticastProcessor) {
                 answer = new ManagedMulticast(context, (MulticastProcessor) 
target, definition);
             } else if (target instanceof WireTapProcessor) {

http://git-wip-us.apache.org/repos/asf/camel/blob/4de78cea/camel-core/src/main/java/org/apache/camel/management/mbean/ManagedDynamicRouter.java
----------------------------------------------------------------------
diff --git 
a/camel-core/src/main/java/org/apache/camel/management/mbean/ManagedDynamicRouter.java
 
b/camel-core/src/main/java/org/apache/camel/management/mbean/ManagedDynamicRouter.java
index 640effa..9da30d6 100644
--- 
a/camel-core/src/main/java/org/apache/camel/management/mbean/ManagedDynamicRouter.java
+++ 
b/camel-core/src/main/java/org/apache/camel/management/mbean/ManagedDynamicRouter.java
@@ -21,6 +21,8 @@ import org.apache.camel.api.management.ManagedResource;
 import org.apache.camel.api.management.mbean.ManagedDynamicRouterMBean;
 import org.apache.camel.model.ProcessorDefinition;
 import org.apache.camel.processor.DynamicRouter;
+import org.apache.camel.spi.ManagementStrategy;
+import org.apache.camel.util.URISupport;
 
 /**
  * @version 
@@ -28,12 +30,21 @@ import org.apache.camel.processor.DynamicRouter;
 @ManagedResource(description = "Managed DynamicRouter")
 public class ManagedDynamicRouter extends ManagedProcessor implements 
ManagedDynamicRouterMBean {
     private final DynamicRouter processor;
-    private final String uri;
+    private String uri;
 
     public ManagedDynamicRouter(CamelContext context, DynamicRouter processor, 
ProcessorDefinition<?> definition) {
         super(context, processor, definition);
         this.processor = processor;
-        this.uri = processor.getExpression().toString();
+    }
+
+    @Override
+    public void init(ManagementStrategy strategy) {
+        super.init(strategy);
+        boolean sanitize = strategy.getManagementAgent().getMask() != null ? 
strategy.getManagementAgent().getMask() : false;
+        uri = processor.getExpression().toString();
+        if (sanitize) {
+            uri = URISupport.sanitizeUri(uri);
+        }
     }
 
     @Override

http://git-wip-us.apache.org/repos/asf/camel/blob/4de78cea/camel-core/src/main/java/org/apache/camel/management/mbean/ManagedRecipientList.java
----------------------------------------------------------------------
diff --git 
a/camel-core/src/main/java/org/apache/camel/management/mbean/ManagedRecipientList.java
 
b/camel-core/src/main/java/org/apache/camel/management/mbean/ManagedRecipientList.java
new file mode 100644
index 0000000..91046d0
--- /dev/null
+++ 
b/camel-core/src/main/java/org/apache/camel/management/mbean/ManagedRecipientList.java
@@ -0,0 +1,94 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.management.mbean;
+
+import org.apache.camel.CamelContext;
+import org.apache.camel.api.management.ManagedResource;
+import org.apache.camel.api.management.mbean.ManagedRecipientListMBean;
+import org.apache.camel.model.ProcessorDefinition;
+import org.apache.camel.processor.RecipientList;
+import org.apache.camel.spi.ManagementStrategy;
+import org.apache.camel.util.URISupport;
+
+/**
+ * @version 
+ */
+@ManagedResource(description = "Managed RecipientList")
+public class ManagedRecipientList extends ManagedProcessor implements 
ManagedRecipientListMBean {
+    private final RecipientList processor;
+    private String uri;
+
+    public ManagedRecipientList(CamelContext context, RecipientList processor, 
ProcessorDefinition<?> definition) {
+        super(context, processor, definition);
+        this.processor = processor;
+    }
+
+    @Override
+    public void init(ManagementStrategy strategy) {
+        super.init(strategy);
+        boolean sanitize = strategy.getManagementAgent().getMask() != null ? 
strategy.getManagementAgent().getMask() : false;
+        uri = processor.getExpression().toString();
+        if (sanitize) {
+            uri = URISupport.sanitizeUri(uri);
+        }
+    }
+
+    @Override
+    public String getExpression() {
+        return uri;
+    }
+
+    @Override
+    public String getUriDelimiter() {
+        return processor.getDelimiter();
+    }
+
+    @Override
+    public Integer getCacheSize() {
+        return processor.getCacheSize();
+    }
+
+    @Override
+    public Boolean isParallelAggregate() {
+        return processor.isParallelAggregate();
+    }
+
+    @Override
+    public Boolean isParallelProcessing() {
+        return processor.isParallelProcessing();
+    }
+
+    @Override
+    public Boolean isStreaming() {
+        return processor.isStreaming();
+    }
+
+    @Override
+    public Boolean isStopOnException() {
+        return processor.isStopOnException();
+    }
+
+    @Override
+    public Boolean isShareUnitOfWork() {
+        return processor.isShareUnitOfWork();
+    }
+
+    @Override
+    public Long getTimeout() {
+        return processor.getTimeout();
+    }
+}

http://git-wip-us.apache.org/repos/asf/camel/blob/4de78cea/camel-core/src/main/java/org/apache/camel/management/mbean/ManagedRoutingSlip.java
----------------------------------------------------------------------
diff --git 
a/camel-core/src/main/java/org/apache/camel/management/mbean/ManagedRoutingSlip.java
 
b/camel-core/src/main/java/org/apache/camel/management/mbean/ManagedRoutingSlip.java
index d2a0b4e..1ea0da9 100644
--- 
a/camel-core/src/main/java/org/apache/camel/management/mbean/ManagedRoutingSlip.java
+++ 
b/camel-core/src/main/java/org/apache/camel/management/mbean/ManagedRoutingSlip.java
@@ -18,22 +18,33 @@ package org.apache.camel.management.mbean;
 
 import org.apache.camel.CamelContext;
 import org.apache.camel.api.management.ManagedResource;
-import org.apache.camel.api.management.mbean.ManagedDynamicRouterMBean;
+import org.apache.camel.api.management.mbean.ManagedRoutingSlipMBean;
 import org.apache.camel.model.ProcessorDefinition;
 import org.apache.camel.processor.RoutingSlip;
+import org.apache.camel.spi.ManagementStrategy;
+import org.apache.camel.util.URISupport;
 
 /**
  * @version 
  */
 @ManagedResource(description = "Managed RoutingSlip")
-public class ManagedRoutingSlip extends ManagedProcessor implements 
ManagedDynamicRouterMBean {
+public class ManagedRoutingSlip extends ManagedProcessor implements 
ManagedRoutingSlipMBean {
     private final RoutingSlip processor;
-    private final String uri;
+    private String uri;
 
     public ManagedRoutingSlip(CamelContext context, RoutingSlip processor, 
ProcessorDefinition<?> definition) {
         super(context, processor, definition);
         this.processor = processor;
-        this.uri = processor.getExpression().toString();
+    }
+
+    @Override
+    public void init(ManagementStrategy strategy) {
+        super.init(strategy);
+        boolean sanitize = strategy.getManagementAgent().getMask() != null ? 
strategy.getManagementAgent().getMask() : false;
+        uri = processor.getExpression().toString();
+        if (sanitize) {
+            uri = URISupport.sanitizeUri(uri);
+        }
     }
 
     @Override

http://git-wip-us.apache.org/repos/asf/camel/blob/4de78cea/camel-core/src/main/java/org/apache/camel/processor/RecipientList.java
----------------------------------------------------------------------
diff --git 
a/camel-core/src/main/java/org/apache/camel/processor/RecipientList.java 
b/camel-core/src/main/java/org/apache/camel/processor/RecipientList.java
index a5a0c0d..3d14b69 100644
--- a/camel-core/src/main/java/org/apache/camel/processor/RecipientList.java
+++ b/camel-core/src/main/java/org/apache/camel/processor/RecipientList.java
@@ -213,6 +213,14 @@ public class RecipientList extends ServiceSupport 
implements AsyncProcessor, IdA
         }
     }
 
+    public Expression getExpression() {
+        return expression;
+    }
+
+    public String getDelimiter() {
+        return delimiter;
+    }
+
     public boolean isStreaming() {
         return streaming;
     }

http://git-wip-us.apache.org/repos/asf/camel/blob/4de78cea/camel-core/src/test/java/org/apache/camel/management/ManagedRecipientListTest.java
----------------------------------------------------------------------
diff --git 
a/camel-core/src/test/java/org/apache/camel/management/ManagedRecipientListTest.java
 
b/camel-core/src/test/java/org/apache/camel/management/ManagedRecipientListTest.java
new file mode 100644
index 0000000..3b2661f3
--- /dev/null
+++ 
b/camel-core/src/test/java/org/apache/camel/management/ManagedRecipientListTest.java
@@ -0,0 +1,91 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.management;
+
+import javax.management.MBeanServer;
+import javax.management.ObjectName;
+import javax.management.openmbean.TabularData;
+
+import org.apache.camel.ServiceStatus;
+import org.apache.camel.builder.RouteBuilder;
+import org.apache.camel.component.mock.MockEndpoint;
+
+/**
+ * @version 
+ */
+public class ManagedRecipientListTest extends ManagementTestSupport {
+
+    public void testManageRecipientList() throws Exception {
+        // JMX tests dont work well on AIX CI servers (hangs them)
+        if (isPlatform("aix")) {
+            return;
+        }
+
+        MockEndpoint foo = getMockEndpoint("mock:foo");
+        foo.expectedMessageCount(1);
+
+        template.sendBodyAndHeader("direct:start", "Hello World", "foo", 
"mock:foo");
+
+        assertMockEndpointsSatisfied();
+
+        // get the stats for the route
+        MBeanServer mbeanServer = getMBeanServer();
+
+        // get the object name for the delayer
+        ObjectName on = 
ObjectName.getInstance("org.apache.camel:context=camel-1,type=processors,name=\"mysend\"");
+
+        // should be on route1
+        String routeId = (String) mbeanServer.getAttribute(on, "RouteId");
+        assertEquals("route1", routeId);
+
+        String camelId = (String) mbeanServer.getAttribute(on, "CamelId");
+        assertEquals("camel-1", camelId);
+
+        String state = (String) mbeanServer.getAttribute(on, "State");
+        assertEquals(ServiceStatus.Started.name(), state);
+
+        Boolean parallel = (Boolean) mbeanServer.getAttribute(on, 
"ParallelProcessing");
+        assertEquals(false, parallel.booleanValue());
+
+        String uri = (String) mbeanServer.getAttribute(on, "Expression");
+        assertEquals("header(foo)", uri);
+
+        TabularData data = (TabularData) mbeanServer.invoke(on, "explain", new 
Object[]{false}, new String[]{"boolean"});
+        assertNotNull(data);
+        assertEquals(2, data.size());
+
+        data = (TabularData) mbeanServer.invoke(on, "explain", new 
Object[]{true}, new String[]{"boolean"});
+        assertNotNull(data);
+        assertEquals(17, data.size());
+
+        String json = (String) mbeanServer.invoke(on, "informationJson", null, 
null);
+        assertNotNull(json);
+        assertTrue(json.contains("\"description\": \"Routes messages to a 
number of dynamically specified recipients (dynamic to)"));
+    }
+
+    @Override
+    protected RouteBuilder createRouteBuilder() throws Exception {
+        return new RouteBuilder() {
+            @Override
+            public void configure() throws Exception {
+                from("direct:start")
+                    .recipientList(header("foo")).id("mysend");
+            }
+        };
+    }
+
+}

Reply via email to