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/01/15 14:46:38 UTC
svn commit: r1059327 - in /camel/trunk/camel-core/src:
main/java/org/apache/camel/impl/ main/java/org/apache/camel/model/
test/java/org/apache/camel/model/ test/resources/org/apache/camel/model/
Author: davsclaus
Date: Sat Jan 15 13:46:38 2011
New Revision: 1059327
URL: http://svn.apache.org/viewvc?rev=1059327&view=rev
Log:
CAMEL-3543: Fixed loading routes from XML should prepare route model sooner.
Added:
camel/trunk/camel-core/src/test/java/org/apache/camel/model/LoadRouteFromXmlWithPolicyTest.java
- copied, changed from r1059270, camel/trunk/camel-core/src/test/java/org/apache/camel/model/LoadRouteFromXmlWithOnExceptionTest.java
camel/trunk/camel-core/src/test/resources/org/apache/camel/model/barPolicyRoute.xml
- copied, changed from r1059270, camel/trunk/camel-core/src/test/resources/org/apache/camel/model/barOnExceptionRoute.xml
Modified:
camel/trunk/camel-core/src/main/java/org/apache/camel/impl/DefaultCamelContext.java
camel/trunk/camel-core/src/main/java/org/apache/camel/model/RouteDefinitionHelper.java
Modified: camel/trunk/camel-core/src/main/java/org/apache/camel/impl/DefaultCamelContext.java
URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/main/java/org/apache/camel/impl/DefaultCamelContext.java?rev=1059327&r1=1059326&r2=1059327&view=diff
==============================================================================
--- camel/trunk/camel-core/src/main/java/org/apache/camel/impl/DefaultCamelContext.java (original)
+++ camel/trunk/camel-core/src/main/java/org/apache/camel/impl/DefaultCamelContext.java Sat Jan 15 13:46:38 2011
@@ -694,11 +694,12 @@ public class DefaultCamelContext extends
}
public void startRoute(RouteDefinition route) throws Exception {
+ // must ensure route is prepared, before we can start it
+ route.prepare();
+
List<Route> routes = new ArrayList<Route>();
List<RouteContext> routeContexts = route.addRoutes(this, routes);
RouteService routeService = new RouteService(this, route, routeContexts, routes);
- // must ensure route is prepared, before we can start it
- route.prepare();
startRouteService(routeService, true);
}
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=1059327&r1=1059326&r2=1059327&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 Sat Jan 15 13:46:38 2011
@@ -19,6 +19,7 @@ package org.apache.camel.model;
import java.util.ArrayList;
import java.util.List;
+import org.apache.camel.impl.InterceptSendToEndpoint;
import org.apache.camel.util.EndpointHelper;
/**
@@ -113,7 +114,7 @@ public final class RouteDefinitionHelper
RouteDefinitionHelper.prepareRouteForInit(route, abstracts, lower);
// interceptors should be first for the cross cutting concerns
- initInterceptors(route, upper, intercepts, interceptFromDefinitions, interceptSendToEndpointDefinitions);
+ initInterceptors(route, abstracts, upper, intercepts, interceptFromDefinitions, interceptSendToEndpointDefinitions);
// then on completion
initOnCompletions(abstracts, upper, onCompletions);
// then transactions
@@ -148,10 +149,39 @@ public final class RouteDefinitionHelper
}
}
- private static void initInterceptors(RouteDefinition route, List<ProcessorDefinition> upper,
+ private static void initInterceptors(RouteDefinition route, List<ProcessorDefinition> abstracts, List<ProcessorDefinition> upper,
List<InterceptDefinition> intercepts,
List<InterceptFromDefinition> interceptFromDefinitions,
List<InterceptSendToEndpointDefinition> interceptSendToEndpointDefinitions) {
+
+ // move the abstracts interceptors into the dedicated list
+ for (ProcessorDefinition processor : abstracts) {
+ if (processor instanceof InterceptSendToEndpointDefinition) {
+ if (interceptSendToEndpointDefinitions == null) {
+ interceptSendToEndpointDefinitions = new ArrayList<InterceptSendToEndpointDefinition>();
+ }
+ interceptSendToEndpointDefinitions.add((InterceptSendToEndpointDefinition) processor);
+ } else if (processor instanceof InterceptFromDefinition) {
+ if (interceptFromDefinitions == null) {
+ interceptFromDefinitions = new ArrayList<InterceptFromDefinition>();
+ }
+ interceptFromDefinitions.add((InterceptFromDefinition) processor);
+ } else if (processor instanceof InterceptDefinition) {
+ if (intercepts == null) {
+ intercepts = new ArrayList<InterceptDefinition>();
+ }
+ intercepts.add((InterceptDefinition) processor);
+ }
+ }
+
+ doInitInterceptors(route, upper, intercepts, interceptFromDefinitions, interceptSendToEndpointDefinitions);
+ }
+
+ private static void doInitInterceptors(RouteDefinition route, List<ProcessorDefinition> upper,
+ List<InterceptDefinition> intercepts,
+ List<InterceptFromDefinition> interceptFromDefinitions,
+ List<InterceptSendToEndpointDefinition> interceptSendToEndpointDefinitions) {
+
// configure intercept
if (intercepts != null && !intercepts.isEmpty()) {
for (InterceptDefinition intercept : intercepts) {
Copied: camel/trunk/camel-core/src/test/java/org/apache/camel/model/LoadRouteFromXmlWithPolicyTest.java (from r1059270, camel/trunk/camel-core/src/test/java/org/apache/camel/model/LoadRouteFromXmlWithOnExceptionTest.java)
URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/test/java/org/apache/camel/model/LoadRouteFromXmlWithPolicyTest.java?p2=camel/trunk/camel-core/src/test/java/org/apache/camel/model/LoadRouteFromXmlWithPolicyTest.java&p1=camel/trunk/camel-core/src/test/java/org/apache/camel/model/LoadRouteFromXmlWithOnExceptionTest.java&r1=1059270&r2=1059327&rev=1059327&view=diff
==============================================================================
--- camel/trunk/camel-core/src/test/java/org/apache/camel/model/LoadRouteFromXmlWithOnExceptionTest.java (original)
+++ camel/trunk/camel-core/src/test/java/org/apache/camel/model/LoadRouteFromXmlWithPolicyTest.java Sat Jan 15 13:46:38 2011
@@ -22,16 +22,18 @@ import org.apache.camel.ContextTestSuppo
import org.apache.camel.Exchange;
import org.apache.camel.Processor;
import org.apache.camel.impl.JndiRegistry;
+import org.apache.camel.spi.Policy;
+import org.apache.camel.spi.RouteContext;
/**
* @version $Revision$
*/
-public class LoadRouteFromXmlWithOnExceptionTest extends ContextTestSupport {
+public class LoadRouteFromXmlWithPolicyTest extends ContextTestSupport {
@Override
protected JndiRegistry createRegistry() throws Exception {
JndiRegistry jndi = super.createRegistry();
- jndi.bind("myProcessor", new MyProcessor());
+ jndi.bind("foo", new MyPolicy("foo"));
return jndi;
}
@@ -40,32 +42,64 @@ public class LoadRouteFromXmlWithOnExcep
return false;
}
- public void testLoadRouteFromXmlWitOnException() throws Exception {
- InputStream is = getClass().getResourceAsStream("barOnExceptionRoute.xml");
+ public void testLoadRouteFromXmlWitPolicy() throws Exception {
+ InputStream is = getClass().getResourceAsStream("barPolicyRoute.xml");
RoutesDefinition routes = context.loadRoutesDefinition(is);
context.addRouteDefinitions(routes.getRoutes());
context.start();
+ assertNotNull("Loaded foo route should be there", context.getRoute("foo"));
assertNotNull("Loaded bar route should be there", context.getRoute("bar"));
- assertEquals(1, context.getRoutes().size());
+ assertEquals(2, context.getRoutes().size());
// test that loaded route works
- getMockEndpoint("mock:bar").expectedBodiesReceived("Bye World");
- getMockEndpoint("mock:error").expectedBodiesReceived("Kabom");
-
- template.sendBody("direct:bar", "Bye World");
- template.sendBody("direct:bar", "Kabom");
+ getMockEndpoint("mock:foo").expectedMessageCount(1);
+ getMockEndpoint("mock:foo").expectedHeaderReceived("foo", "was wrapped");
+ getMockEndpoint("mock:bar").expectedMessageCount(1);
+ getMockEndpoint("mock:bar").expectedHeaderReceived("foo", "was wrapped");
+ getMockEndpoint("mock:result").expectedMessageCount(1);
+ getMockEndpoint("mock:result").expectedHeaderReceived("foo", "was wrapped");
+
+ getMockEndpoint("mock:response").expectedMessageCount(1);
+ getMockEndpoint("mock:response").expectedHeaderReceived("foo", "policy finished execution");
+ template.sendBody("direct:send", "Hello World");
assertMockEndpointsSatisfied();
+
+ MyPolicy foo = context.getRegistry().lookup("foo", MyPolicy.class);
+
+ assertEquals("Should only be invoked 1 time", 1, foo.getInvoked());
}
- private final class MyProcessor implements Processor {
+ public static class MyPolicy implements Policy {
+
+ private final String name;
+ private int invoked;
+
+ public MyPolicy(String name) {
+ this.name = name;
+ }
- public void process(Exchange exchange) throws Exception {
- String body = exchange.getIn().getBody(String.class);
- if ("Kabom".equals(body)) {
- throw new IllegalArgumentException("Damn");
- }
+ public void beforeWrap(RouteContext routeContext,
+ ProcessorDefinition<?> definition) {
+ // no need to modify the route
+ }
+
+ public Processor wrap(RouteContext routeContext, final Processor processor) {
+ return new Processor() {
+ public void process(Exchange exchange) throws Exception {
+ invoked++;
+ // let the original processor continue routing
+ exchange.getIn().setHeader(name, "was wrapped");
+ processor.process(exchange);
+ exchange.getIn().setHeader(name, "policy finished execution");
+ }
+ };
+ }
+
+ public int getInvoked() {
+ return invoked;
}
}
+
}
Copied: camel/trunk/camel-core/src/test/resources/org/apache/camel/model/barPolicyRoute.xml (from r1059270, camel/trunk/camel-core/src/test/resources/org/apache/camel/model/barOnExceptionRoute.xml)
URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/test/resources/org/apache/camel/model/barPolicyRoute.xml?p2=camel/trunk/camel-core/src/test/resources/org/apache/camel/model/barPolicyRoute.xml&p1=camel/trunk/camel-core/src/test/resources/org/apache/camel/model/barOnExceptionRoute.xml&r1=1059270&r2=1059327&rev=1059327&view=diff
==============================================================================
--- camel/trunk/camel-core/src/test/resources/org/apache/camel/model/barOnExceptionRoute.xml (original)
+++ camel/trunk/camel-core/src/test/resources/org/apache/camel/model/barPolicyRoute.xml Sat Jan 15 13:46:38 2011
@@ -17,19 +17,19 @@
-->
<routes xmlns="http://camel.apache.org/schema/spring">
+ <route id="foo">
+ <from uri="direct:start"/>
+ <policy ref="foo">
+ <to uri="mock:foo"/>
+ <to uri="mock:bar"/>
+ <to uri="mock:result"/>
+ </policy>
+ </route>
+
<route id="bar">
- <from uri="direct:bar"/>
- <onException>
- <exception>java.lang.Exception</exception>
- <handled>
- <constant>true</constant>
- </handled>
- <to uri="log:error"/>
- <to uri="mock:error"/>
- </onException>
- <process ref="myProcessor"/>
- <to uri="log:bar"/>
- <to uri="mock:bar"/>
+ <from uri="direct:send"/>
+ <to uri="direct:start"/>
+ <to uri="mock:response"/>
</route>
</routes>