<?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 12</title>
    </properties>
    <body>
        <section name="Sample 12: One-way Messaging / Fire-and-Forget Through Synapse">
            <div class="xmlConf">&lt;definitions xmlns="http://ws.apache.org/ns/synapse"&gt;

    &lt;sequence name="main"&gt;
        &lt;!-- filtering of messages with XPath and regex matches --&gt;
        &lt;filter source="get-property('To')" regex=".*/StockQuote.*"&gt;
            &lt;then&gt;
                &lt;send&gt;
                    &lt;endpoint&gt;
                        &lt;address uri="http://localhost:9000/services/SimpleStockQuoteService"/&gt;
                    &lt;/endpoint&gt;
                &lt;/send&gt;
                &lt;drop/&gt;
            &lt;/then&gt;
        &lt;/filter&gt;
        &lt;send/&gt;
    &lt;/sequence&gt;

&lt;/definitions&gt;</div>
            <subsection name="Objective">
                <p>
                    Demonstrate the ability to perform one-way invocations (out-only) through
                    Synapse.
                </p>
            </subsection>
            <subsection name="Pre-requisites">
                <p>
                    <ul>
                        <li>
                            Deploy the SimpleStockQuoteService in the sample Axis2 server and start Axis2
                        </li>
                        <li>
                            This sample makes use of the configuration used in <a href="sample1.html">sample 1</a>.
                            So start Synapse using the configuration numbered 1 (repository/conf/sample/synapse_sample_1.xml)
                            <div class="command">
                                Unix/Linux: sh synapse.sh -sample 1<br/>
                                Windows: synapse.bat -sample 1
                            </div>
                        </li>
                    </ul>
                </p>
            </subsection>
            <subsection name="Executing the Client">
                <p>
                    In this example we will invoke the one-way 'placeOrder' operation on the
                    SimpleStockQuoteService using the sample client which uses the Axis2
                    ServiceClient.fireAndForget() API. To send a placeOrder request from the sample
                    client, execute the following command.
                </p>
                <div class="command">ant stockquote -Daddurl=http://localhost:9000/services/SimpleStockQuoteService -Dtrpurl=http://localhost:8280/ -Dmode=placeorder</div>

                <p>
                    Going through the Axis2 server logs, you will notice the following entry, which
                    confirms that Axis2 accepted the in-only request.
                </p>
                <div class="consoleOutput">SimpleStockQuoteService :: Accepted order for : 7482 stocks of IBM at $ 169.27205579038733</div>

                <p>
                    If you send your client request through TCPmon, you will notice that the
                    SimpleStockQuoteService replies to Synapse with a HTTP 202 reply, and that Synapse
                    in turns replies to the client with a HTTP 202 acknowledgment.
                </p>
            </subsection>
        </section>
        <p><a href="../samples.html">Back to Catalog</a></p>        
    </body>
</document>