<?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 201</title>
    </properties>
    <body>
        <section name="Sample 201: Reliable Communication Between the Client and Proxy Services Using WS-ReliableMessaging">
            <div class="xmlConf">&lt;definitions xmlns="http://ws.apache.org/ns/synapse"&gt;

    &lt;proxy name="StockQuoteProxy"&gt;
        &lt;target&gt;
            &lt;inSequence&gt;
                &lt;send&gt;
                    &lt;endpoint&gt;
                        &lt;address uri="http://localhost:9000/services/SimpleStockQuoteService"/&gt;
                    &lt;/endpoint&gt;
                &lt;/send&gt;
            &lt;/inSequence&gt;
            &lt;outSequence&gt;
                &lt;send/&gt;
            &lt;/outSequence&gt;
        &lt;/target&gt;
        &lt;publishWSDL uri="file:repository/conf/sample/resources/proxy/sample_proxy_1.wsdl"/&gt;
        &lt;enableRM/&gt;
    &lt;/proxy&gt;

&lt;/definitions&gt;</div>
            <subsection name="Objective">
                <p>
                    Show case how to engage WS-ReliableMessaging on proxy services so that the
                    communication between client and the proxy service is reliable
                </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 201 (repository/conf/sample/synapse_sample_201.xml)
                            <div class="command">
                                Unix/Linux: sh synapse.sh -sample 201<br/>
                                Windows: synapse.bat -sample 201
                            </div>
                        </li>
                    </ul>
                </p>
            </subsection>
            <subsection name="Executing the Client">
                <p>
                    In the above configuration, a proxy service is created with WS-RM enabled using
                    the &lt;enableRM/&gt; tag. Therefore, this proxy service is capable of
                    communicating with a WS-RM client. It also removes the WS-RM headers in the
                    inSequence before the message is sent to the backend server. This is required as
                    the reliable messaging is applicable only between the client and Synapse. Now
                    start the client with WS-RM as follows:
                </p>
                <div class="command">ant stockquote -Dsymbol=IBM -Dmode=quote -Daddurl=http://localhost:8280/services/StockQuoteProxy -Dwsrm=true</div>
                <p>
                    In this case, client sends a WS-RM enabled request to Synapse where Synapse sends
                    normal requests to the server. This can be observed by examining the wire level
                    messages between the client and Synapse. These messages would be similar to the
                    wire level messages shown in <a href="sample101.html">sample 101</a>.
                </p>                
            </subsection>
        </section>
        <p><a href="../samples.html">Back to Catalog</a></p>        
    </body>
</document>