<!--
  ~  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 the script mediator -->

    <definitions>

        <!-- define a static property for the JavaScript source code file -->
        <set-property name="stockquoteScript" src="file:repository/conf/sample/resources/script/stockquoteTransform.js"/>

        <!-- 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 request expected by the service -->
            <script key="stockquoteScript" function="transformRequest"/>

            <!-- 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 -->
            <script key="stockquoteScript" function="transformResponse"/>

            <!-- now send the custom response back to the client and stop -->
            <send/>
        </out>
    </rules>

</synapse> 