You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by ni...@apache.org on 2009/02/03 11:17:34 UTC

svn commit: r740264 - in /camel/trunk: camel-core/src/main/java/org/apache/camel/model/ camel-core/src/main/java/org/apache/camel/model/loadbalancer/ camel-core/src/main/java/org/apache/camel/processor/loadbalancer/ camel-core/src/main/resources/org/ap...

Author: ningjiang
Date: Tue Feb  3 10:17:33 2009
New Revision: 740264

URL: http://svn.apache.org/viewvc?rev=740264&view=rev
Log:
CAMEL-1142 FailOverLoadBalancer

Added:
    camel/trunk/camel-core/src/main/java/org/apache/camel/model/loadbalancer/FailOverLoadBalanceStrategy.java   (with props)
    camel/trunk/camel-core/src/main/java/org/apache/camel/processor/loadbalancer/FailOverLoadBalancer.java   (with props)
    camel/trunk/camel-core/src/test/java/org/apache/camel/processor/FailOverLoadBalanceTest.java   (with props)
    camel/trunk/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringFailOverLoadBalanceTest.java   (with props)
    camel/trunk/components/camel-spring/src/test/resources/org/apache/camel/spring/processor/failOverLoadBalance.xml   (with props)
Modified:
    camel/trunk/camel-core/src/main/java/org/apache/camel/model/LoadBalanceType.java
    camel/trunk/camel-core/src/main/resources/org/apache/camel/model/loadbalancer/jaxb.index

Modified: camel/trunk/camel-core/src/main/java/org/apache/camel/model/LoadBalanceType.java
URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/main/java/org/apache/camel/model/LoadBalanceType.java?rev=740264&r1=740263&r2=740264&view=diff
==============================================================================
--- camel/trunk/camel-core/src/main/java/org/apache/camel/model/LoadBalanceType.java (original)
+++ camel/trunk/camel-core/src/main/java/org/apache/camel/model/LoadBalanceType.java Tue Feb  3 10:17:33 2009
@@ -30,12 +30,14 @@
 
 import org.apache.camel.Expression;
 import org.apache.camel.Processor;
+import org.apache.camel.model.loadbalancer.FailOverLoadBalanceStrategy;
 import org.apache.camel.model.loadbalancer.LoadBalancerType;
 import org.apache.camel.model.loadbalancer.RandomLoadBalanceStrategy;
 import org.apache.camel.model.loadbalancer.RoundRobinLoadBalanceStrategy;
 import org.apache.camel.model.loadbalancer.StickyLoadBalanceStrategy;
 import org.apache.camel.model.loadbalancer.TopicLoadBalanceStrategy;
 import org.apache.camel.processor.SendProcessor;
+import org.apache.camel.processor.loadbalancer.FailOverLoadBalancer;
 import org.apache.camel.processor.loadbalancer.LoadBalancer;
 import org.apache.camel.processor.loadbalancer.RandomLoadBalancer;
 import org.apache.camel.processor.loadbalancer.RoundRobinLoadBalancer;
@@ -54,6 +56,7 @@
     private String ref;
 
     @XmlElements({
+        @XmlElement(required = false, name = "failOver", type = FailOverLoadBalanceStrategy.class),
         @XmlElement(required = false, name = "roundRobin", type = RoundRobinLoadBalanceStrategy.class),
         @XmlElement(required = false, name = "random", type = RandomLoadBalanceStrategy.class),
         @XmlElement(required = false, name = "sticky", type = StickyLoadBalanceStrategy.class),
@@ -145,6 +148,27 @@
         loadBalancerType = new LoadBalancerType(loadBalancer);
         return this;
     }
+    
+    /**
+     * Uses fail over load balancer
+     * 
+     * @retrun the builder
+     */
+    public LoadBalanceType failOver() {
+        loadBalancerType = new LoadBalancerType(new FailOverLoadBalancer());
+        return this;
+    }
+    
+    /**
+     * Uses fail over load balancer
+     * 
+     * @param the exception Class which we want to catch
+     * @retrun the builder
+     */
+    public LoadBalanceType failOver(Class throwable) {
+        loadBalancerType = new LoadBalancerType(new FailOverLoadBalancer(throwable));
+        return this;
+    }
 
     /**
      * Uses round robin load balancer

Added: camel/trunk/camel-core/src/main/java/org/apache/camel/model/loadbalancer/FailOverLoadBalanceStrategy.java
URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/main/java/org/apache/camel/model/loadbalancer/FailOverLoadBalanceStrategy.java?rev=740264&view=auto
==============================================================================
--- camel/trunk/camel-core/src/main/java/org/apache/camel/model/loadbalancer/FailOverLoadBalanceStrategy.java (added)
+++ camel/trunk/camel-core/src/main/java/org/apache/camel/model/loadbalancer/FailOverLoadBalanceStrategy.java Tue Feb  3 10:17:33 2009
@@ -0,0 +1,58 @@
+/**
+ * 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.model.loadbalancer;
+
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlAttribute;
+import javax.xml.bind.annotation.XmlRootElement;
+import javax.xml.bind.annotation.XmlTransient;
+
+import org.apache.camel.RuntimeCamelException;
+import org.apache.camel.processor.loadbalancer.LoadBalancer;
+import org.apache.camel.spi.RouteContext;
+import org.apache.camel.util.ObjectHelper;
+
+@XmlRootElement(name = "failOver")
+@XmlAccessorType(XmlAccessType.FIELD)
+public class FailOverLoadBalanceStrategy extends LoadBalancerType {    
+    @XmlAttribute
+    private String failedException;
+    
+    @Override
+    protected LoadBalancer createLoadBalancer(RouteContext routeContext) {
+        if (ObjectHelper.isNotEmpty(failedException)) {
+            Class failExceptionClazz = ObjectHelper.loadClass(failedException);
+            if (failExceptionClazz == null) {
+                throw new RuntimeCamelException("Can't find the failException " + failedException + " for the FailOverLoadBalancer");
+            }
+            return new org.apache.camel.processor.loadbalancer.FailOverLoadBalancer(failExceptionClazz);
+        } else {
+            return new org.apache.camel.processor.loadbalancer.FailOverLoadBalancer();
+        }
+    }
+    
+    public void setFailedException(String exceptionName) {
+        failedException = exceptionName;
+    }
+    
+    public String getFailedException() {
+        return failedException;
+    }
+
+
+}

Propchange: camel/trunk/camel-core/src/main/java/org/apache/camel/model/loadbalancer/FailOverLoadBalanceStrategy.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: camel/trunk/camel-core/src/main/java/org/apache/camel/model/loadbalancer/FailOverLoadBalanceStrategy.java
------------------------------------------------------------------------------
    svn:keywords = Rev Date

Added: camel/trunk/camel-core/src/main/java/org/apache/camel/processor/loadbalancer/FailOverLoadBalancer.java
URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/main/java/org/apache/camel/processor/loadbalancer/FailOverLoadBalancer.java?rev=740264&view=auto
==============================================================================
--- camel/trunk/camel-core/src/main/java/org/apache/camel/processor/loadbalancer/FailOverLoadBalancer.java (added)
+++ camel/trunk/camel-core/src/main/java/org/apache/camel/processor/loadbalancer/FailOverLoadBalancer.java Tue Feb  3 10:17:33 2009
@@ -0,0 +1,130 @@
+/**
+ * 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.loadbalancer;
+
+import java.util.List;
+
+import org.apache.camel.AsyncCallback;
+import org.apache.camel.AsyncProcessor;
+import org.apache.camel.Exchange;
+import org.apache.camel.Processor;
+import org.apache.camel.RuntimeCamelException;
+import org.apache.camel.util.ObjectHelper;
+
+/**
+ * This FailOverLoadBalancer will choose other processor when the exception happens
+ */
+public class FailOverLoadBalancer extends LoadBalancerSupport {
+    private final Class failException;
+    public FailOverLoadBalancer(Class throwable) {
+        if (ObjectHelper.isAssignableFrom(Throwable.class, throwable)) {
+            failException = throwable;
+        } else {
+            throw new RuntimeCamelException("The FailOverLoadBalancer construction parameter should be the child of Throwable");
+        }
+    }
+    
+    public FailOverLoadBalancer() {
+        this(Throwable.class);
+    }
+    
+    protected boolean isCheckedException(Exchange exchange) {
+        if (exchange.getException() != null) {
+            if (failException.isAssignableFrom(exchange.getException().getClass())) {        
+                return true;
+            }
+        } 
+        return false;                   
+    }
+    
+    private void processExchange(Processor processor, Exchange exchange) {
+        if (processor == null) {
+            throw new IllegalStateException("No processors could be chosen to process " + exchange);
+        }
+        try {            
+            processor.process(exchange);
+        } catch (Throwable error) {
+            exchange.setException(error);
+        }
+    }
+
+    public void process(Exchange exchange) throws Exception {
+        List<Processor> list = getProcessors();
+        if (list.isEmpty()) {
+            throw new IllegalStateException("No processors available to process " + exchange);
+        }
+        int index = 0;
+        Processor processor = list.get(index);
+        processExchange(processor, exchange);
+        while (isCheckedException(exchange)) {
+            exchange.setException(null);
+            index++;
+            if (index < list.size()) {
+                processor = list.get(index);
+                processExchange(processor, exchange);
+            } else {
+                break;
+            }
+        }
+    }
+
+    public boolean process(Exchange exchange, final AsyncCallback callback) {
+        return processExchange(0, exchange, callback);
+    }
+    
+    public boolean processExchange(final int index, final Exchange exchange, final AsyncCallback callback) {
+        boolean sync = false;
+        List<Processor> list = getProcessors();
+        if (list.isEmpty()) {
+            throw new IllegalStateException("No processors available to process " + exchange);
+        }       
+        Processor processor = list.get(index);
+        if (processor == null) {
+            throw new IllegalStateException("No processors could be chosen to process " + exchange);
+        } else {
+            if (processor instanceof AsyncProcessor) {
+                AsyncProcessor asyncProcessor = (AsyncProcessor)processor;
+                sync = asyncProcessor.process(exchange, new AsyncCallback() {
+                    public void done(boolean doSync) {                        
+                        // check the exchange and call the FailOverProcessor
+                        if (isCheckedException(exchange) && index < getProcessors().size() - 1) {
+                            exchange.setException(null);
+                            processExchange(index + 1, exchange, callback);                            
+                        } else {
+                            callback.done(doSync);
+                        }
+                    }
+                });               
+                
+            } else {
+                try {
+                    processor.process(exchange);
+                } catch (Exception ex) {
+                    exchange.setException(ex);
+                }
+                if (isCheckedException(exchange) && index < getProcessors().size() - 1) {
+                    exchange.setException(null);
+                    processExchange(index + 1, exchange, callback);
+                }
+                sync = true;
+                callback.done(true);                
+            }            
+        }
+        return sync;
+    }
+
+}

Propchange: camel/trunk/camel-core/src/main/java/org/apache/camel/processor/loadbalancer/FailOverLoadBalancer.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: camel/trunk/camel-core/src/main/java/org/apache/camel/processor/loadbalancer/FailOverLoadBalancer.java
------------------------------------------------------------------------------
    svn:keywords = Rev Date

Modified: camel/trunk/camel-core/src/main/resources/org/apache/camel/model/loadbalancer/jaxb.index
URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/main/resources/org/apache/camel/model/loadbalancer/jaxb.index?rev=740264&r1=740263&r2=740264&view=diff
==============================================================================
--- camel/trunk/camel-core/src/main/resources/org/apache/camel/model/loadbalancer/jaxb.index (original)
+++ camel/trunk/camel-core/src/main/resources/org/apache/camel/model/loadbalancer/jaxb.index Tue Feb  3 10:17:33 2009
@@ -15,6 +15,7 @@
 ## limitations under the License.
 ## ------------------------------------------------------------------------
 LoadBalancerType
+FailOverLoadBalanceStrategy
 RandomLoadBalanceStrategy
 RoundRobinLoadBalanceStrategy
 StickyLoadBalanceStrategy

Added: camel/trunk/camel-core/src/test/java/org/apache/camel/processor/FailOverLoadBalanceTest.java
URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/test/java/org/apache/camel/processor/FailOverLoadBalanceTest.java?rev=740264&view=auto
==============================================================================
--- camel/trunk/camel-core/src/test/java/org/apache/camel/processor/FailOverLoadBalanceTest.java (added)
+++ camel/trunk/camel-core/src/test/java/org/apache/camel/processor/FailOverLoadBalanceTest.java Tue Feb  3 10:17:33 2009
@@ -0,0 +1,111 @@
+/**
+ * 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.Processor;
+import org.apache.camel.RuntimeCamelException;
+import org.apache.camel.builder.NoErrorHandlerBuilder;
+import org.apache.camel.builder.RouteBuilder;
+import org.apache.camel.component.mock.MockEndpoint;
+
+import static org.apache.camel.component.mock.MockEndpoint.expectsMessageCount;
+
+public class FailOverLoadBalanceTest extends ContextTestSupport {
+
+    protected MockEndpoint x;
+    protected MockEndpoint y;
+    protected MockEndpoint z;
+
+    @Override
+    protected void setUp() throws Exception {
+        super.setUp();
+
+        x = getMockEndpoint("mock:x");
+        y = getMockEndpoint("mock:y");
+        z = getMockEndpoint("mock:z");
+    }
+    
+    public static class MyException extends Exception {
+        
+    }
+    
+    public static class MyAnotherException extends Exception {
+        
+    }
+    
+    public static class MyExceptionProcessor implements Processor {        
+        public void process(Exchange exchange) throws Exception {
+            throw new MyException();            
+        }        
+    }
+    
+    public static class MyAnotherExceptionProcessor implements Processor {
+        public void process(Exchange exchange) throws Exception {
+            throw new MyAnotherException();            
+        }
+    }
+
+    protected RouteBuilder createRouteBuilder() {
+        return new RouteBuilder() {
+            public void configure() {
+                // First we need to turn off the default error handler
+                errorHandler(new NoErrorHandlerBuilder());
+                
+                from("direct:exception").loadBalance()
+                    // catch all the exception here
+                    .failOver().to("direct:x", "direct:y", "direct:z");
+                
+                from("direct:customerException").loadBalance()
+                    .failOver(MyException.class).to("direct:x", "direct:y", "direct:z");
+                
+                from("direct:x").process(new MyExceptionProcessor()).to("mock:x");
+                
+                from("direct:y").process(new MyAnotherExceptionProcessor()).to("mock:y");
+                
+                from("direct:z").to("mock:z");
+                
+            }
+        };
+    }
+
+    public void testThrowable() throws Exception {
+        String body = "<one/>";
+        expectsMessageCount(0, x, y);
+        z.expectedBodiesReceived(body);
+        sendMessage("direct:exception", "bar", body);
+        assertMockEndpointsSatisfied();
+    }
+    
+    public void testMyException() throws Exception {
+        String body = "<two/>";
+        expectsMessageCount(0, x, y, z);
+        try {
+            sendMessage("direct:customerException", "bar", body);
+            fail("There should get the MyAnotherException");
+        } catch (RuntimeCamelException ex) {
+            // expect the exception here
+            assertTrue("The cause should be MyAnotherException", ex.getCause() instanceof MyAnotherException);
+        }
+        assertMockEndpointsSatisfied();
+    }
+
+    protected void sendMessage(final String endpoint, final Object headerValue, final Object body) throws Exception {
+        template.sendBodyAndHeader(endpoint, body, "foo", headerValue);
+    }
+}

Propchange: camel/trunk/camel-core/src/test/java/org/apache/camel/processor/FailOverLoadBalanceTest.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: camel/trunk/camel-core/src/test/java/org/apache/camel/processor/FailOverLoadBalanceTest.java
------------------------------------------------------------------------------
    svn:keywords = Rev Date

Added: camel/trunk/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringFailOverLoadBalanceTest.java
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringFailOverLoadBalanceTest.java?rev=740264&view=auto
==============================================================================
--- camel/trunk/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringFailOverLoadBalanceTest.java (added)
+++ camel/trunk/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringFailOverLoadBalanceTest.java Tue Feb  3 10:17:33 2009
@@ -0,0 +1,31 @@
+/**
+ * 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.CamelContext;
+import org.apache.camel.processor.FailOverLoadBalanceTest;
+
+import static org.apache.camel.spring.processor.SpringTestHelper.createSpringCamelContext;
+
+public class SpringFailOverLoadBalanceTest extends FailOverLoadBalanceTest {
+    
+    protected CamelContext createCamelContext() throws Exception {
+        return createSpringCamelContext(this, "org/apache/camel/spring/processor/failOverLoadBalance.xml");
+    }
+
+}

Propchange: camel/trunk/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringFailOverLoadBalanceTest.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: camel/trunk/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringFailOverLoadBalanceTest.java
------------------------------------------------------------------------------
    svn:keywords = Rev Date

Added: camel/trunk/components/camel-spring/src/test/resources/org/apache/camel/spring/processor/failOverLoadBalance.xml
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-spring/src/test/resources/org/apache/camel/spring/processor/failOverLoadBalance.xml?rev=740264&view=auto
==============================================================================
--- camel/trunk/components/camel-spring/src/test/resources/org/apache/camel/spring/processor/failOverLoadBalance.xml (added)
+++ camel/trunk/components/camel-spring/src/test/resources/org/apache/camel/spring/processor/failOverLoadBalance.xml Tue Feb  3 10:17:33 2009
@@ -0,0 +1,69 @@
+<?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-2.5.xsd
+       http://activemq.apache.org/camel/schema/spring http://activemq.apache.org/camel/schema/spring/camel-spring.xsd
+    ">
+
+
+  <!-- START SNIPPET: example -->
+
+  <camelContext id="camel" xmlns="http://activemq.apache.org/camel/schema/spring">
+    <route errorHandlerRef="noErrorHandler">
+      <from uri="direct:exception"/>
+      <loadBalance>
+          <failOver/>
+          <to uri="direct:x"/>
+          <to uri="direct:y"/>
+          <to uri="direct:z"/>
+      </loadBalance>      
+    </route>    
+    <route errorHandlerRef="noErrorHandler">
+      <from uri="direct:customerException"/>
+      <loadBalance>
+          <failOver failedException="org.apache.camel.processor.FailOverLoadBalanceTest$MyException"/>
+          <to uri="direct:x"/>
+          <to uri="direct:y"/>
+          <to uri="direct:z"/>
+      </loadBalance>
+    </route>
+    <route errorHandlerRef="noErrorHandler">
+       <from uri="direct:x"/>
+       <process ref="myExceptionProcessor"/>
+       <to uri="mock:x"/>
+    </route>
+    <route errorHandlerRef="noErrorHandler">
+       <from uri="direct:y"/>
+       <process ref="myAnotherExceptionProcessor"/>
+       <to uri="mock:y"/>
+    </route>    
+    <route errorHandlerRef="noErrorHandler">
+       <from uri="direct:z"/>       
+       <to uri="mock:z"/>
+    </route>    
+  </camelContext>
+  
+  <bean id="noErrorHandler" class="org.apache.camel.builder.NoErrorHandlerBuilder"/>
+  <bean id="myExceptionProcessor" class="org.apache.camel.processor.FailOverLoadBalanceTest$MyExceptionProcessor"/>
+  <bean id="myAnotherExceptionProcessor" class="org.apache.camel.processor.FailOverLoadBalanceTest$MyAnotherExceptionProcessor"/>
+  
+  <!-- END SNIPPET: example -->
+
+</beans>

Propchange: camel/trunk/components/camel-spring/src/test/resources/org/apache/camel/spring/processor/failOverLoadBalance.xml
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: camel/trunk/components/camel-spring/src/test/resources/org/apache/camel/spring/processor/failOverLoadBalance.xml
------------------------------------------------------------------------------
    svn:keywords = Rev Date

Propchange: camel/trunk/components/camel-spring/src/test/resources/org/apache/camel/spring/processor/failOverLoadBalance.xml
------------------------------------------------------------------------------
    svn:mime-type = text/xml