<!--
  ~  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.
  -->

<synapse xmlns="http://ws.apache.org/ns/synapse">

    <!-- error handling within a sequence using the 'onError' sequence  -->
    <definitions>

        <!-- define an endpoint for the stock quote service -->
        <endpoint name="simple"
                  address="http://localhost:9000/axis2/services/SimpleStockQuoteService"/>

        <!-- define a non-existent endpoint to test error handling -->
        <endpoint name="bogus"
                  address="http://localhost:9009/axis2/services/NonExistentStockQuoteService"/>

        <!-- demonstrate the specification of an error handler sequence for a sequence -->
        <sequence name="stockquote" onError="errorHandler">
            <switch source="//m0:getQuote/m0:request/m0:symbol"
                    xmlns:m0="http://services.samples/xsd">
                <case regex="IBM">
                    <send>
                        <endpoint ref="simple"/>
                    </send>
                </case>
                <case regex="MSFT">
                    <send>
                        <endpoint ref="bogus"/>
                    </send>
                </case>
            </switch>
        </sequence>

        <!-- define a sequence to be used for error handling -->
        <sequence name="errorHandler">

            <!-- Log the error -->
            <log level="custom">
                <property name="text" value="An unexpected error occured"/>
                <property name="message" expression="get-property('ERROR_MESSAGE')"/>
                <property name="detail" expression="get-property('ERROR_DETAIL')"/>
            </log>

            <!-- create a custom fault message -->
            <makefault>
                <code value="tns:Receiver" xmlns:tns="http://www.w3.org/2003/05/soap-envelope"/>
                <reason expression="get-property('ERROR_MESSAGE')"/>
            </makefault>

            <send/>
        </sequence>

    </definitions>

    <rules>
        <sequence ref="stockquote"/>
        <send/>
    </rules>

</synapse> 