<?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 400</title>
    </properties>
    <body>
        <section name="Sample 400: Message Splitting and Aggregation">
            <div class="xmlConf">&lt;definitions xmlns="http://ws.apache.org/ns/synapse"&gt;

    &lt;proxy name="SplitAggregateProxy"&gt;
        &lt;target&gt;
            &lt;inSequence&gt;
                &lt;iterate xmlns:m0="http://services.samples" expression="//m0:getQuote/m0:request"
                         preservePayload="true" attachPath="//m0:getQuote"&gt;
                    &lt;target&gt;
                        &lt;sequence&gt;
                            &lt;send&gt;
                                &lt;endpoint&gt;
                                    &lt;address
                                            uri="http://localhost:9000/services/SimpleStockQuoteService"/&gt;
                                &lt;/endpoint&gt;
                            &lt;/send&gt;
                        &lt;/sequence&gt;
                    &lt;/target&gt;
                &lt;/iterate&gt;
            &lt;/inSequence&gt;
            &lt;outSequence&gt;
                &lt;aggregate&gt;
                    &lt;onComplete xmlns:m0="http://services.samples"
                                expression="//m0:getQuoteResponse"&gt;
                        &lt;send/&gt;
                    &lt;/onComplete&gt;
                &lt;/aggregate&gt;
            &lt;/outSequence&gt;
        &lt;/target&gt;
    &lt;/proxy&gt;

&lt;/definitions&gt;</div>
            <subsection name="Objective">
                <p>
                    Showcase how Synapse can be used to split a message into multiple fragments
                    using the iterate mediator, and process them separately. The sample also shows
                    how to use the aggregate mediator to combine multiple messages into one.
                </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 400 (repository/conf/sample/synapse_sample_400.xml)
                            <div class="command">
                                Unix/Linux: sh synapse.sh -sample 400<br/>
                                Windows: synapse.bat -sample 400
                            </div>
                        </li>
                    </ul>
                </p>
            </subsection>
            <subsection name="Executing the Client">
                <p>
                    In this sample, the message sent to Synapse is comprised of a number of elements
                    of the same type. When Synapse receives this message it will iterate through those
                    elements and then will send each of them to the specified endpoint as separate
                    messages. When all the responses are received by Synapse, those messages will be
                    aggregated to form the resultant response and will send back to the client.
                </p>
                <p>
                    To try this out invoke the sample client as follows.
                </p>
                <div class="command">ant stockquote -Daddurl=http://localhost:8280/services/SplitAggregateProxy -Ditr=4</div>
                <p>
                    The above command will send a request containing four fragments in it. The
                    iterate mediator therefore will break up the message into four. You will notice
                    that Axis2 server is receiving 4 requests from Synapse. Four responses from Axis2
                    will be combined into one by the aggregate mediator and sent back to the sample
                    Axis2 client.
                </p>
            </subsection>
        </section>
        <p><a href="../samples.html">Back to Catalog</a></p>        
    </body>
</document>