<!--
  ~  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">

    <!-- illustration of various mediators : try-catch-finally and makefault mediators -->
    <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"/>

        <!-- 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>

        <try>
            <sequence>
                <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>
            <onError>
                <sequence ref="errorHandler"/>
            </onError>
            <finally>
                <log level="custom">
                    <property name="message" value="Processed request"/>
                </log>
            </finally>
        </try>

        <send/>

    </rules>

</synapse> 