Strike 2. Hadrian On Jan 29, 2011, at 7:54 AM, davscl...@apache.org wrote:
> Author: davsclaus > Date: Sat Jan 29 12:54:32 2011 > New Revision: 1065012 > > URL: http://svn.apache.org/viewvc?rev=1065012&view=rev > Log: > CAMEL-3254: Added test for using multiple route policies. Reworked a bit to > only use one RoutePolicyProcessor. > > Added: > > camel/trunk/camel-core/src/test/java/org/apache/camel/processor/RoutePoliciesRefTest.java > > camel/trunk/camel-core/src/test/java/org/apache/camel/processor/RoutePoliciesTest.java > > camel/trunk/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringRoutePoliciesTest.java > > camel/trunk/components/camel-spring/src/test/resources/org/apache/camel/spring/processor/SpringRoutePoliciesTest.xml > - copied, changed from r1064979, > camel/trunk/components/camel-spring/src/test/resources/org/apache/camel/spring/processor/choice.xml > Modified: > > camel/trunk/camel-core/src/main/java/org/apache/camel/impl/DefaultRouteContext.java > > camel/trunk/camel-core/src/main/java/org/apache/camel/model/RouteDefinition.java > > camel/trunk/camel-core/src/main/java/org/apache/camel/processor/RoutePolicyProcessor.java > camel/trunk/components/camel-quartz/pom.xml > > Modified: > camel/trunk/camel-core/src/main/java/org/apache/camel/impl/DefaultRouteContext.java > URL: > http://svn.apache.org/viewvc/camel/trunk/camel-core/src/main/java/org/apache/camel/impl/DefaultRouteContext.java?rev=1065012&r1=1065011&r2=1065012&view=diff > ============================================================================== > --- > camel/trunk/camel-core/src/main/java/org/apache/camel/impl/DefaultRouteContext.java > (original) > +++ > camel/trunk/camel-core/src/main/java/org/apache/camel/impl/DefaultRouteContext.java > Sat Jan 29 12:54:32 2011 > @@ -146,35 +146,28 @@ public class DefaultRouteContext impleme > public void commit() { > // now lets turn all of the event driven consumer processors into a > single route > if (!eventDrivenProcessors.isEmpty()) { > - Processor processor = Pipeline.newInstance(getCamelContext(), > eventDrivenProcessors); > + Processor target = Pipeline.newInstance(getCamelContext(), > eventDrivenProcessors); > > // and wrap it in a unit of work so the UoW is on the top, so the > entire route will be in the same UoW > - UnitOfWorkProcessor unitOfWorkProcessor = new > UnitOfWorkProcessor(this, processor); > - Processor target = unitOfWorkProcessor; > + UnitOfWorkProcessor unitOfWorkProcessor = new > UnitOfWorkProcessor(this, target); > > // and then optionally add route policy processor if a custom > policy is set > RoutePolicyProcessor routePolicyProcessor = null; > - List<RoutePolicy> policyList = getRoutePolicyList(); > - if (!policyList.isEmpty()) { > - boolean firstPolicy = true; > - for (RoutePolicy policy : policyList) { > - if (firstPolicy) { > - routePolicyProcessor = new > RoutePolicyProcessor(unitOfWorkProcessor, policy); > - firstPolicy = false; > - } else { > - routePolicyProcessor = new > RoutePolicyProcessor(routePolicyProcessor, policy); > - } > - > - // add it as service if we have not already done that > (eg possible if two routes have the same service) > - if (!camelContext.hasService(policy)) { > - try { > - camelContext.addService(policy); > - } catch (Exception e) { > - throw ObjectHelper.wrapRuntimeCamelException(e); > - } > + List<RoutePolicy> routePolicyList = getRoutePolicyList(); > + if (routePolicyList != null && !routePolicyList.isEmpty()) { > + routePolicyProcessor = new > RoutePolicyProcessor(unitOfWorkProcessor, routePolicyList); > + > + // add it as service if we have not already done that (eg > possible if two routes have the same service) > + if (!camelContext.hasService(routePolicyProcessor)) { > + try { > + camelContext.addService(routePolicyProcessor); > + } catch (Exception e) { > + throw ObjectHelper.wrapRuntimeCamelException(e); > } > } > target = routePolicyProcessor; > + } else { > + target = unitOfWorkProcessor; > } > > // and wrap it by a instrumentation processor that is to be used > for performance stats > @@ -199,8 +192,8 @@ public class DefaultRouteContext impleme > } > > // invoke init on route policy > - if (!policyList.isEmpty()) { > - for (RoutePolicy policy : policyList) { > + if (routePolicyList != null && !routePolicyList.isEmpty()) { > + for (RoutePolicy policy : routePolicyList) { > policy.onInit(edcr); > } > } > > Modified: > camel/trunk/camel-core/src/main/java/org/apache/camel/model/RouteDefinition.java > URL: > http://svn.apache.org/viewvc/camel/trunk/camel-core/src/main/java/org/apache/camel/model/RouteDefinition.java?rev=1065012&r1=1065011&r2=1065012&view=diff > ============================================================================== > --- > camel/trunk/camel-core/src/main/java/org/apache/camel/model/RouteDefinition.java > (original) > +++ > camel/trunk/camel-core/src/main/java/org/apache/camel/model/RouteDefinition.java > Sat Jan 29 12:54:32 2011 > @@ -56,7 +56,7 @@ import org.apache.camel.util.ObjectHelpe > * @version $Revision$ > */ > @XmlRootElement(name = "route") > -@XmlType(propOrder = {"inputs", "outputs" }) > +@XmlType(propOrder = {"inputs", "outputs"}) > @XmlAccessorType(XmlAccessType.PROPERTY) > public class RouteDefinition extends ProcessorDefinition<RouteDefinition> { > private final AtomicBoolean prepared = new AtomicBoolean(false); > @@ -69,7 +69,7 @@ public class RouteDefinition extends Pro > private String delayer; > private String autoStartup; > private Integer startupOrder; > - private RoutePolicy routePolicy; > + private List<RoutePolicy> routePolicies; > private String routePolicyRef; > private ShutdownRoute shutdownRoute; > private ShutdownRunningTask shutdownRunningTask; > @@ -146,7 +146,7 @@ public class RouteDefinition extends Pro > return status.isStoppable(); > } > } > - > + > public List<RouteContext> addRoutes(CamelContext camelContext, > Collection<Route> routes) throws Exception { > List<RouteContext> answer = new ArrayList<RouteContext>(); > > @@ -186,8 +186,8 @@ public class RouteDefinition extends Pro > * <p/> > * Will stop and remove the old route from camel context and add and > start this new advised route. > * > - * @param camelContext the camel context > - * @param builder the route builder > + * @param camelContext the camel context > + * @param builder the route builder > * @return a new route which is this route merged with the route builder > * @throws Exception can be thrown from the route builder > */ > @@ -224,7 +224,7 @@ public class RouteDefinition extends Pro > /** > * Creates an input to the route > * > - * @param uri the from uri > + * @param uri the from uri > * @return the builder > */ > public RouteDefinition from(String uri) { > @@ -235,7 +235,7 @@ public class RouteDefinition extends Pro > /** > * Creates an input to the route > * > - * @param endpoint the from endpoint > + * @param endpoint the from endpoint > * @return the builder > */ > public RouteDefinition from(Endpoint endpoint) { > @@ -246,7 +246,7 @@ public class RouteDefinition extends Pro > /** > * Creates inputs to the route > * > - * @param uris the from uris > + * @param uris the from uris > * @return the builder > */ > public RouteDefinition from(String... uris) { > @@ -259,7 +259,7 @@ public class RouteDefinition extends Pro > /** > * Creates inputs to the route > * > - * @param endpoints the from endpoints > + * @param endpoints the from endpoints > * @return the builder > */ > public RouteDefinition from(Endpoint... endpoints) { > @@ -272,7 +272,7 @@ public class RouteDefinition extends Pro > /** > * Set the group name for this route > * > - * @param name the group name > + * @param name the group name > * @return the builder > */ > public RouteDefinition group(String name) { > @@ -283,7 +283,7 @@ public class RouteDefinition extends Pro > /** > * Set the route id for this route > * > - * @param id the route id > + * @param id the route id > * @return the builder > */ > public RouteDefinition routeId(String id) { > @@ -293,7 +293,7 @@ public class RouteDefinition extends Pro > > /** > * Disable stream caching for this route. > - * > + * > * @return the builder > */ > public RouteDefinition noStreamCaching() { > @@ -304,7 +304,7 @@ public class RouteDefinition extends Pro > > /** > * Enable stream caching for this route. > - * > + * > * @return the builder > */ > public RouteDefinition streamCaching() { > @@ -320,7 +320,7 @@ public class RouteDefinition extends Pro > > /** > * Disable tracing for this route. > - * > + * > * @return the builder > */ > public RouteDefinition noTracing() { > @@ -330,7 +330,7 @@ public class RouteDefinition extends Pro > > /** > * Enable tracing for this route. > - * > + * > * @return the builder > */ > public RouteDefinition tracing() { > @@ -340,7 +340,7 @@ public class RouteDefinition extends Pro > > /** > * Disable handle fault for this route. > - * > + * > * @return the builder > */ > public RouteDefinition noHandleFault() { > @@ -350,7 +350,7 @@ public class RouteDefinition extends Pro > > /** > * Enable handle fault for this route. > - * > + * > * @return the builder > */ > public RouteDefinition handleFault() { > @@ -360,7 +360,7 @@ public class RouteDefinition extends Pro > > /** > * Disable delayer for this route. > - * > + * > * @return the builder > */ > public RouteDefinition noDelayer() { > @@ -392,7 +392,7 @@ public class RouteDefinition extends Pro > > /** > * Disables this route from being auto started when Camel starts. > - * > + * > * @return the builder > */ > public RouteDefinition noAutoStartup() { > @@ -415,13 +415,18 @@ public class RouteDefinition extends Pro > } > > /** > - * Configures a route policy for this route > + * Configures route policies for this route > * > - * @param routePolicy the route policy > + * @param policies the route policies > * @return the builder > - */ > - public RouteDefinition routePolicy(RoutePolicy routePolicy) { > - setRoutePolicy(routePolicy); > + */ > + public RouteDefinition routePolicy(RoutePolicy... policies) { > + if (routePolicies == null) { > + routePolicies = new ArrayList<RoutePolicy>(); > + } > + for (RoutePolicy policy : policies) { > + routePolicies.add(policy); > + } > return this; > } > > @@ -429,6 +434,7 @@ public class RouteDefinition extends Pro > * Configures a route policy for this route > * > * @param routePolicyRef reference to a {@link RoutePolicy} to lookup and > use. > + * You can specify multiple references by > separating using comma. > * @return the builder > */ > public RouteDefinition routePolicyRef(String routePolicyRef) { > @@ -488,7 +494,7 @@ public class RouteDefinition extends Pro > /** > * The group that this route belongs to; could be the name of the > RouteBuilder class > * or be explicitly configured in the XML. > - * > + * <p/> > * May be null. > */ > public String getGroup() { > @@ -596,13 +602,13 @@ public class RouteDefinition extends Pro > return routePolicyRef; > } > > - @XmlTransient > - public void setRoutePolicy(RoutePolicy routePolicy) { > - this.routePolicy = routePolicy; > + public List<RoutePolicy> getRoutePolicies() { > + return routePolicies; > } > > - public RoutePolicy getRoutePolicy() { > - return routePolicy; > + @XmlTransient > + public void setRoutePolicies(List<RoutePolicy> routePolicies) { > + this.routePolicies = routePolicies; > } > > public ShutdownRoute getShutdownRoute() { > @@ -636,7 +642,7 @@ public class RouteDefinition extends Pro > routeContext.setTracing(isTrace); > if (isTrace) { > if (log.isDebugEnabled()) { > - log.debug("Tracing is enabled on route: " + this); > + log.debug("Tracing is enabled on route: " + getId()); > } > // tracing is added in the DefaultChannel so we can > enable it on the fly > } > @@ -650,7 +656,7 @@ public class RouteDefinition extends Pro > routeContext.setStreamCaching(isStreamCache); > if (isStreamCache) { > if (log.isDebugEnabled()) { > - log.debug("StreamCaching is enabled on route: " + > this); > + log.debug("StreamCaching is enabled on route: " + > getId()); > } > // only add a new stream cache if not already a global > configured on camel context > if (StreamCaching.getStreamCaching(camelContext) == null) > { > @@ -667,7 +673,7 @@ public class RouteDefinition extends Pro > routeContext.setHandleFault(isHandleFault); > if (isHandleFault) { > if (log.isDebugEnabled()) { > - log.debug("HandleFault is enabled on route: " + > this); > + log.debug("HandleFault is enabled on route: " + > getId()); > } > // only add a new handle fault if not already a global > configured on camel context > if (HandleFault.getHandleFault(camelContext) == null) { > @@ -684,29 +690,33 @@ public class RouteDefinition extends Pro > routeContext.setDelayer(delayer); > if (delayer > 0) { > if (log.isDebugEnabled()) { > - log.debug("Delayer is enabled with: " + delayer + " > ms. on route: " + this); > + log.debug("Delayer is enabled with: " + delayer + " > ms. on route: " + getId()); > } > addInterceptStrategy(new Delayer(delayer)); > } else { > if (log.isDebugEnabled()) { > - log.debug("Delayer is disabled on route: " + this); > + log.debug("Delayer is disabled on route: " + > getId()); > } > } > } > } > > // configure route policy > - if (routePolicy != null) { > - if (log.isDebugEnabled()) { > - log.debug("RoutePolicy is enabled: " + routePolicy + " on > route: " + this); > + if (routePolicies != null && !routePolicies.isEmpty()) { > + for (RoutePolicy policy : routePolicies) { > + if (log.isDebugEnabled()) { > + log.debug("RoutePolicy is enabled: " + policy + " on > route: " + getId()); > + } > + routeContext.getRoutePolicyList().add(policy); > } > - routeContext.getRoutePolicyList().add(getRoutePolicy()); > - } else if (routePolicyRef != null) { > + } > + if (routePolicyRef != null) { > StringTokenizer policyTokens = new > StringTokenizer(routePolicyRef, ","); > while (policyTokens.hasMoreTokens()) { > - RoutePolicy policy = > CamelContextHelper.mandatoryLookup(camelContext, > policyTokens.nextToken().trim(), RoutePolicy.class); > + String ref = policyTokens.nextToken().trim(); > + RoutePolicy policy = > CamelContextHelper.mandatoryLookup(camelContext, ref, RoutePolicy.class); > if (log.isDebugEnabled()) { > - log.debug("RoutePolicy is enabled: " + policy + " on > route: " + this); > + log.debug("RoutePolicy is enabled: " + policy + " on > route: " + getId()); > } > routeContext.getRoutePolicyList().add(policy); > } > @@ -716,7 +726,7 @@ public class RouteDefinition extends Pro > Boolean isAutoStartup = CamelContextHelper.parseBoolean(camelContext, > getAutoStartup()); > if (isAutoStartup != null) { > if (log.isDebugEnabled()) { > - log.debug("Using AutoStartup " + isAutoStartup + " on route: > " + this); > + log.debug("Using AutoStartup " + isAutoStartup + " on route: > " + getId()); > } > routeContext.setAutoStartup(isAutoStartup); > } > @@ -724,13 +734,13 @@ public class RouteDefinition extends Pro > // configure shutdown > if (shutdownRoute != null) { > if (log.isDebugEnabled()) { > - log.debug("Using ShutdownRoute " + getShutdownRoute() + " on > route: " + this); > + log.debug("Using ShutdownRoute " + getShutdownRoute() + " on > route: " + getId()); > } > routeContext.setShutdownRoute(getShutdownRoute()); > } > if (shutdownRunningTask != null) { > if (log.isDebugEnabled()) { > - log.debug("Using ShutdownRunningTask " + > getShutdownRunningTask() + " on route: " + this); > + log.debug("Using ShutdownRunningTask " + > getShutdownRunningTask() + " on route: " + getId()); > } > routeContext.setShutdownRunningTask(getShutdownRunningTask()); > } > > Modified: > camel/trunk/camel-core/src/main/java/org/apache/camel/processor/RoutePolicyProcessor.java > URL: > http://svn.apache.org/viewvc/camel/trunk/camel-core/src/main/java/org/apache/camel/processor/RoutePolicyProcessor.java?rev=1065012&r1=1065011&r2=1065012&view=diff > ============================================================================== > --- > camel/trunk/camel-core/src/main/java/org/apache/camel/processor/RoutePolicyProcessor.java > (original) > +++ > camel/trunk/camel-core/src/main/java/org/apache/camel/processor/RoutePolicyProcessor.java > Sat Jan 29 12:54:32 2011 > @@ -16,6 +16,8 @@ > */ > package org.apache.camel.processor; > > +import java.util.List; > + > import org.apache.camel.AsyncCallback; > import org.apache.camel.CamelContext; > import org.apache.camel.Exchange; > @@ -24,61 +26,101 @@ import org.apache.camel.Route; > import org.apache.camel.impl.ServiceSupport; > import org.apache.camel.impl.SynchronizationAdapter; > import org.apache.camel.spi.RoutePolicy; > +import org.apache.commons.logging.Log; > +import org.apache.commons.logging.LogFactory; > > /** > + * {@link Processor} which instruments the {@link RoutePolicy}. > + * > * @version $Revision$ > */ > public class RoutePolicyProcessor extends DelegateAsyncProcessor { > > - private final RoutePolicy routePolicy; > + private final Log LOG = LogFactory.getLog(RoutePolicyProcessor.class); > + private final List<RoutePolicy> routePolicies; > private Route route; > > - public RoutePolicyProcessor(Processor processor, RoutePolicy > routePolicy) { > + public RoutePolicyProcessor(Processor processor, List<RoutePolicy> > routePolicies) { > super(processor); > - this.routePolicy = routePolicy; > + this.routePolicies = routePolicies; > } > > @Override > public String toString() { > - return "RoutePolicy[" + routePolicy + "]"; > + return "RoutePolicy[" + routePolicies + "]"; > } > > @Override > public boolean process(Exchange exchange, AsyncCallback callback) { > - // check whether the policy is enabled > - if (isRoutePolicyRunAllowed()) { > > - // invoke begin > - routePolicy.onExchangeBegin(route, exchange); > + // invoke begin > + for (RoutePolicy policy : routePolicies) { > + try { > + if (isRoutePolicyRunAllowed(policy)) { > + policy.onExchangeBegin(route, exchange); > + } > + } catch (Exception e) { > + LOG.warn("Error occurred during onExchangeBegin on > RoutePolicy: " + policy > + + ". This exception will be ignored", e); > + } > + } > > - // add on completion that invokes the policy callback on complete > - // as the Exchange can be routed async and thus we need the > callback to > - // invoke when the route is completed > - exchange.addOnCompletion(new SynchronizationAdapter() { > - @Override > - public void onDone(Exchange exchange) { > - // do not invoke it if Camel is stopping as we don't want > - // the policy to start a consumer during Camel is > stopping > - if (isCamelStopping(exchange.getContext())) { > - return; > - } > - routePolicy.onExchangeDone(route, exchange); > + // add on completion that invokes the policy callback on complete > + // as the Exchange can be routed async and thus we need the callback > to > + // invoke when the route is completed > + exchange.addOnCompletion(new SynchronizationAdapter() { > + @Override > + public void onDone(Exchange exchange) { > + // do not invoke it if Camel is stopping as we don't want > + // the policy to start a consumer during Camel is stopping > + if (isCamelStopping(exchange.getContext())) { > + return; > } > > - @Override > - public String toString() { > - return "RoutePolicy"; > + for (RoutePolicy policy : routePolicies) { > + try { > + if (isRoutePolicyRunAllowed(policy)) { > + policy.onExchangeDone(route, exchange); > + } > + } catch (Exception e) { > + LOG.warn("Error occurred during onExchangeDone on > RoutePolicy: " + policy > + + ". This exception will be ignored", e); > + } > } > - }); > - } > + } > + > + @Override > + public String toString() { > + return "RoutePolicyOnCompletion"; > + } > + }); > > return super.process(exchange, callback); > } > > + /** > + * Sets the route this policy applies. > + * > + * @param route the route > + */ > public void setRoute(Route route) { > this.route = route; > } > > + /** > + * Strategy to determine if this policy is allowed to run > + * > + * @param policy the policy > + * @return <tt>true</tt> to run > + */ > + protected boolean isRoutePolicyRunAllowed(RoutePolicy policy) { > + if (policy instanceof ServiceSupport) { > + ServiceSupport ss = (ServiceSupport) policy; > + return ss.isRunAllowed(); > + } > + return true; > + } > + > private static boolean isCamelStopping(CamelContext context) { > if (context instanceof ServiceSupport) { > ServiceSupport ss = (ServiceSupport) context; > @@ -87,12 +129,4 @@ public class RoutePolicyProcessor extend > return false; > } > > - private boolean isRoutePolicyRunAllowed() { > - if (routePolicy instanceof ServiceSupport) { > - ServiceSupport ss = (ServiceSupport) routePolicy; > - return ss.isRunAllowed(); > - } > - return true; > - } > - > } > > Added: > camel/trunk/camel-core/src/test/java/org/apache/camel/processor/RoutePoliciesRefTest.java > URL: > http://svn.apache.org/viewvc/camel/trunk/camel-core/src/test/java/org/apache/camel/processor/RoutePoliciesRefTest.java?rev=1065012&view=auto > ============================================================================== > --- > camel/trunk/camel-core/src/test/java/org/apache/camel/processor/RoutePoliciesRefTest.java > (added) > +++ > camel/trunk/camel-core/src/test/java/org/apache/camel/processor/RoutePoliciesRefTest.java > Sat Jan 29 12:54:32 2011 > @@ -0,0 +1,81 @@ > +/** > + * 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.processor; > + > +import org.apache.camel.ContextTestSupport; > +import org.apache.camel.Exchange; > +import org.apache.camel.Route; > +import org.apache.camel.builder.RouteBuilder; > +import org.apache.camel.component.mock.MockEndpoint; > +import org.apache.camel.impl.JndiRegistry; > +import org.apache.camel.impl.RoutePolicySupport; > + > +/** > + * @version $Revision: 1043882 $ > + */ > +public class RoutePoliciesRefTest extends ContextTestSupport { > + > + private final MyCustomRoutePolicy policyA = new MyCustomRoutePolicy("A"); > + private final MyCustomRoutePolicy policyB = new MyCustomRoutePolicy("B"); > + > + @Override > + protected JndiRegistry createRegistry() throws Exception { > + JndiRegistry jndi = super.createRegistry(); > + jndi.bind("policy-a", policyA); > + jndi.bind("policy-b", policyB); > + return jndi; > + } > + > + private class MyCustomRoutePolicy extends RoutePolicySupport { > + > + private final String name; > + > + private MyCustomRoutePolicy(String name) { > + this.name = name; > + } > + > + @Override > + public void onExchangeBegin(Route route, Exchange exchange) { > + exchange.getIn().setHeader(name, name); > + } > + > + } > + > + public void testCustomPolicies() throws Exception { > + MockEndpoint mock = getMockEndpoint("mock:result"); > + mock.expectedBodiesReceived("Hello World"); > + mock.expectedHeaderReceived("A", "A"); > + mock.expectedHeaderReceived("B", "B"); > + > + template.sendBody("direct:start", "Hello World"); > + > + assertMockEndpointsSatisfied(); > + } > + > + @Override > + protected RouteBuilder createRouteBuilder() throws Exception { > + return new RouteBuilder() { > + @Override > + public void configure() throws Exception { > + from("direct:start") > + .routePolicyRef("policy-a, policy-b") > + .to("mock:result"); > + } > + }; > + } > +} > + > > Added: > camel/trunk/camel-core/src/test/java/org/apache/camel/processor/RoutePoliciesTest.java > URL: > http://svn.apache.org/viewvc/camel/trunk/camel-core/src/test/java/org/apache/camel/processor/RoutePoliciesTest.java?rev=1065012&view=auto > ============================================================================== > --- > camel/trunk/camel-core/src/test/java/org/apache/camel/processor/RoutePoliciesTest.java > (added) > +++ > camel/trunk/camel-core/src/test/java/org/apache/camel/processor/RoutePoliciesTest.java > Sat Jan 29 12:54:32 2011 > @@ -0,0 +1,72 @@ > +/** > + * 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.processor; > + > +import org.apache.camel.ContextTestSupport; > +import org.apache.camel.Exchange; > +import org.apache.camel.Route; > +import org.apache.camel.builder.RouteBuilder; > +import org.apache.camel.component.mock.MockEndpoint; > +import org.apache.camel.impl.RoutePolicySupport; > + > +/** > + * @version $Revision: 1043882 $ > + */ > +public class RoutePoliciesTest extends ContextTestSupport { > + > + private final MyCustomRoutePolicy policyA = new MyCustomRoutePolicy("A"); > + private final MyCustomRoutePolicy policyB = new MyCustomRoutePolicy("B"); > + > + private class MyCustomRoutePolicy extends RoutePolicySupport { > + > + private final String name; > + > + private MyCustomRoutePolicy(String name) { > + this.name = name; > + } > + > + @Override > + public void onExchangeBegin(Route route, Exchange exchange) { > + exchange.getIn().setHeader(name, name); > + } > + > + } > + > + public void testCustomPolicies() throws Exception { > + MockEndpoint mock = getMockEndpoint("mock:result"); > + mock.expectedBodiesReceived("Hello World"); > + mock.expectedHeaderReceived("A", "A"); > + mock.expectedHeaderReceived("B", "B"); > + > + template.sendBody("direct:start", "Hello World"); > + > + assertMockEndpointsSatisfied(); > + } > + > + @Override > + protected RouteBuilder createRouteBuilder() throws Exception { > + return new RouteBuilder() { > + @Override > + public void configure() throws Exception { > + from("direct:start") > + .routePolicy(policyA, policyB) > + .to("mock:result"); > + } > + }; > + } > +} > + > > Modified: camel/trunk/components/camel-quartz/pom.xml > URL: > http://svn.apache.org/viewvc/camel/trunk/components/camel-quartz/pom.xml?rev=1065012&r1=1065011&r2=1065012&view=diff > ============================================================================== > --- camel/trunk/components/camel-quartz/pom.xml (original) > +++ camel/trunk/components/camel-quartz/pom.xml Sat Jan 29 12:54:32 2011 > @@ -73,11 +73,6 @@ > </dependency> > <dependency> > <groupId>org.apache.camel</groupId> > - <artifactId>camel-core-xml</artifactId> > - <scope>test</scope> > - </dependency> > - <dependency> > - <groupId>org.apache.camel</groupId> > <artifactId>camel-test</artifactId> > <scope>test</scope> > </dependency> > > Added: > camel/trunk/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringRoutePoliciesTest.java > URL: > http://svn.apache.org/viewvc/camel/trunk/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringRoutePoliciesTest.java?rev=1065012&view=auto > ============================================================================== > --- > camel/trunk/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringRoutePoliciesTest.java > (added) > +++ > camel/trunk/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringRoutePoliciesTest.java > Sat Jan 29 12:54:32 2011 > @@ -0,0 +1,64 @@ > +/** > + * 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.processor; > + > +import org.apache.camel.Exchange; > +import org.apache.camel.Route; > +import org.apache.camel.component.mock.MockEndpoint; > +import org.apache.camel.impl.RoutePolicySupport; > +import org.apache.camel.spring.SpringTestSupport; > +import org.springframework.context.support.AbstractXmlApplicationContext; > +import org.springframework.context.support.ClassPathXmlApplicationContext; > + > +/** > + * @version $Revision$ > + */ > +public class SpringRoutePoliciesTest extends SpringTestSupport { > + > + @Override > + protected AbstractXmlApplicationContext createApplicationContext() { > + return new > ClassPathXmlApplicationContext("org/apache/camel/spring/processor/SpringRoutePoliciesTest.xml"); > + } > + > + public void testCustomPolicies() throws Exception { > + MockEndpoint mock = getMockEndpoint("mock:result"); > + mock.expectedBodiesReceived("Hello World"); > + mock.expectedHeaderReceived("A", "A"); > + mock.expectedHeaderReceived("B", "B"); > + > + template.sendBody("direct:start", "Hello World"); > + > + assertMockEndpointsSatisfied(); > + } > + > + public static class MyCustomRoutePolicy extends RoutePolicySupport { > + > + private final String name; > + > + private MyCustomRoutePolicy(String name) { > + this.name = name; > + } > + > + @Override > + public void onExchangeBegin(Route route, Exchange exchange) { > + exchange.getIn().setHeader(name, name); > + } > + > + } > + > + > +} > > Copied: > camel/trunk/components/camel-spring/src/test/resources/org/apache/camel/spring/processor/SpringRoutePoliciesTest.xml > (from r1064979, > camel/trunk/components/camel-spring/src/test/resources/org/apache/camel/spring/processor/choice.xml) > URL: > http://svn.apache.org/viewvc/camel/trunk/components/camel-spring/src/test/resources/org/apache/camel/spring/processor/SpringRoutePoliciesTest.xml?p2=camel/trunk/components/camel-spring/src/test/resources/org/apache/camel/spring/processor/SpringRoutePoliciesTest.xml&p1=camel/trunk/components/camel-spring/src/test/resources/org/apache/camel/spring/processor/choice.xml&r1=1064979&r2=1065012&rev=1065012&view=diff > ============================================================================== > --- > camel/trunk/components/camel-spring/src/test/resources/org/apache/camel/spring/processor/choice.xml > (original) > +++ > camel/trunk/components/camel-spring/src/test/resources/org/apache/camel/spring/processor/SpringRoutePoliciesTest.xml > Sat Jan 29 12:54:32 2011 > @@ -22,26 +22,19 @@ > http://camel.apache.org/schema/spring > http://camel.apache.org/schema/spring/camel-spring.xsd > "> > > - <!-- START SNIPPET: example --> > - <camelContext xmlns="http://camel.apache.org/schema/spring"> > - <route> > - <from uri="direct:start"/> > - <choice> > - <when> > - <xpath>$foo = 'bar'</xpath> > - <to uri="mock:x"/> > - </when> > - <when> > - <xpath>$foo = 'cheese'</xpath> > - <to uri="mock:y"/> > - </when> > - <otherwise> > - <to uri="mock:z"/> > - </otherwise> > - </choice> > - <to uri="mock:end"/> > - </route> > - </camelContext> > - <!-- END SNIPPET: example --> > + <bean id="policy-a" > class="org.apache.camel.spring.processor.SpringRoutePoliciesTest$MyCustomRoutePolicy"> > + <constructor-arg index="0" value="A"/> > + </bean> > + > + <bean id="policy-b" > class="org.apache.camel.spring.processor.SpringRoutePoliciesTest$MyCustomRoutePolicy"> > + <constructor-arg index="0" value="B"/> > + </bean> > + > + <camelContext xmlns="http://camel.apache.org/schema/spring"> > + <route routePolicyRef="policy-a, policy-b"> > + <from uri="direct:start"/> > + <to uri="mock:result"/> > + </route> > + </camelContext> > > </beans> > >