<!--
  ~  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">

    <!-- introduction of static inline XML properties and the validation mediator -->
    <definitions>

        <!-- define a static property for an XSD schema resource as an inline XML fragment -->
        <set-property name="validate_schema">
            <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
                       xmlns="http://www.apache-synapse.org/test" elementFormDefault="qualified"
                       attributeFormDefault="unqualified"
                       targetNamespace="http://services.samples/xsd">
                <xs:element name="getQuote">
                    <xs:complexType>
                        <xs:sequence>
                            <xs:element name="request">
                                <xs:complexType>
                                    <xs:sequence>
                                        <xs:element name="stocksymbol" type="xs:string"/>
                                    </xs:sequence>
                                </xs:complexType>
                            </xs:element>
                        </xs:sequence>
                    </xs:complexType>
                </xs:element>
            </xs:schema>
        </set-property>

        <endpoint name="stockquote"
                  address="http://localhost:9000/axis2/services/SimpleStockQuoteService"/>

        <sequence name="customrequest">
            <!-- is this a valid custom request ? -->
            <validate>
                <schema key="validate_schema"/>
                <on-fail>
                    <!-- if the request does not validate againt schema throw a fault -->
                    <makefault>
                        <code value="tns:Receiver"
                              xmlns:tns="http://www.w3.org/2003/05/soap-envelope"/>
                        <reason value="Invalid custom quote request"/>
                    </makefault>

                    <!-- send the fault and stop processing -->
                    <send/>
                </on-fail>
            </validate>

            <!-- send message to real endpoint referenced by name "stockquote" and stop -->
            <send>
                <endpoint ref="stockquote"/>
            </send>
        </sequence>

    </definitions>

    <rules>
        <in>
            <!-- is this a custom stock quote message? -->
            <filter xpath="//m0:getQuote" xmlns:m0="http://services.samples/xsd">
                <sequence ref="customrequest"/>
            </filter>
        </in>

        <!-- just let the message flow through -->
        <send/>

    </rules>

</synapse> 