You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by da...@apache.org on 2014/02/15 13:03:09 UTC

[1/2] git commit: CAMEL-7208: Updating routes from managed camel context should support decoding the xml prior to loading the routes, as the xml may likely have been xml encoded. Added 2nd option with boolean to turn on|off.

Repository: camel
Updated Branches:
  refs/heads/camel-2.12.x 046b9adbf -> ef3b60e28


CAMEL-7208: Updating routes from managed camel context should support decoding the xml prior to loading the routes, as the xml may likely have been xml encoded. Added 2nd option with boolean to turn on|off.


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

Branch: refs/heads/camel-2.12.x
Commit: 7a13a66fc7286f9522d26ec3e81c709d0a8aa69c
Parents: 046b9ad
Author: Claus Ibsen <da...@apache.org>
Authored: Sat Feb 15 12:45:35 2014 +0100
Committer: Claus Ibsen <da...@apache.org>
Committed: Sat Feb 15 13:04:22 2014 +0100

----------------------------------------------------------------------
 .../mbean/ManagedCamelContextMBean.java         |   3 +
 .../management/mbean/ManagedCamelContext.java   |  13 +-
 ...tesWithPropertyPlaceholdersFromXmlPTest.java | 161 +++++++++++++++++++
 3 files changed, 176 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/camel/blob/7a13a66f/camel-core/src/main/java/org/apache/camel/api/management/mbean/ManagedCamelContextMBean.java
----------------------------------------------------------------------
diff --git a/camel-core/src/main/java/org/apache/camel/api/management/mbean/ManagedCamelContextMBean.java b/camel-core/src/main/java/org/apache/camel/api/management/mbean/ManagedCamelContextMBean.java
index 15bd452..fb9cdc2 100644
--- a/camel-core/src/main/java/org/apache/camel/api/management/mbean/ManagedCamelContextMBean.java
+++ b/camel-core/src/main/java/org/apache/camel/api/management/mbean/ManagedCamelContextMBean.java
@@ -170,6 +170,9 @@ public interface ManagedCamelContextMBean extends ManagedPerformanceCounterMBean
     @ManagedOperation(description = "Adds or updates existing routes from XML")
     void addOrUpdateRoutesFromXml(String xml) throws Exception;
 
+    @ManagedOperation(description = "Adds or updates existing routes from XML")
+    void addOrUpdateRoutesFromXml(String xml, boolean urlDecode) throws Exception;
+
     @ManagedOperation(description = "Dumps the routes stats as XML")
     String dumpRoutesStatsAsXml(boolean fullStats, boolean includeProcessors) throws Exception;
 

http://git-wip-us.apache.org/repos/asf/camel/blob/7a13a66f/camel-core/src/main/java/org/apache/camel/management/mbean/ManagedCamelContext.java
----------------------------------------------------------------------
diff --git a/camel-core/src/main/java/org/apache/camel/management/mbean/ManagedCamelContext.java b/camel-core/src/main/java/org/apache/camel/management/mbean/ManagedCamelContext.java
index 8d5b4ce..af6c864 100644
--- a/camel-core/src/main/java/org/apache/camel/management/mbean/ManagedCamelContext.java
+++ b/camel-core/src/main/java/org/apache/camel/management/mbean/ManagedCamelContext.java
@@ -18,6 +18,7 @@ package org.apache.camel.management.mbean;
 
 import java.io.IOException;
 import java.io.InputStream;
+import java.net.URLDecoder;
 import java.util.ArrayList;
 import java.util.Collection;
 import java.util.LinkedHashSet;
@@ -46,6 +47,7 @@ import org.apache.camel.model.ModelCamelContext;
 import org.apache.camel.model.ModelHelper;
 import org.apache.camel.model.RouteDefinition;
 import org.apache.camel.model.RoutesDefinition;
+import org.apache.camel.util.URISupport;
 
 /**
  * @version 
@@ -292,7 +294,16 @@ public class ManagedCamelContext extends ManagedPerformanceCounter implements Ti
     }
 
     public void addOrUpdateRoutesFromXml(String xml) throws Exception {
-        // convert to model from xml
+        // do not decode so we function as before
+        addOrUpdateRoutesFromXml(xml, false);
+    }
+
+    public void addOrUpdateRoutesFromXml(String xml, boolean urlDecode) throws Exception {
+        // decode String as it may have been encoded, from its xml source
+        if (urlDecode) {
+            xml = URLDecoder.decode(xml, "UTF-8");
+        }
+
         InputStream is = context.getTypeConverter().mandatoryConvertTo(InputStream.class, xml);
         RoutesDefinition def = context.loadRoutesDefinition(is);
         if (def == null) {

http://git-wip-us.apache.org/repos/asf/camel/blob/7a13a66f/camel-core/src/test/java/org/apache/camel/management/ManagedCamelContextUpdateRoutesWithPropertyPlaceholdersFromXmlPTest.java
----------------------------------------------------------------------
diff --git a/camel-core/src/test/java/org/apache/camel/management/ManagedCamelContextUpdateRoutesWithPropertyPlaceholdersFromXmlPTest.java b/camel-core/src/test/java/org/apache/camel/management/ManagedCamelContextUpdateRoutesWithPropertyPlaceholdersFromXmlPTest.java
new file mode 100644
index 0000000..1c98684
--- /dev/null
+++ b/camel-core/src/test/java/org/apache/camel/management/ManagedCamelContextUpdateRoutesWithPropertyPlaceholdersFromXmlPTest.java
@@ -0,0 +1,161 @@
+/**
+ * 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 java.util.Properties;
+import java.util.Set;
+import javax.management.MBeanServer;
+import javax.management.ObjectName;
+
+import org.apache.camel.CamelContext;
+import org.apache.camel.builder.RouteBuilder;
+import org.apache.camel.component.mock.MockEndpoint;
+import org.apache.camel.component.properties.PropertiesComponent;
+
+/**
+ * @version 
+ */
+public class ManagedCamelContextUpdateRoutesWithPropertyPlaceholdersFromXmlPTest extends ManagementTestSupport {
+
+    private Properties props;
+
+    @Override
+    protected CamelContext createCamelContext() throws Exception {
+        props = new Properties();
+        props.put("somewhere", "mock:changed");
+        props.put("theBar", "mock:bar");
+
+        CamelContext context = super.createCamelContext();
+
+        PropertiesComponent pc = context.getComponent("properties", PropertiesComponent.class);
+        pc.setLocations(new String[0]);
+        pc.setOverrideProperties(props);
+
+        return context;
+    }
+
+    public void testUpdate() throws Exception {
+        // JMX tests dont work well on AIX CI servers (hangs them)
+        if (isPlatform("aix")) {
+            return;
+        }
+
+        MockEndpoint mock = getMockEndpoint("mock:result");
+        mock.expectedBodiesReceived("Hello World");
+        template.sendBody("direct:start", "Hello World");
+        assertMockEndpointsSatisfied();
+
+        MBeanServer mbeanServer = getMBeanServer();
+
+        // there should be 1 routes to start with
+        Set<ObjectName> set = mbeanServer.queryNames(new ObjectName("*:type=routes,*"), null);
+        assertEquals(1, set.size());
+
+        // update existing route, and add a 2nd
+        String xml =
+                  "<routes id=\"myRoute\" xmlns=\"http://camel.apache.org/schema/spring\">"
+                + "<route id=\"myRoute\">"
+                + "  <from uri=\"direct:start\"/>"
+                + "  <log message=\"This is a changed route saying ${body}\"/>"
+                + "  <to uri=\"{{somewhere}}\"/>"
+                + "</route>"
+                + "<route id=\"myOtherRoute\">"
+                + "  <from uri=\"seda:bar\"/>"
+                + "  <to uri=\"{{theBar}}\"/>"
+                + "</route>"
+                + "</routes>";
+
+        ObjectName on = ObjectName.getInstance("org.apache.camel:context=camel-1,type=context,name=\"camel-1\"");
+        mbeanServer.invoke(on, "addOrUpdateRoutesFromXml", new Object[]{xml}, new String[]{"java.lang.String"});
+
+        // there should be 2 routes now
+        set = mbeanServer.queryNames(new ObjectName("*:type=routes,*"), null);
+        assertEquals(2, set.size());
+
+        // test updated route
+        getMockEndpoint("mock:changed").expectedMessageCount(1);
+        template.sendBody("direct:start", "Bye World");
+        assertMockEndpointsSatisfied();
+
+        // test new route
+        getMockEndpoint("mock:bar").expectedMessageCount(1);
+        template.sendBody("seda:bar", "Hi Camel");
+        assertMockEndpointsSatisfied();
+    }
+
+    public void testUpdateEscaped() throws Exception {
+        // JMX tests dont work well on AIX CI servers (hangs them)
+        if (isPlatform("aix")) {
+            return;
+        }
+
+        MockEndpoint mock = getMockEndpoint("mock:result");
+        mock.expectedBodiesReceived("Hello World");
+        template.sendBody("direct:start", "Hello World");
+        assertMockEndpointsSatisfied();
+
+        MBeanServer mbeanServer = getMBeanServer();
+
+        // there should be 1 routes to start with
+        Set<ObjectName> set = mbeanServer.queryNames(new ObjectName("*:type=routes,*"), null);
+        assertEquals(1, set.size());
+
+        // update existing route, and add a 2nd
+        String xml =
+                  "<routes id=\"myRoute\" xmlns=\"http://camel.apache.org/schema/spring\">"
+                + "<route id=\"myRoute\">"
+                + "  <from uri=\"direct:start\"/>"
+                + "  <log message=\"This is a changed route saying ${body}\"/>"
+                + "  <to uri=\"%7B%7Bsomewhere%7D%7D\"/>"
+                + "</route>"
+                + "<route id=\"myOtherRoute\">"
+                + "  <from uri=\"seda:bar\"/>"
+                + "  <to uri=\"%7B%7BtheBar%7D%7D\"/>"
+                + "</route>"
+                + "</routes>";
+
+        ObjectName on = ObjectName.getInstance("org.apache.camel:context=camel-1,type=context,name=\"camel-1\"");
+        mbeanServer.invoke(on, "addOrUpdateRoutesFromXml", new Object[]{xml, true}, new String[]{"java.lang.String", "boolean"});
+
+        // there should be 2 routes now
+        set = mbeanServer.queryNames(new ObjectName("*:type=routes,*"), null);
+        assertEquals(2, set.size());
+
+        // test updated route
+        getMockEndpoint("mock:changed").expectedMessageCount(1);
+        template.sendBody("direct:start", "Bye World");
+        assertMockEndpointsSatisfied();
+
+        // test new route
+        getMockEndpoint("mock:bar").expectedMessageCount(1);
+        template.sendBody("seda:bar", "Hi Camel");
+        assertMockEndpointsSatisfied();
+    }
+
+    @Override
+    protected RouteBuilder createRouteBuilder() throws Exception {
+        return new RouteBuilder() {
+            @Override
+            public void configure() throws Exception {
+                from("direct:start").routeId("myRoute")
+                    .log("Got ${body}")
+                    .to("mock:result");
+            }
+        };
+    }
+
+}


[2/2] git commit: CAMEL-7208: Updating routes from managed camel context should support decoding the xml prior to loading the routes, as the xml may likely have been xml encoded. Added 2nd option with boolean to turn on|off.

Posted by da...@apache.org.
CAMEL-7208: Updating routes from managed camel context should support decoding the xml prior to loading the routes, as the xml may likely have been xml encoded. Added 2nd option with boolean to turn on|off.


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

Branch: refs/heads/camel-2.12.x
Commit: ef3b60e289cd37abad8988192d6c2254d5201ce6
Parents: 7a13a66
Author: Claus Ibsen <da...@apache.org>
Authored: Sat Feb 15 13:03:34 2014 +0100
Committer: Claus Ibsen <da...@apache.org>
Committed: Sat Feb 15 13:04:32 2014 +0100

----------------------------------------------------------------------
 .../java/org/apache/camel/management/mbean/ManagedCamelContext.java | 1 -
 1 file changed, 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/camel/blob/ef3b60e2/camel-core/src/main/java/org/apache/camel/management/mbean/ManagedCamelContext.java
----------------------------------------------------------------------
diff --git a/camel-core/src/main/java/org/apache/camel/management/mbean/ManagedCamelContext.java b/camel-core/src/main/java/org/apache/camel/management/mbean/ManagedCamelContext.java
index af6c864..58f0a4a 100644
--- a/camel-core/src/main/java/org/apache/camel/management/mbean/ManagedCamelContext.java
+++ b/camel-core/src/main/java/org/apache/camel/management/mbean/ManagedCamelContext.java
@@ -47,7 +47,6 @@ import org.apache.camel.model.ModelCamelContext;
 import org.apache.camel.model.ModelHelper;
 import org.apache.camel.model.RouteDefinition;
 import org.apache.camel.model.RoutesDefinition;
-import org.apache.camel.util.URISupport;
 
 /**
  * @version