<!--
  ~  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 to URL source properties, registry based properties and the XSLT mediator -->

    <!-- the SimpleURLRegistry allows access to a URL based resource store such as the -->
    <!-- file system (file://) or a web server (http://) -->
    <registry provider="org.apache.synapse.registry.url.SimpleURLRegistry">
        <!-- the root property of the simple URL registry helps resolve a resource URL as root + key -->
        <property name="root" value="file:repository/conf/sample/resources/"/>
        <!-- all resources loaded from the URL registry would be cached for this number of milli seconds -->
        <property name="cachableDuration" value="15000"/>
    </registry>

    <definitions>

        <!-- define a static property for the first XSLT resource as an URL source (could be any URL src) -->
        <set-property name="xslt-key-req"
                      src="file:repository/conf/sample/resources/transform/transform.xslt"/>

        <!-- define a dynamic property for the second XSLT resource as a key reference to the registry -->
        <!-- the key is just a unique identifier for a resource on the registry. It is treated as a string literal -->
        <set-property name="xslt-key-resp" key="transform/transform_back.xslt"/>

        <!-- define a reuseable endpoint definition and use it within config -->
        <endpoint name="stockquote"
                  address="http://localhost:9000/axis2/services/SimpleStockQuoteService"/>

    </definitions>

    <rules>
        <in>
            <!-- transform the custom quote request into a standard quote requst expected by the service -->
            <xslt key="xslt-key-req"/>

            <!-- send message to real endpoint referenced by name "stockquote" and stop -->
            <send>
                <endpoint ref="stockquote"/>
            </send>
        </in>

        <out>
            <!-- transform the standard response back into the custom format the client expects -->
            <xslt key="xslt-key-resp"/>

            <!-- now send the custom response back to the client and stop -->
            <send/>
        </out>
    </rules>

</synapse> 