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 2011/06/10 14:59:54 UTC
svn commit: r1134300 - in /camel/trunk:
camel-core/src/main/java/org/apache/camel/model/
components/camel-core-xml/src/main/java/org/apache/camel/core/xml/
components/camel-spring/src/test/java/org/apache/camel/spring/config/
components/camel-spring/sr...
Author: davsclaus
Date: Fri Jun 10 12:59:54 2011
New Revision: 1134300
URL: http://svn.apache.org/viewvc?rev=1134300&view=rev
Log:
CAMEL-4077: Sanitiy check route in XML DSL, that there is input and outputs in routes.
Added:
camel/trunk/components/camel-spring/src/test/java/org/apache/camel/spring/config/SpringRouteNoFromTest.java
camel/trunk/components/camel-spring/src/test/java/org/apache/camel/spring/config/SpringRouteNoOutputTest.java
camel/trunk/components/camel-spring/src/test/resources/org/apache/camel/spring/config/SpringRouteNoFromTest.xml
- copied, changed from r1134273, camel/trunk/components/camel-spring/src/test/resources/org/apache/camel/spring/config/CamelPropertiesTest.xml
camel/trunk/components/camel-spring/src/test/resources/org/apache/camel/spring/config/SpringRouteNoOutputTest.xml
Modified:
camel/trunk/camel-core/src/main/java/org/apache/camel/model/RouteDefinitionHelper.java
camel/trunk/components/camel-core-xml/src/main/java/org/apache/camel/core/xml/AbstractCamelContextFactoryBean.java
Modified: camel/trunk/camel-core/src/main/java/org/apache/camel/model/RouteDefinitionHelper.java
URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/main/java/org/apache/camel/model/RouteDefinitionHelper.java?rev=1134300&r1=1134299&r2=1134300&view=diff
==============================================================================
--- camel/trunk/camel-core/src/main/java/org/apache/camel/model/RouteDefinitionHelper.java (original)
+++ camel/trunk/camel-core/src/main/java/org/apache/camel/model/RouteDefinitionHelper.java Fri Jun 10 12:59:54 2011
@@ -23,6 +23,7 @@ import org.apache.camel.CamelContext;
import org.apache.camel.builder.ErrorHandlerBuilder;
import org.apache.camel.util.CamelContextHelper;
import org.apache.camel.util.EndpointHelper;
+import org.apache.camel.util.ObjectHelper;
/**
* Helper for {@link RouteDefinition}
@@ -134,6 +135,32 @@ public final class RouteDefinitionHelper
route.getOutputs().addAll(0, upper);
}
+ /**
+ * Sanity check the route, that it has input(s) and outputs.
+ *
+ * @param route the route
+ * @throws IllegalArgumentException is thrown if the route is invalid
+ */
+ public static void sanityCheckRoute(RouteDefinition route) {
+ ObjectHelper.notNull(route, "route");
+
+ if (route.getInputs() == null || route.getInputs().isEmpty()) {
+ String msg = "Route has no inputs: " + route;
+ if (route.getId() != null) {
+ msg = "Route " + route.getId() + " has no inputs: " + route;
+ }
+ throw new IllegalArgumentException(msg);
+ }
+
+ if (route.getOutputs() == null || route.getOutputs().isEmpty()) {
+ String msg = "Route has no outputs: " + route;
+ if (route.getId() != null) {
+ msg = "Route " + route.getId() + " has no outputs: " + route;
+ }
+ throw new IllegalArgumentException(msg);
+ }
+ }
+
private static void initParentAndErrorHandlerBuilder(CamelContext context, RouteDefinition route,
List<ProcessorDefinition> abstracts, List<OnExceptionDefinition> onExceptions) {
Modified: camel/trunk/components/camel-core-xml/src/main/java/org/apache/camel/core/xml/AbstractCamelContextFactoryBean.java
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-core-xml/src/main/java/org/apache/camel/core/xml/AbstractCamelContextFactoryBean.java?rev=1134300&r1=1134299&r2=1134300&view=diff
==============================================================================
--- camel/trunk/components/camel-core-xml/src/main/java/org/apache/camel/core/xml/AbstractCamelContextFactoryBean.java (original)
+++ camel/trunk/components/camel-core-xml/src/main/java/org/apache/camel/core/xml/AbstractCamelContextFactoryBean.java Fri Jun 10 12:59:54 2011
@@ -313,6 +313,9 @@ public abstract class AbstractCamelConte
*/
private void prepareRoutes() {
for (RouteDefinition route : getRoutes()) {
+ // sanity check first as the route is created using XML
+ RouteDefinitionHelper.sanityCheckRoute(route);
+
// leverage logic from route definition helper to prepare the route
RouteDefinitionHelper.prepareRoute(getContext(), route, getOnExceptions(), getIntercepts(), getInterceptFroms(),
getInterceptSendToEndpoints(), getOnCompletions());
Added: camel/trunk/components/camel-spring/src/test/java/org/apache/camel/spring/config/SpringRouteNoFromTest.java
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-spring/src/test/java/org/apache/camel/spring/config/SpringRouteNoFromTest.java?rev=1134300&view=auto
==============================================================================
--- camel/trunk/components/camel-spring/src/test/java/org/apache/camel/spring/config/SpringRouteNoFromTest.java (added)
+++ camel/trunk/components/camel-spring/src/test/java/org/apache/camel/spring/config/SpringRouteNoFromTest.java Fri Jun 10 12:59:54 2011
@@ -0,0 +1,47 @@
+/**
+ * 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.spring.config;
+
+import org.apache.camel.spring.SpringTestSupport;
+import org.springframework.context.support.AbstractXmlApplicationContext;
+import org.springframework.context.support.ClassPathXmlApplicationContext;
+
+/**
+ *
+ */
+public class SpringRouteNoFromTest extends SpringTestSupport {
+
+ @Override
+ protected void setUp() throws Exception {
+ createApplicationContext();
+ }
+
+ public void testRouteNoFrom() {
+ // noop
+ }
+
+ @Override
+ protected AbstractXmlApplicationContext createApplicationContext() {
+ try {
+ return new ClassPathXmlApplicationContext("org/apache/camel/spring/config/SpringRouteNoFromTest.xml");
+ } catch (Exception e) {
+ IllegalArgumentException iae = (IllegalArgumentException) e.getCause().getCause();
+ assertEquals("Route myRoute has no inputs: Route[[] -> [To[mock:result]]]", iae.getMessage());
+ return null;
+ }
+ }
+}
Added: camel/trunk/components/camel-spring/src/test/java/org/apache/camel/spring/config/SpringRouteNoOutputTest.java
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-spring/src/test/java/org/apache/camel/spring/config/SpringRouteNoOutputTest.java?rev=1134300&view=auto
==============================================================================
--- camel/trunk/components/camel-spring/src/test/java/org/apache/camel/spring/config/SpringRouteNoOutputTest.java (added)
+++ camel/trunk/components/camel-spring/src/test/java/org/apache/camel/spring/config/SpringRouteNoOutputTest.java Fri Jun 10 12:59:54 2011
@@ -0,0 +1,47 @@
+/**
+ * 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.spring.config;
+
+import org.apache.camel.spring.SpringTestSupport;
+import org.springframework.context.support.AbstractXmlApplicationContext;
+import org.springframework.context.support.ClassPathXmlApplicationContext;
+
+/**
+ *
+ */
+public class SpringRouteNoOutputTest extends SpringTestSupport {
+
+ @Override
+ protected void setUp() throws Exception {
+ createApplicationContext();
+ }
+
+ public void testRouteNoOutput() {
+ // noop
+ }
+
+ @Override
+ protected AbstractXmlApplicationContext createApplicationContext() {
+ try {
+ return new ClassPathXmlApplicationContext("org/apache/camel/spring/config/SpringRouteNoOutputTest.xml");
+ } catch (Exception e) {
+ IllegalArgumentException iae = (IllegalArgumentException) e.getCause().getCause();
+ assertEquals("Route myRoute has no outputs: Route[[From[direct:start]] -> []]", iae.getMessage());
+ return null;
+ }
+ }
+}
Copied: camel/trunk/components/camel-spring/src/test/resources/org/apache/camel/spring/config/SpringRouteNoFromTest.xml (from r1134273, camel/trunk/components/camel-spring/src/test/resources/org/apache/camel/spring/config/CamelPropertiesTest.xml)
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-spring/src/test/resources/org/apache/camel/spring/config/SpringRouteNoFromTest.xml?p2=camel/trunk/components/camel-spring/src/test/resources/org/apache/camel/spring/config/SpringRouteNoFromTest.xml&p1=camel/trunk/components/camel-spring/src/test/resources/org/apache/camel/spring/config/CamelPropertiesTest.xml&r1=1134273&r2=1134300&rev=1134300&view=diff
==============================================================================
--- camel/trunk/components/camel-spring/src/test/resources/org/apache/camel/spring/config/CamelPropertiesTest.xml (original)
+++ camel/trunk/components/camel-spring/src/test/resources/org/apache/camel/spring/config/SpringRouteNoFromTest.xml Fri Jun 10 12:59:54 2011
@@ -22,15 +22,11 @@
http://camel.apache.org/schema/spring http://camel.apache.org/schema/spring/camel-spring.xsd
">
- <camelContext xmlns="http://camel.apache.org/schema/spring">
- <properties>
- <property key="foo" value="123"/>
- <property key="bar" value="cheese"/>
- </properties>
- <route>
- <from uri="direct:start"/>
- <to uri="mock:result"/>
- </route>
- </camelContext>
+ <camelContext xmlns="http://camel.apache.org/schema/spring">
+ <!-- this route has no from -->
+ <route id="myRoute">
+ <to uri="mock:result"/>
+ </route>
+ </camelContext>
</beans>
Added: camel/trunk/components/camel-spring/src/test/resources/org/apache/camel/spring/config/SpringRouteNoOutputTest.xml
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-spring/src/test/resources/org/apache/camel/spring/config/SpringRouteNoOutputTest.xml?rev=1134300&view=auto
==============================================================================
--- camel/trunk/components/camel-spring/src/test/resources/org/apache/camel/spring/config/SpringRouteNoOutputTest.xml (added)
+++ camel/trunk/components/camel-spring/src/test/resources/org/apache/camel/spring/config/SpringRouteNoOutputTest.xml Fri Jun 10 12:59:54 2011
@@ -0,0 +1,32 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ 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.
+-->
+<beans xmlns="http://www.springframework.org/schema/beans"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="
+ http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
+ http://camel.apache.org/schema/spring http://camel.apache.org/schema/spring/camel-spring.xsd
+ ">
+
+ <camelContext xmlns="http://camel.apache.org/schema/spring">
+ <!-- this route has no outputs -->
+ <route id="myRoute">
+ <from uri="direct:start"/>
+ </route>
+ </camelContext>
+
+</beans>