<?xml version="1.0" encoding="ISO-8859-1" ?>
<!--
  ~  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.
  -->

<document>
    <properties>
        <title>Apache Synapse - Sample 430</title>
    </properties>
    <body>
        <section name="Sample 430: Callout Mediator for Synchronous Web Service Invocations">
            <div class="xmlConf">&lt;definitions xmlns="http://ws.apache.org/ns/synapse"&gt;

    &lt;sequence name="main"&gt;
        &lt;callout serviceURL="http://localhost:9000/services/SimpleStockQuoteService"
                 action="urn:getQuote"&gt;
            &lt;source xmlns:s11="http://schemas.xmlsoap.org/soap/envelope/"
                    xmlns:s12="http://www.w3.org/2003/05/soap-envelope"
                    xpath="s11:Body/child::*[fn:position()=1] | s12:Body/child::*[fn:position()=1]"/&gt;
            &lt;target xmlns:s11="http://schemas.xmlsoap.org/soap/envelope/"
                    xmlns:s12="http://www.w3.org/2003/05/soap-envelope"
                    xpath="s11:Body/child::*[fn:position()=1] | s12:Body/child::*[fn:position()=1]"/&gt;
        &lt;/callout&gt;
        &lt;property name="RESPONSE" value="true"/&gt;
        &lt;header name="To" action="remove"/&gt;
        &lt;send/&gt;
        &lt;drop/&gt;
    &lt;/sequence&gt;

&lt;/definitions&gt;</div>
            <subsection name="Objective">
                <p>
                    Demonstrate the usage of the callout mediator for making synchronous (blocking)
                    Web service calls during mediation
                </p>
            </subsection>
            <subsection name="Pre-requisites">
                <p>
                    <ul>
                        <li>
                            Deploy the SimpleStockQuoteService in the sample Axis2 server and start Axis2
                        </li>
                        <li>
                            Start Synapse using the configuration numbered 430 (repository/conf/sample/synapse_sample_430.xml)
                            <div class="command">
                                Unix/Linux: sh synapse.sh -sample 430<br/>
                                Windows: synapse.bat -sample 430
                            </div>
                        </li>
                    </ul>
                </p>
            </subsection>
            <subsection name="Executing the Client">
                <p>
                    In this sample, the callout mediator does the direct service invocation to the
                    StockQuoteService using the client request, gets the response and sets it as the
                    first child of the SOAP message body. Then using the send mediator, the message
                    is sent back to the client. As a result there is no need to define any endpoints
                    in this configuration.
                </p>
                <p>
                    Invoke the client as follows.
                </p>
                <div class="command">ant stockquote -Daddurl=http://localhost:9000/services/SimpleStockQuoteService -Dtrpurl=http://localhost:8280/</div>
            </subsection>
        </section>
        <p><a href="../samples.html">Back to Catalog</a></p>        
    </body>
</document>