<?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
    ">

    <!-- START SNIPPET: e1 -->
    <!-- setup our error handler as the deal letter channel -->
    <bean id="errorHandler" class="org.apache.camel.builder.DeadLetterChannelBuilder">
        <property name="deadLetterUri" value="mock:error"/>
    </bean>

    <!-- this is our POJO bean with our business logic defined as a plain spring bean -->
    <bean id="orderService" class="org.apache.camel.spring.processor.onexception.OrderService" />

    <!-- this is the camel context where we define the routes -->
    <!-- define our error handler as a global error handler -->
    <camelContext errorHandlerRef="errorHandler" xmlns="http://camel.apache.org/schema/spring">

      <onException>
        <!-- the exception is full qualified names as plain strings -->
        <!-- there can be more just add a 2nd, 3rd exception element (unbounded) -->
        <exception>org.apache.camel.spring.processor.onexception.OrderFailedException</exception>
        <!-- we can set the redelivery policy here as well -->
        <redeliveryPolicy maximumRedeliveries="1" />
        <!-- mark this as handled -->
        <handled>
          <constant>true</constant>
        </handled>
        <!-- let our order service handle this exception, call the orderFailed method -->
        <bean ref="orderService" method="orderFailed" />
        <!-- and since this is a unit test we use mock for assertions -->
        <to uri="mock:error" />
      </onException>

      <route>
        <!-- the route -->
        <from uri="direct:start" />
        <!-- in the normal route then route to our order service and call handleOrder method -->
        <bean ref="orderService" method="handleOrder" />
        <!-- and since this is a unit test we use mock for assertions -->
        <to uri="mock:result" />
      </route>

    </camelContext>
    <!-- END SNIPPET: e1 -->

</beans>
