<?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">
        <!-- START SNIPPET: e1 -->
        <route>
            <from uri="direct:start"/>
            <!-- here the try starts. its a try .. catch .. finally just as regular java code -->
            <doTry>
                <process ref="processorFail"/>
                <to uri="mock:result"/>
                <!-- here we catch the below 2 kind of exceptions but ONLY if the onWhen predicate matches
                     that means that the exception message should contain the string word 'Damn' -->
                <doCatch>
                    <exception>java.io.IOException</exception>
                    <exception>java.lang.IllegalStateException</exception>
                    <onWhen>
                        <simple>${exception.message} contains 'Damn'</simple>
                    </onWhen>
                    <to uri="mock:catch"/>
                </doCatch>
                <!-- we can have multiple catch blocks for different exception and with their own onWhen -->
                <doCatch>
                    <exception>org.apache.camel.CamelExchangeException</exception>
                    <to uri="mock:catchCamel"/>
                </doCatch>
                <!-- the finally is always processed -->
                <doFinally>
                    <to uri="mock:finally"/>
                </doFinally>
            </doTry>
        </route>
        <!-- END SNIPPET: e1 -->
    </camelContext>

    <bean id="processorFail" class="org.apache.camel.processor.TryProcessorOnWhenTest$ProcessorFail"/>

</beans>
