You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@synapse.apache.org by ru...@apache.org on 2008/01/28 12:05:55 UTC
svn commit: r615849 [10/11] - in /webservices/synapse/trunk/java/src/site:
./ resources/ resources/css/ resources/download/ xdoc/ xdoc/1_0/ xdoc/1_1/
xdoc/download/ xdoc/download/1.0/ xdoc/download/1.1.1/ xdoc/download/1.1/
Copied: webservices/synapse/trunk/java/src/site/xdoc/Synapse_Samples.xml (from r614421, webservices/synapse/branches/1.1.1/src/site/resources/Synapse_Samples.html)
URL: http://svn.apache.org/viewvc/webservices/synapse/trunk/java/src/site/xdoc/Synapse_Samples.xml?p2=webservices/synapse/trunk/java/src/site/xdoc/Synapse_Samples.xml&p1=webservices/synapse/branches/1.1.1/src/site/resources/Synapse_Samples.html&r1=614421&r2=615849&rev=615849&view=diff
==============================================================================
--- webservices/synapse/branches/1.1.1/src/site/resources/Synapse_Samples.html (original)
+++ webservices/synapse/trunk/java/src/site/xdoc/Synapse_Samples.xml Mon Jan 28 03:05:41 2008
@@ -1,26 +1,11 @@
-<!--
-~ 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.
--->
-<html>
-<head>
- <meta http-equiv="content-type" content="">
- <title>Synapse Samples</title>
- <style type="text/css">
+<?xml version="1.0"?>
+
+<document>
+ <properties>
+ <title>Samples Guide</title>
+ </properties>
+ <head>
+ <style type="text/css" xml:space="preserve">
.command {
border: 1px dashed #3c78b5;
text-align: left;
@@ -115,267 +100,430 @@
padding: 2px;
margin: 18px 0px 4px 0px;
}</style>
-</head>
-
-<body>
-<h1>Running the Synapse Samples</h1>
-
-<h2><a name="TOC">Contents</a></h2>
+ </head>
+ <body>
+ <table border="0" style="width: 100%">
+ <caption/>
+ <tbody>
+ <tr>
+ <td>
+ <h1>
+ Running the Synapse Samples
+ </h1>
+ </td>
+ <td>
+ <img alt="Synapse logo"
+ src="images/synapse-logo-web2.png" width="197"
+ height="82"/>
+ </td>
+ </tr>
+ </tbody>
+ </table>
+ <h2>
+ <a name="TOC" id="TOC">Contents</a>
+ </h2>
+ <div class="section-content">
+ <ul>
+ <li>
+ <a href="Synapse_Samples_Setup.html#Overview">Overview</a>
+ </li>
+ <li>
+ <a href="#MediationSamples">Message mediation samples</a>
+ <ul>
+ <li>
+ <a href="#Sample0">Sample 0: Introduction to Synapse</a>
+ </li>
+ <li>
+ <a href="#Sample1">Sample 1: Simple content based routing (CBR)
+ of messages</a>
+ </li>
+ <li>
+ <a href="#Sample2">Sample 2: CBR with the Switch-case mediator,
+ using message properties</a>
+ </li>
+ <li>
+ <a href="#Sample3">Sample 3: Local Registry entry definitions,
+ reusable endpoints and sequences</a>
+ </li>
+ <li>
+ <a href="#Sample4">Sample 4: Introduction to error handling</a>
+ </li>
+ <li>
+ <a href="#Sample5">Sample 5: Creating SOAP fault messages and
+ changing the direction of a message</a>
+ </li>
+ <li>
+ <a href="#Sample6">Sample 6: Manipulating SOAP headers, and
+ filtering incoming and outgoing messages</a>
+ </li>
+ <li>
+ <a href="#Sample7">Sample 7: Introduction to local Registry
+ entries and using Schema validation</a>
+ </li>
+ <li>
+ <a href="#Sample8">Sample 8: Introduction to static and dynamic
+ registry resources, and using XSLT transformations</a>
+ </li>
+ <li>
+ <a href="#Sample9">Sample 9: Introduction to dynamic sequences
+ with the Registry</a>
+ </li>
+ <li>
+ <a href="#Sample10">Sample 10: Introduction to dynamic
+ endpoints with the Registry</a>
+ </li>
+ <li>
+ <a href="#Sample11">Sample 11: A full registry based
+ configuration, and sharing a configuration between multiple
+ instances</a>
+ </li>
+ <li>
+ <a href="#Sample12">Sample 12: One way messaging /
+ fireAndForget through synapse</a>
+ </li>
+ </ul>
+ </li>
+ <li>
+ <a href="#Endpoints">Advanced mediations with endpoints</a>
+ <ul>
+ <li>
+ <a href="#Sample50">Sample 50: POX to SOAP conversion</a>
+ </li>
+ <li>
+ <a href="#Sample51">Sample 51: MTOM and SwA optimizations and
+ request/response correlation</a>
+ </li>
+ <li>
+ <a href="#Sample52">Sample 52: Session less load balancing
+ between 3 endpoints</a>
+ </li>
+ <li>
+ <a href="#Sample53">Sample 53: Failover sending among 3
+ endpoints</a>
+ </li>
+ <li>
+ <a href="#Sample54">Sample 54: Session affinity load balancing
+ between 3 endpoints</a>
+ </li>
+ <li>
+ <a href="#Sample55">Sample 55: Session affinity load balancing
+ between fail over endpoints</a>
+ </li>
+ <li>
+ <a href="#Sample56">Sample 56: WSDL endpoint</a>
+ </li>
+ </ul>
+ </li>
+ <li>
+ <a href="#MessageMediationQoS">Quality of Service addition or
+ deduction samples in message mediation</a>
+ <ul>
+ <li>
+ <a href="#Sample100">Sample 100: Using WS-Security for outgoing
+ messages</a>
+ </li>
+ <li>
+ <a href="#Sample101">Sample 101: Reliable message exchange
+ between Synapse and the back-end server using WS-ReliableMessaging</a>
+ </li>
+ </ul>
+ </li>
+ <li>
+ <a href="#ProxyServices">Synapse Proxy service samples</a>
+ <ul>
+ <li>
+ <a href="#Sample150">Sample 150: Introduction to proxy services</a>
+ </li>
+ <li>
+ <a href="#Sample151">Sample 151: Custom sequences and endpoints
+ with proxy services</a>
+ </li>
+ <li>
+ <a href="#Sample152">Sample 152: Switching transports and
+ message format from SOAP to REST/POX</a>
+ </li>
+ <li>
+ <a href="#Sample153">Sample 153: Routing the messages arrived
+ to a proxy service without processing the security headers</a>
+ </li>
+ <li>
+ <a href="#Sample154">Sample 154: Load Balancing with Proxy
+ Service </a>
+ </li>
+ </ul>
+ </li>
+ <li>
+ <a href="#ProxyServiceQoS">QoS addition and deduction for service
+ mediation (proxy) samples</a>
+ <ul>
+ <li>
+ <a href="#Sample200">Sample 200: Using WS-Security with policy
+ attachments for proxy services</a>
+ </li>
+ <li>
+ <a href="#Sample201">Sample 201: Reliable message exchange
+ between the client and proxy services using WS-ReliableMessaging</a>
+ </li>
+ </ul>
+ </li>
+ <li>
+ <a href="#Transport">Transport samples and switching transports</a>
+ <ul>
+ <li>
+ <a href="#Sample250">Sample 250: Introduction to switching
+ transports - JMS to http/s</a>
+ </li>
+ <li>
+ <a href="#Sample251">Sample 251: Switching from http/s to JMS</a>
+ </li>
+ <li>
+ <a href="#Sample252">Sample 252: Pure text/binary and POX
+ message support with JMS</a>
+ </li>
+ <li>
+ <a href="#Sample253">Sample 253: One way bridging from JMS to
+ http and replying with a 202 Accepted response</a>
+ </li>
+ <li>
+ <a href="#Sample254">Sample 254: Using the file system as
+ transport medium using VFS transport listener and sender</a>
+ </li>
+ <li>
+ <a href="#Sample255">Sample 255: Switching from ftp transport
+ listener to mail transport sender</a>
+ </li>
+ <li>
+ <a href="#Sample256">Sample 256: Proxy services with the mail
+ transport</a>
+ </li>
+ </ul>
+ </li>
+ <li>
+ <a href="#Task">Introduction to synapse tasks</a>
+ <ul>
+ <li>
+ <a href="#Sample300">Sample 300: Introduction to tasks with
+ simple trigger</a>
+ </li>
+ </ul>
+ </li>
+ <li>
+ <a href="#AdvancedMediation">Advanced mediations with advanced
+ mediators</a>
+ <ul>
+ <li>
+ <a href="#ScriptMediator">Using scripts in mediation (Script
+ Mediator)</a>
+ <ul>
+ <li>
+ <a href="#Sample350">Sample 350: Introduction to the script
+ mediator using js scripts</a>
+ </li>
+ <li>
+ <a href="#Sample351">Sample 351: In-line script mediation
+ with JavaScript</a>
+ </li>
+ <li>
+ <a href="#Sample352">Sample 352: Accessing Synapse message
+ context API methods using scripting language</a>
+ </li>
+ <li>
+ <a href="#Sample353">Sample 353: Using Ruby scripts for
+ mediation</a>
+ </li>
+ <li>
+ <a href="#Sample354">Sample 354: Using In-lined Ruby
+ scripts for mediation</a>
+ </li>
+ </ul>
+ </li>
+ <li>
+ <a href="#DBMediators">Database interactions in mediation
+ (DBLookup / DBReport)</a>
+ <ul>
+ <li>
+ <a href="#Sample360">Sample 360: Introduction to dblookp
+ mediator</a>
+ </li>
+ <li>
+ <a href="#Sample361">Sample 361: Introduction to dbreport
+ mediator</a>
+ </li>
+ <li>
+ <a href="#Sample362">Sample 362: Action of dbreport and
+ dblookup mediators together</a>
+ </li>
+ </ul>
+ </li>
+ <li>
+ <a href="#Throttle">Throtteling messages (Throttle Mediator)</a>
+ <ul>
+ <li>
+ <a href="#Sample370">Sample 370: Introduction to throttle
+ mediator and concurrency throttling</a>
+ </li>
+ <li>
+ <a href="#Sample371">Sample 371: Restricting requests based
+ on policies</a>
+ </li>
+ <li>
+ <a href="#Sample372">Sample 372: Use of both concurrency
+ throttling and request rate based throttling </a>
+ </li>
+ </ul>
+ </li>
+ <li>
+ <a href="#Class">Extending the mediation in java (Class
+ Mediator)</a>
+ <ul>
+ <li>
+ <a href="#Sample380">Sample 380: Writing your own custom
+ mediation in Java</a>
+ </li>
+ </ul>
+ </li>
+ <li>
+ <a href="#XQuery">Evaluating XQuery for mediation (XQuery
+ Mediator)</a>
+ <ul>
+ <li>
+ <a href="#Sample390">Sample 390: Introduction to the XQuery
+ mediator</a>
+ </li>
+ <li>
+ <a href="#Sample391">Sample 391: How to use the data from
+ an external XML document with in XQuery </a>
+ </li>
+ </ul>
+ </li>
+ <li>
+ <a href="#Splitter">Splitting messages in to parts and process
+ in parallel (Iterate / Clone)</a>
+ <ul>
+ <li>
+ <a href="#Sample400">Sample 400: Message splitting and
+ aggregating the responses</a>
+ </li>
+ </ul>
+ </li>
+
+
+
+
+
+
+ <li>
+ <a href="#Cache">Caching the responses over the requests</a>
+ <ul>
+ <li>
+ <a href="#Sample420">Sample 420: Simple cache implemented
+ on synapse for the actual service</a>
+ </li>
+ </ul>
+ </li>
+ <li>
+ <a href="#Callout">Synchronize web service invocation with
+ Callout mediator </a>
+ <ul>
+ <li>
+ <a href="#Sample430">Sample 430: Simple Callout Mediator
+ for Synchronize web service invocation</a>
+ </li>
+ </ul>
+ </li>
+ </ul>
+ </li>
+ </ul>
+ </div>
+ <h1>
+ <a name="MediationSamples" id="MediationSamples">Message Mediation
+ Samples</a>
+ </h1>
+ <h2>
+ <a name="Sample0" id="Sample0">Sample 0: Introduction to Synapse</a>
+ </h2>
+<pre xml:space="preserve"><definitions xmlns="http://ws.apache.org/ns/synapse">
+ <!-- log all attributes of messages passing through -->
+ <log level="full"/>
-<div class="section-content">
-<ul>
- <li><a href="Synapse_Samples_Setup.html#Overview">Overview</a></li>
- <li><a href="#MediationSamples">Message mediation samples</a>
- <ul>
- <li><a href="#Sample0">Sample 0: Introduction to Synapse</a></li>
- <li><a href="#Sample1">Sample 1: Simple content based routing (CBR) of
- messages</a></li>
- <li><a href="#Sample2">Sample 2: CBR with the Switch-case mediator,
- using message properties</a></li>
- <li><a href="#Sample3">Sample 3: Local Registry entry definitions,
- reusable endpoints and sequences</a></li>
- <li><a href="#Sample4">Sample 4: Introduction to error handling</a></li>
- <li><a href="#Sample5">Sample 5: Creating SOAP fault messages and
- changing the direction of a message</a></li>
- <li><a href="#Sample6">Sample 6: Manipulating SOAP headers, and
- filtering incoming and outgoing messages</a></li>
- <li><a href="#Sample7">Sample 7: Introduction to local Registry entries
- and using Schema validation</a></li>
- <li><a href="#Sample8">Sample 8: Introduction to static and dynamic
- registry resources, and using XSLT transformations</a></li>
- <li><a href="#Sample9">Sample 9: Introduction to dynamic sequences with
- the Registry</a></li>
- <li><a href="#Sample10">Sample 10: Introduction to dynamic endpoints
- with the Registry</a></li>
- <li><a href="#Sample11">Sample 11: A full registry based configuration,
- and sharing a configuration between multiple instances</a></li>
- <li><a href="#Sample12">Sample 12: One way messaging / fireAndForget
- through synapse</a></li>
- </ul>
- </li>
- <li><a href="#Endpoints">Advanced mediations with endpoints</a>
- <ul>
- <li><a href="#Sample50">Sample 50: POX to SOAP conversion</a></li>
- <li><a href="#Sample51">Sample 51: MTOM and SwA optimizations and
- request/response correlation</a></li>
- <li><a href="#Sample52">Sample 52: Session less load balancing between
- 3 endpoints</a></li>
- <li><a href="#Sample53">Sample 53: Failover sending among 3
- endpoints</a></li>
- <li><a href="#Sample54">Sample 54: Session affinity load balancing
- between 3 endpoints</a></li>
- <li><a href="#Sample55">Sample 55: Session affinity load balancing
- between fail over endpoints</a></li>
- <li><a href="#Sample56">Sample 56: WSDL endpoint</a></li>
- </ul>
- </li>
- <li><a href="#MessageMediationQoS">Quality of Service addition or deduction
- samples in message mediation</a>
- <ul>
- <li><a href="#Sample100">Sample 100: Using WS-Security for outgoing
- messages</a></li>
- <li><a href="#Sample101">Sample 101: Reliable message exchange between
- Synapse and the back-end server using WS-ReliableMessaging</a></li>
- </ul>
- </li>
- <li><a href="#ProxyServices">Synapse Proxy service samples</a>
- <ul>
- <li><a href="#Sample150">Sample 150: Introduction to proxy
- services</a></li>
- <li><a href="#Sample151">Sample 151: Custom sequences and endpoints
- with proxy services</a></li>
- <li><a href="#Sample152">Sample 152: Switching transports and message
- format from SOAP to REST/POX</a></li>
- <li><a href="#Sample153">Sample 153: Routing the messages arrived to a
- proxy service without processing the security headers</a></li>
- <li><a href="#Sample154">Sample 154: Load Balancing with Proxy Service
- </a></li>
- </ul>
- </li>
- <li><a href="#ProxyServiceQoS">QoS addition and deduction for service
- mediation (proxy) samples</a>
- <ul>
- <li><a href="#Sample200">Sample 200: Using WS-Security with policy
- attachments for proxy services</a></li>
- <li><a href="#Sample201">Sample 201: Reliable message exchange between
- the client and proxy services using WS-ReliableMessaging</a></li>
- </ul>
- </li>
- <li><a href="#Transport">Transport samples and switching transports</a>
- <ul>
- <li><a href="#Sample250">Sample 250: Introduction to switching
- transports - JMS to http/s</a></li>
- <li><a href="#Sample251">Sample 251: Switching from http/s to
- JMS</a></li>
- <li><a href="#Sample252">Sample 252: Pure text/binary and POX message
- support with JMS</a></li>
- <li><a href="#Sample253">Sample 253: One way bridging from JMS to http
- and replying with a 202 Accepted response</a></li>
- <li><a href="#Sample254">Sample 254: Using the file system as transport
- medium using VFS transport listener and sender</a></li>
- <li><a href="#Sample255">Sample 255: Switching from ftp transport
- listener to mail transport sender</a></li>
- <li><a href="#Sample256">Sample 256: Proxy services with the mail
- transport</a></li>
- </ul>
- </li>
- <li><a href="#Task">Introduction to synapse tasks</a>
- <ul>
- <li><a href="#Sample300">Sample 300: Introduction to tasks with simple
- trigger</a></li>
- </ul>
- </li>
- <li><a href="#AdvancedMediation">Advanced mediations with advanced
- mediators</a>
- <ul>
- <li><a href="#ScriptMediator">Using scripts in mediation (Script
- Mediator)</a>
- <ul>
- <li><a href="#Sample350">Sample 350: Introduction to the script
- mediator using js scripts</a></li>
- <li><a href="#Sample351">Sample 351: In-line script mediation with
- JavaScript</a></li>
- <li><a href="#Sample352">Sample 352: Accessing Synapse message
- context API methods using scripting language</a></li>
- <li><a href="#Sample353">Sample 353: Using Ruby scripts for
- mediation</a></li>
- <li><a href="#Sample354">Sample 354: Using In-lined Ruby scripts
- for mediation</a></li>
- </ul>
- </li>
- <li><a href="#DBMediators">Database interactions in mediation (DBLookup
- / DBReport)</a>
- <ul>
- <li><a href="#Sample360">Sample 360: Introduction to dblookp
- mediator</a></li>
- <li><a href="#Sample361">Sample 361: Introduction to dbreport
- mediator</a></li>
- <li><a href="#Sample362">Sample 362: Action of dbreport and
- dblookup mediators together</a></li>
- </ul>
- </li>
- <li><a href="#Throttle">Throtteling messages (Throttle Mediator)</a>
- <ul>
- <li><a href="#Sample370">Sample 370: Introduction to throttle
- mediator and concurrency throttling</a></li>
- <li><a href="#Sample371">Sample 371: Restricting requests based on
- policies</a></li>
- <li><a href="#Sample372">Sample 372: Use of both concurrency
- throttling and request rate based throttling </a></li>
- </ul>
+ <!-- Send the messageto implicit destination -->
+ <send/>
+</definitions></pre>
+ <p>
+ <strong>Objective: Introduction to Synapse. Shows how a message could
+ be made to pass through Synapse </strong><strong>and logged
+ before it is delivered to its ultimate receiver.</strong>
+ </p>
+ <p>
+ The Stock quote client can operate in the following modes for this
+ example.
+ </p>
+ <ol>
+ <li>
+ Smart Client mode
</li>
- <li><a href="#Class">Extending the mediation in java (Class
- Mediator)</a>
- <ul>
- <li><a href="#Sample380">Sample 380: Writing your own custom
- mediation in Java</a></li>
- </ul>
+ <li>
+<pre xml:space="preserve">ant stockquote -Daddurl=http://localhost:9000/soap/SimpleStockQuoteService -Dtrpurl=http://localhost:8080/ </pre>
</li>
- <li><a href="#XQuery">Evaluating XQuery for mediation (XQuery
- Mediator)</a>
- <ul>
- <li><a href="#Sample390">Sample 390: Introduction to the XQuery
- mediator</a></li>
- <li><a href="#Sample391">Sample 391: How to use the data from an
- external XML document with in XQuery </a></li>
- </ul>
+ <li>
+ Using Synapse as a HTTP Proxy
</li>
- <li><a href="#Splitter">Splitting messages in to parts and process in
- parallel (Iterate / Clone)</a>
- <ul>
- <li><a href="#Sample400">Sample 400: Message splitting and
- aggregating the responses</a></li>
- </ul>
+ <li>
+<pre xml:space="preserve">ant stockquote -Daddurl=http://localhost:9000/soap/SimpleStockQuoteService -Dprxurl=http://localhost:8080/</pre>
</li>
- <!--<li><a href="#Aggregator">Aggregating messages and process in batch</a> -->
- <!--<ul>-->
- <!--<li><a href="#Sample410">Sample 410: Message splitting and-->
- <!--aggregating the responses</a></li>-->
- <!--</ul>-->
- <!--</li>-->
- <li><a href="#Cache">Caching the responses over the requests</a>
- <ul>
- <li><a href="#Sample420">Sample 420: Simple cache implemented on
- synapse for the actual service</a></li>
- </ul>
+ <li>
+ Gateway Mode / Dumb Client
</li>
- <li><a href="#Callout">Synchronize web service invocation with Callout
- mediator </a>
- <ul>
- <li><a href="#Sample430">Sample 430: Simple Callout Mediator for
- Synchronize web service invocation</a></li>
- </ul>
+ <li>
+ <p>
+ See sample # 1
+ </p>
</li>
- </ul>
- </li>
-</ul>
-</div>
-
-<h1><a name="MediationSamples">Message Mediation Samples</a></h1>
-
-<h2><a name="Sample0">Sample 0: Introduction to Synapse</a></h2>
-<pre><definitions xmlns="http://ws.apache.org/ns/synapse">
- <!-- log all attributes of messages passing through -->
- <log level="full"/>
-
- <!-- Send the messageto implicit destination -->
- <send/>
-</definitions></pre>
-
-<p><strong>Objective: Introduction to Synapse. Shows how a message could be
-made to pass through Synapse </strong><strong>and logged before it is
-delivered to its ultimate receiver.</strong></p>
-
-<p>The Stock quote client can operate in the following modes for this
-example.</p>
-<ol>
- <li>Smart Client mode</li>
- <pre>ant stockquote -Daddurl=http://localhost:9000/soap/SimpleStockQuoteService -Dtrpurl=http://localhost:8080/ </pre>
- <li>Using Synapse as a HTTP Proxy</li>
- <pre>ant stockquote -Daddurl=http://localhost:9000/soap/SimpleStockQuoteService -Dprxurl=http://localhost:8080/</pre>
- <li>Gateway Mode / Dumb Client</li>
-
- <p>See sample # 1</p>
-</ol>
-
-<p><strong>Prerequisites:<br>
-</strong>Start the Synapse configuration numbered 0: e.g. synapse -sample
-0<br>
-Start the Axis2 server and deploy the SimpleStockQuoteService if not already
-deployed</p>
-
-<p><strong>Execute the Smart Client </strong></p>
-
-<p>By tracing the execution of Synapse with the log output level set to
-DEBUG, you will see the client request arriving at Synapse with a
-WS-Addressing 'To' set to EPR
-http://localhost:9000/soap/SimpleStockQuoteService. The Synapse engine logs
-the message at the "full" log level (i.e. all the message headers and the
-body) then sends the message to its implicit 'To' address which is
-http://localhost:9000/soap/SimpleStockQuoteService. You will see a message in
-the Axis2 server console confirming that the message got routed to the sample
-server and the sample service hosted at the sample server generating a stock
-quote for the requested symbol.</p>
-<pre>Sat Nov 18 21:01:23 IST 2006 SimpleStockQuoteService :: Generating quote for : IBM</pre>
-
-<p>The response message generated by the service is again received by
-Synapse, and flows through the same mediation rules, which logs the response
-message and then sends it back. This time to the client. On the client
-console you should see an output similar to the following based on the
-message received by the client.</p>
-<pre>Standard :: Stock price = $95.26454380258552</pre>
-
-<p><strong>Execute the Proxy Client </strong></p>
-
-<p>You will see the exact same behaviour as per the previous example when you
-run this scenario. However this time the difference is at the client, as it
-sends the message to the WS-Addressing 'To' address
-http://localhost:9000/soap/SimpleStockQuoteService, but the transport
-specifies Synapse as the http proxy. </p>
-
-<h2><a name="Sample1">Sample 1: Simple content based routing (CBR) of
-messages</a></h2>
-<pre><definitions xmlns="http://ws.apache.org/ns/synapse">
+ </ol>
+ <p>
+ <strong>Prerequisites:<br/> </strong>Start the Synapse
+ configuration numbered 0: e.g. synapse -sample 0<br/> Start the Axis2
+ server and deploy the SimpleStockQuoteService if not already deployed
+ </p>
+ <p>
+ <strong>Execute the Smart Client </strong>
+ </p>
+ <p>
+ By tracing the execution of Synapse with the log output level set to
+ DEBUG, you will see the client request arriving at Synapse with a
+ WS-Addressing 'To' set to EPR
+ http://localhost:9000/soap/SimpleStockQuoteService. The Synapse engine
+ logs the message at the "full" log level (i.e. all the message headers and
+ the body) then sends the message to its implicit 'To' address which is
+ http://localhost:9000/soap/SimpleStockQuoteService. You will see a message
+ in the Axis2 server console confirming that the message got routed to the
+ sample server and the sample service hosted at the sample server
+ generating a stock quote for the requested symbol.
+ </p>
+<pre xml:space="preserve">Sat Nov 18 21:01:23 IST 2006 SimpleStockQuoteService :: Generating quote for : IBM</pre>
+ <p>
+ The response message generated by the service is again received by
+ Synapse, and flows through the same mediation rules, which logs the
+ response message and then sends it back. This time to the client. On the
+ client console you should see an output similar to the following based on
+ the message received by the client.
+ </p>
+<pre xml:space="preserve">Standard :: Stock price = $95.26454380258552</pre>
+ <p>
+ <strong>Execute the Proxy Client </strong>
+ </p>
+ <p>
+ You will see the exact same behaviour as per the previous example when you
+ run this scenario. However this time the difference is at the client, as
+ it sends the message to the WS-Addressing 'To' address
+ http://localhost:9000/soap/SimpleStockQuoteService, but the transport
+ specifies Synapse as the http proxy.
+ </p>
+ <h2>
+ <a name="Sample1" id="Sample1">Sample 1: Simple content based routing
+ (CBR) of messages</a>
+ </h2>
+<pre xml:space="preserve"><definitions xmlns="http://ws.apache.org/ns/synapse">
<!-- filtering of messages with XPath and regex matches -->
<filter source="get-property('To')" regex=".*/StockQuote.*">
<send>
@@ -387,35 +535,38 @@
</filter>
<send/>
</definitions> </pre>
-
-<p><strong>Objective: Introduction to simple content based routing. Shows how
-a message could be made to pass through Synapse using the Dumb Client mode,
-where Synapse acts as a gateway to accept all messages and then perform
-mediation and routing based on message properties or content.</strong></p>
-
-<p><strong>Prerequisites:</strong><br>
-Start the Synapse configuration numbered 1: i.e. synapse -sample 1<br>
-Start the Axis2 server and deploy the SimpleStockQuoteService if not already
-deployed<br>
-</p>
-
-<p>Execute the Dumb Client as: </p>
-<pre>ant stockquote -Dtrpurl=http://localhost:8080/soap/StockQuote<br></pre>
-
-<p>This time you will see Synapse receiving a message for which Synapse was
-set as the ultimate receiver of the message. Based on the 'To' EPR of
-http://localhost:8080/soap/StockQuote, Synapse performs a match to the path
-'/StockQuote' and as the request matches the XPath expression of the filter
-mediator, the filter mediator's child mediators execute. This sends the
-message to a different endpoint as specified by the endpoint definition. The
-'drop' mediator terminates further processing of the current message in a
-configuration. During response processing, the filter condition fails, and
-thus the implicit 'send' mediator forwards the response back to the
-client.</p>
-
-<h2><a name="Sample2">Sample 2: CBR with the Switch-case mediator, using
-message properties</a></h2>
-<pre><definitions xmlns="http://ws.apache.org/ns/synapse">
+ <p>
+ <strong>Objective: Introduction to simple content based routing. Shows
+ how a message could be made to pass through Synapse using the Dumb Client
+ mode, where Synapse acts as a gateway to accept all messages and then
+ perform mediation and routing based on message properties or content.</strong>
+ </p>
+ <p>
+ <strong>Prerequisites:</strong><br/> Start the Synapse
+ configuration numbered 1: i.e. synapse -sample 1<br/> Start the Axis2
+ server and deploy the SimpleStockQuoteService if not already deployed<br/>
+ </p>
+ <p>
+ Execute the Dumb Client as:
+ </p>
+<pre xml:space="preserve">ant stockquote -Dtrpurl=http://localhost:8080/soap/StockQuote<br/></pre>
+ <p>
+ This time you will see Synapse receiving a message for which Synapse was
+ set as the ultimate receiver of the message. Based on the 'To' EPR of
+ http://localhost:8080/soap/StockQuote, Synapse performs a match to the
+ path '/StockQuote' and as the request matches the XPath expression of the
+ filter mediator, the filter mediator's child mediators execute. This sends
+ the message to a different endpoint as specified by the endpoint
+ definition. The 'drop' mediator terminates further processing of the
+ current message in a configuration. During response processing, the filter
+ condition fails, and thus the implicit 'send' mediator forwards the
+ response back to the client.
+ </p>
+ <h2>
+ <a name="Sample2" id="Sample2">Sample 2: CBR with the Switch-case
+ mediator, using message properties</a>
+ </h2>
+<pre xml:space="preserve"><definitions xmlns="http://ws.apache.org/ns/synapse">
<switch source="//m0:getQuote/m0:request/m0:symbol" xmlns:m0="http://services.samples/xsd">
<case regex="IBM">
<!-- the property mediator sets a local property on the *current* message -->
@@ -443,34 +594,39 @@
<!-- Send the messages where they are destined to (i.e. the 'To' EPR of the message) -->
<send/>
</definitions></pre>
-
-<p><strong>Objective: Introduce switch-case mediator and writing and reading
-of local properties set on a message instance</strong></p>
-
-<p><strong>Prerequisites:</strong><br>
-Start the Synapse configuration numbered 2: i.e. synapse -sample 2<br>
-Start the Axis2 server and deploy the SimpleStockQuoteService if not already
-done.</p>
-
-<p>Execute the 'ant stockquote ..' request again in the smart client mode,
-specifying 'IBM', 'MSFT' and 'SUN' as the stock symbols. When the symbol IBM
-is requested, viewing the mediation logs you will see that the case
-statements' first case for 'IBM' is executed and a local property named
-'symbol' was set to 'Great stock - IBM'. Subsequently this local property
-value is looked up by the log mediator and logged using the 'get-property()'
-XPath extension function.</p>
-
-<p>ant stockquote -Daddurl=http://localhost:9000/soap/SimpleStockQuoteService
--Dtrpurl=http://localhost:8080/ -Dsymbol=IBM</p>
-<pre>INFO LogMediator - symbol = Great stock - IBM, epr = http://localhost:9000/axis2/services/SimpleStockQuoteService </pre>
-
-<p>ant stockquote -Daddurl=http://localhost:9000/soap/SimpleStockQuoteService
--Dtrpurl=http://localhost:8080/ -Dsymbol=MSFT</p>
-<pre>INFO LogMediator - symbol = Are you sure? - MSFT, epr = http://localhost:9000/axis2/services/SimpleStockQuoteService</pre>
-
-<h2><a name="Sample3">Sample 3: Local Registry entry definitions, reusable
-endpoints and sequences</a></h2>
-<pre><definitions xmlns="http://ws.apache.org/ns/synapse">
+ <p>
+ <strong>Objective: Introduce switch-case mediator and writing and
+ reading of local properties set on a message instance</strong>
+ </p>
+ <p>
+ <strong>Prerequisites:</strong><br/> Start the Synapse
+ configuration numbered 2: i.e. synapse -sample 2<br/> Start the Axis2
+ server and deploy the SimpleStockQuoteService if not already done.
+ </p>
+ <p>
+ Execute the 'ant stockquote ..' request again in the smart client mode,
+ specifying 'IBM', 'MSFT' and 'SUN' as the stock symbols. When the symbol
+ IBM is requested, viewing the mediation logs you will see that the case
+ statements' first case for 'IBM' is executed and a local property named
+ 'symbol' was set to 'Great stock - IBM'. Subsequently this local property
+ value is looked up by the log mediator and logged using the
+ 'get-property()' XPath extension function.
+ </p>
+ <p>
+ ant stockquote -Daddurl=http://localhost:9000/soap/SimpleStockQuoteService
+ -Dtrpurl=http://localhost:8080/ -Dsymbol=IBM
+ </p>
+<pre xml:space="preserve">INFO LogMediator - symbol = Great stock - IBM, epr = http://localhost:9000/axis2/services/SimpleStockQuoteService </pre>
+ <p>
+ ant stockquote -Daddurl=http://localhost:9000/soap/SimpleStockQuoteService
+ -Dtrpurl=http://localhost:8080/ -Dsymbol=MSFT
+ </p>
+<pre xml:space="preserve">INFO LogMediator - symbol = Are you sure? - MSFT, epr = http://localhost:9000/axis2/services/SimpleStockQuoteService</pre>
+ <h2>
+ <a name="Sample3" id="Sample3">Sample 3: Local Registry entry
+ definitions, reusable endpoints and sequences</a>
+ </h2>
+<pre xml:space="preserve"><definitions xmlns="http://ws.apache.org/ns/synapse">
<!-- define a string resource entry to the local registry -->
<localEntry key="version">0.1</localEntry>
<!-- define a reuseable endpoint definition -->
@@ -502,41 +658,45 @@
</out>
</sequence>
</definitions></pre>
-
-<p><strong>Objective: Illustrates local registry entry definitions, reusable
-endpoints and sequences</strong></p>
-
-<p><strong>Prerequisites:</strong><br>
-Start the Synapse configuration numbered 3: i.e. synapse -sample 3<br>
-Start the Axis2 server and deploy the SimpleStockQuoteService if not already
-done</p>
-
-<p>This example uses a sequence named as "main" that specifies the main
-mediation rules to be executed. This is equivalent to directly specifying the
-mediators of the main sequence within the <definitions> tags. This is
-the recommended and also a better approach for non-trivial configurations.
-Execute the 'ant stockquote ..' request again, and following through the
-mediation logs you will now notice that the sequence named "main" is
-executed. Then for the incoming message flow the <in> mediator
-executes, and it calls into the sequence named "stockquote".</p>
-<pre>ant stockquote -Daddurl=http://localhost:9000/soap/SimpleStockQuoteService -Dtrpurl=http://localhost:8080/</pre>
-<pre>DEBUG SequenceMediator - Sequence mediator <main> :: mediate()<br>DEBUG InMediator - In mediator mediate()<br>DEBUG SequenceMediator - Sequence mediator <stockquote> :: mediate()</pre>
-
-<p>As the "stockquote" sequence executes, the log mediator dumps a simple
-text/string property, result of an XPath evaluation, that picks up the key
-named "version", and a second result of an XPath evaluation that picks up a
-local message property set previously by the <property> mediator. The
-get-property() XPath extension function is able to read message properties
-local to the current message, local or remote registry entries, Axis2 message
-context properties as well as transport headers. The local entry definition
-for "version" defines a simple text/string registry entry for that which is
-visible to all messages that pass through Synapse.</p>
-<pre>[HttpServerWorker-1] INFO LogMediator - Text = Sending quote request, version = 0.1, direction = incoming
+ <p>
+ <strong>Objective: Illustrates local registry entry definitions,
+ reusable endpoints and sequences</strong>
+ </p>
+ <p>
+ <strong>Prerequisites:</strong><br/> Start the Synapse
+ configuration numbered 3: i.e. synapse -sample 3<br/> Start the Axis2
+ server and deploy the SimpleStockQuoteService if not already done
+ </p>
+ <p>
+ This example uses a sequence named as "main" that specifies the main
+ mediation rules to be executed. This is equivalent to directly specifying
+ the mediators of the main sequence within the <definitions> tags.
+ This is the recommended and also a better approach for non-trivial
+ configurations. Execute the 'ant stockquote ..' request again, and
+ following through the mediation logs you will now notice that the sequence
+ named "main" is executed. Then for the incoming message flow the <in>
+ mediator executes, and it calls into the sequence named "stockquote".
+ </p>
+<pre xml:space="preserve">ant stockquote -Daddurl=http://localhost:9000/soap/SimpleStockQuoteService -Dtrpurl=http://localhost:8080/</pre>
+<pre xml:space="preserve">DEBUG SequenceMediator - Sequence mediator <main> :: mediate()<br/>DEBUG InMediator - In mediator mediate()<br/>DEBUG SequenceMediator - Sequence mediator <stockquote> :: mediate()</pre>
+ <p>
+ As the "stockquote" sequence executes, the log mediator dumps a simple
+ text/string property, result of an XPath evaluation, that picks up the key
+ named "version", and a second result of an XPath evaluation that picks up
+ a local message property set previously by the <property> mediator.
+ The get-property() XPath extension function is able to read message
+ properties local to the current message, local or remote registry entries,
+ Axis2 message context properties as well as transport headers. The local
+ entry definition for "version" defines a simple text/string registry entry
+ for that which is visible to all messages that pass through Synapse.
+ </p>
+<pre xml:space="preserve">[HttpServerWorker-1] INFO LogMediator - Text = Sending quote request, version = 0.1, direction = incoming
[HttpServerWorker-1] DEBUG SendMediator - Send mediator :: mediate()
[HttpServerWorker-1] DEBUG AddressEndpoint - Sending To: http://localhost:9000/soap/SimpleStockQuoteService </pre>
-
-<h2><a name="Sample4">Sample 4: Introduction to error handling</a></h2>
-<pre><definitions xmlns="http://ws.apache.org/ns/synapse">
+ <h2>
+ <a name="Sample4" id="Sample4">Sample 4: Introduction to error handling</a>
+ </h2>
+<pre xml:space="preserve"><definitions xmlns="http://ws.apache.org/ns/synapse">
<!-- the default fault handling sequence used by Synapse - named 'fault' -->
<sequence name="fault">
@@ -588,42 +748,46 @@
</sequence>
</definitions> </pre>
-
-<p><strong>Objective: Introduction to error handling with the 'fault'
-sequence</strong></p>
-
-<p><strong>Prerequisites:</strong><br>
-Start the Synapse configuration numbered 4: i.e. synapse -sample 4<br>
-Start the Axis2 server and deploy the SimpleStockQuoteService if not already
-done</p>
-
-<p>When the IBM stock quote is requested, the configuration routes it to the
-defined inline endpoint, which routes the message to the
-SimpleStockQuoteService on the local Axis2 instance. Hence a valid response
-message is shown at the client.</p>
-
-<p>If you lookup a stock quote for 'MSFT', Synapse is instructed to route the
-message to the endpoint defined as the 'bogus' endpoint, which does not
-exist. Synapse executes the specified error handler sequence closest to the
-point where the error was encountered. In this case, the currently executing
-sequence is 'main' and it does not specify an 'onError' attribute. Whenever
-Synapse cannot find an error handler, it looks for a sequence named 'fault'.
-Thus the 'fault' sequence can be seen executing, and writing the generic
-error message to the logs. </p>
-<pre>ant stockquote -Daddurl=http://localhost:9000/soap/SimpleStockQuoteService -Dtrpurl=http://localhost:8080/ -Dsymbol=MSFT</pre>
-<pre>[HttpServerWorker-1] DEBUG SendMediator - Send mediator :: mediate()
+ <p>
+ <strong>Objective: Introduction to error handling with the 'fault'
+ sequence</strong>
+ </p>
+ <p>
+ <strong>Prerequisites:</strong><br/> Start the Synapse
+ configuration numbered 4: i.e. synapse -sample 4<br/> Start the Axis2
+ server and deploy the SimpleStockQuoteService if not already done
+ </p>
+ <p>
+ When the IBM stock quote is requested, the configuration routes it to the
+ defined inline endpoint, which routes the message to the
+ SimpleStockQuoteService on the local Axis2 instance. Hence a valid
+ response message is shown at the client.
+ </p>
+ <p>
+ If you lookup a stock quote for 'MSFT', Synapse is instructed to route the
+ message to the endpoint defined as the 'bogus' endpoint, which does not
+ exist. Synapse executes the specified error handler sequence closest to
+ the point where the error was encountered. In this case, the currently
+ executing sequence is 'main' and it does not specify an 'onError'
+ attribute. Whenever Synapse cannot find an error handler, it looks for a
+ sequence named 'fault'. Thus the 'fault' sequence can be seen executing,
+ and writing the generic error message to the logs.
+ </p>
+<pre xml:space="preserve">ant stockquote -Daddurl=http://localhost:9000/soap/SimpleStockQuoteService -Dtrpurl=http://localhost:8080/ -Dsymbol=MSFT</pre>
+<pre xml:space="preserve">[HttpServerWorker-1] DEBUG SendMediator - Send mediator :: mediate()
[HttpServerWorker-1] ERROR IndirectEndpoint - Reference to non-existent endpoint for key : bogus
[HttpServerWorker-1] DEBUG MediatorFaultHandler - MediatorFaultHandler :: handleFault
[HttpServerWorker-1] DEBUG SequenceMediator - Sequence mediator <fault> :: mediate()
[HttpServerWorker-1] DEBUG LogMediator - Log mediator :: mediate()
[HttpServerWorker-1] INFO LogMediator - text = An unexpected error occured, message = Reference to non-existent endpoint for key : bogus</pre>
-
-<p>When the 'SUN' quote is requested, a custom sequence 'sunSequence' is
-invoked, and it specifies 'sunErrorHandler' as its error handler. Hence when
-the send fails, you could see the proper error handler invocation and the
-custom error message printed as follows.</p>
-<pre>ant stockquote -Daddurl=http://localhost:9000/soap/SimpleStockQuoteService -Dtrpurl=http://localhost:8080/ -Dsymbol=SUN</pre>
-<pre>[HttpServerWorker-1] DEBUG SequenceMediator - Sequence mediator <sunSequence> :: mediate()
+ <p>
+ When the 'SUN' quote is requested, a custom sequence 'sunSequence' is
+ invoked, and it specifies 'sunErrorHandler' as its error handler. Hence
+ when the send fails, you could see the proper error handler invocation and
+ the custom error message printed as follows.
+ </p>
+<pre xml:space="preserve">ant stockquote -Daddurl=http://localhost:9000/soap/SimpleStockQuoteService -Dtrpurl=http://localhost:8080/ -Dsymbol=SUN</pre>
+<pre xml:space="preserve">[HttpServerWorker-1] DEBUG SequenceMediator - Sequence mediator <sunSequence> :: mediate()
[HttpServerWorker-1] DEBUG SequenceMediator - Setting the onError handler for the sequence
[HttpServerWorker-1] DEBUG AbstractListMediator - Implicit Sequence <SequenceMediator> :: mediate()
[HttpServerWorker-1] DEBUG SendMediator - Send mediator :: mediate()
@@ -633,10 +797,11 @@
[HttpServerWorker-1] DEBUG AbstractListMediator - Implicit Sequence <SequenceMediator> :: mediate()
[HttpServerWorker-1] DEBUG LogMediator - Log mediator :: mediate()
[HttpServerWorker-1] INFO LogMediator - text = An unexpected error occured for stock SUN, message = Reference to non-existent endpoint for key : sunPort</pre>
-
-<h2><a name="Sample5">Sample 5: Creating SOAP fault messages and changing the
-direction of a message</a></h2>
-<pre><definitions xmlns="http://ws.apache.org/ns/synapse">
+ <h2>
+ <a name="Sample5" id="Sample5">Sample 5: Creating SOAP fault messages
+ and changing the direction of a message</a>
+ </h2>
+<pre xml:space="preserve"><definitions xmlns="http://ws.apache.org/ns/synapse">
<sequence name="myFaultHandler">
<makefault>
@@ -673,58 +838,67 @@
</sequence>
</definitions></pre>
-
-<p><strong>Objective: Makefault mediator and sending back error responses
-</strong></p>
-
-<p><strong>Prerequisites:</strong><br>
-Start the Synapse configuration numbered 5: i.e. synapse -sample 5<br>
-Start the Axis2 server and deploy the SimpleStockQuoteService if not already
-done</p>
-
-<p>When the MSFT stock quote is requested, an unknown host exception would be
-generated. A connection refused exception would be generated for the SUN
-stock request. This error message is captured and returned to the original
-client as a SOAP fault in this example.</p>
-<pre>ant stockquote -Daddurl=http://localhost:9000/soap/SimpleStockQuoteService -Dtrpurl=http://localhost:8080/ -Dsymbol=MSFT</pre>
-
-<p>returns,</p>
-<pre><soapenv:Fault xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"><faultcode>soapenv:Client</faultcode>
+ <p>
+ <strong>Objective: Makefault mediator and sending back error responses
+ </strong>
+ </p>
+ <p>
+ <strong>Prerequisites:</strong><br/> Start the Synapse
+ configuration numbered 5: i.e. synapse -sample 5<br/> Start the Axis2
+ server and deploy the SimpleStockQuoteService if not already done
+ </p>
+ <p>
+ When the MSFT stock quote is requested, an unknown host exception would be
+ generated. A connection refused exception would be generated for the SUN
+ stock request. This error message is captured and returned to the original
+ client as a SOAP fault in this example.
+ </p>
+<pre xml:space="preserve">ant stockquote -Daddurl=http://localhost:9000/soap/SimpleStockQuoteService -Dtrpurl=http://localhost:8080/ -Dsymbol=MSFT</pre>
+ <p>
+ returns,
+ </p>
+<pre xml:space="preserve"><soapenv:Fault xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"><faultcode>soapenv:Client</faultcode>
<faultstring>java.net.UnknownHostException: bogus</faultstring><detail /></soapenv:Fault></pre>
-
-<p>And</p>
-<pre>ant stockquote -Daddurl=http://localhost:9000/soap/SimpleStockQuoteService -Dtrpurl=http://localhost:8080/ -Dsymbol=SUN</pre>
-
-<p>returns,</p>
-<pre><soapenv:Fault xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"><faultcode>soapenv:Client</faultcode>
+ <p>
+ And
+ </p>
+<pre xml:space="preserve">ant stockquote -Daddurl=http://localhost:9000/soap/SimpleStockQuoteService -Dtrpurl=http://localhost:8080/ -Dsymbol=SUN</pre>
+ <p>
+ returns,
+ </p>
+<pre xml:space="preserve"><soapenv:Fault xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"><faultcode>soapenv:Client</faultcode>
<faultstring>java.net.ConnectException: Connection refused</faultstring><detail /></soapenv:Fault></pre>
-
-<h2><a name="Sample6">Sample 6: Manipulating SOAP headers, and filtering
-incoming and outgoing messages</a></h2>
-<pre><definitions xmlns="http://ws.apache.org/ns/synapse">
+ <h2>
+ <a name="Sample6" id="Sample6">Sample 6: Manipulating SOAP headers, and
+ filtering incoming and outgoing messages</a>
+ </h2>
+<pre xml:space="preserve"><definitions xmlns="http://ws.apache.org/ns/synapse">
<in>
<header name="To" value="http://localhost:9000/soap/SimpleStockQuoteService"/>
</in>
<send/>
</definitions></pre>
-
-<p><strong>Objective: Introduction to header, in (out) mediators</strong></p>
-
-<p><strong>Prerequisites:</strong><br>
-Start the Synapse configuration numbered 6: i.e. synapse -sample 6<br>
-Start the Axis2 server and deploy the SimpleStockQuoteService if not already
-done</p>
-
-<p>In this example we use the stockquote client in the dumb client mode,
-setting the 'To' EPR of the message to Synapse. Then the 'in' mediator
-processes the incoming messages, and manipulates the 'To' header to refer to
-the stock quote service on the sample Axis2 server. Thus it is now possible
-to request for a stock quote as follows.</p>
-<pre>ant stockquote -Dtrpurl=http://localhost:8080/</pre>
-
-<h2><a name="Sample7">Sample 7: Introduction to local Registry entries and
-using Schema validation</a></h2>
-<pre><definitions xmlns="http://ws.apache.org/ns/synapse">
+ <p>
+ <strong>Objective: Introduction to header, in (out) mediators</strong>
+ </p>
+ <p>
+ <strong>Prerequisites:</strong><br/> Start the Synapse
+ configuration numbered 6: i.e. synapse -sample 6<br/> Start the Axis2
+ server and deploy the SimpleStockQuoteService if not already done
+ </p>
+ <p>
+ In this example we use the stockquote client in the dumb client mode,
+ setting the 'To' EPR of the message to Synapse. Then the 'in' mediator
+ processes the incoming messages, and manipulates the 'To' header to refer
+ to the stock quote service on the sample Axis2 server. Thus it is now
+ possible to request for a stock quote as follows.
+ </p>
+<pre xml:space="preserve">ant stockquote -Dtrpurl=http://localhost:8080/</pre>
+ <h2>
+ <a name="Sample7" id="Sample7">Sample 7: Introduction to local Registry
+ entries and using Schema validation</a>
+ </h2>
+<pre xml:space="preserve"><definitions xmlns="http://ws.apache.org/ns/synapse">
<localEntry key="validate_schema">
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
@@ -764,38 +938,43 @@
</in>
<send/>
</definitions> </pre>
-
-<p><strong>Objective: Introduction to local (static) registry entries and the
-validate mediator</strong></p>
-
-<p><strong>Prerequisites:</strong><br>
-Start the Synapse configuration numbered 7: i.e. synapse -sample 7<br>
-Start the Axis2 server and deploy the SimpleStockQuoteService if not already
-done</p>
-
-<p>This example shows how a static XML fragment could be made available to
-the Synapse local registry. Resources defined in the local registry are
-static (i.e. never changes over the lifetime of the configuration) and may be
-specified as a source URL, inline text or inline xml. In this example the
-schema is made available under the key 'validate_schema'.</p>
-
-<p>The validate mediator by default operates on the first child element of
-the SOAP body. You may specify an XPath expression using the 'source'
-attribute to override this behaviour. The validate mediator now uses the
-'validate_schema' resource to validate the incoming message, and if the
-message validatation fails it invokes the 'on-fail' sequence of mediators.</p>
-
-<p>If you send a stockquote request using 'ant stockquote ...' you will get a
-fault back with the message 'Invalid custom quote request' as the schema
-validation failed. This is because the schema used in the example expects a
-slightly different message than what is created by the stock quote client.
-(i.e. expects a 'stocksymbol' element instead of 'symbol' to specify thestock
-symbol)</p>
-<pre>ant stockquote -Daddurl=http://localhost:9000/soap/SimpleStockQuoteService -Dtrpurl=http://localhost:8080/</pre>
-
-<h2><a name="Sample8">Sample 8: Introduction to static and dynamic registry
-resources, and using XSLT transformations</a></h2>
-<pre><definitions xmlns="http://ws.apache.org/ns/synapse">
+ <p>
+ <strong>Objective: Introduction to local (static) registry entries and
+ the validate mediator</strong>
+ </p>
+ <p>
+ <strong>Prerequisites:</strong><br/> Start the Synapse
+ configuration numbered 7: i.e. synapse -sample 7<br/> Start the Axis2
+ server and deploy the SimpleStockQuoteService if not already done
+ </p>
+ <p>
+ This example shows how a static XML fragment could be made available to
+ the Synapse local registry. Resources defined in the local registry are
+ static (i.e. never changes over the lifetime of the configuration) and may
+ be specified as a source URL, inline text or inline xml. In this example
+ the schema is made available under the key 'validate_schema'.
+ </p>
+ <p>
+ The validate mediator by default operates on the first child element of
+ the SOAP body. You may specify an XPath expression using the 'source'
+ attribute to override this behaviour. The validate mediator now uses the
+ 'validate_schema' resource to validate the incoming message, and if the
+ message validatation fails it invokes the 'on-fail' sequence of mediators.
+ </p>
+ <p>
+ If you send a stockquote request using 'ant stockquote ...' you will get a
+ fault back with the message 'Invalid custom quote request' as the schema
+ validation failed. This is because the schema used in the example expects
+ a slightly different message than what is created by the stock quote
+ client. (i.e. expects a 'stocksymbol' element instead of 'symbol' to
+ specify thestock symbol)
+ </p>
+<pre xml:space="preserve">ant stockquote -Daddurl=http://localhost:9000/soap/SimpleStockQuoteService -Dtrpurl=http://localhost:8080/</pre>
+ <h2>
+ <a name="Sample8" id="Sample8">Sample 8: Introduction to static and
+ dynamic registry resources, and using XSLT transformations</a>
+ </h2>
+<pre xml:space="preserve"><definitions xmlns="http://ws.apache.org/ns/synapse">
<!-- the SimpleURLRegistry allows access to a URL based registry (e.g. file:/// or http://) -->
<registry provider="org.apache.synapse.registry.url.SimpleURLRegistry">
@@ -819,90 +998,102 @@
</out>
<send/>
</definitions></pre>
-
-<p><strong>Objective: Introduction to static and dynamic registry resources
-and the XSLT mediator</strong></p>
-
-<p><strong>Prerequisites:</strong><br>
-Start the Synapse configuration numbered 8: i.e. synapse -sample 8<br>
-Start the Axis2 server and deploy the SimpleStockQuoteService if not already
-done</p>
-
-<p>This example uses the XSLT mediator to perform transformations, and the
-xslt tranformations are specified as registry resources. The first resource
-'xslt-key-req' is specified as a 'local' registry entry. Local entries do not
-place the resource on the registry, but simply make it available to the local
-configuration. If a local entry is defined with a key that already exists in
-the remote registry, the local entry will have higher preference and override
-the remote resource.</p>
-
-<p>In this example you will notice the new 'registry' definition. Synapse
-comes with a simple URL based registry implementation SimpleURLRegistry.
-During initialization of the registry, the SimpleURLRegistry expects to find
-a property named 'root', which specifies a prefix for the registry keys used
-later. When the SimpleURLRegistry is used, this root is prefixed to the entry
-keys to form the complete URL for the resource being looked up. The registry
-caches a resource once requested, and caches it internally for a specified
-duration. Once this period expires, it will reload the meta information about
-the resource and reload its cached copy if necessary, the next time the
-resource is requested.</p>
-
-<p>Hence the second XSLT resource key 'transform/transform_back.xslt'
-concatenated with the 'root' of the SimpleURLRegistry
-'file:repository/conf/sample/resources/' forms the complete URL of the
-resource as
-'file:repository/conf/sample/resources/transform/transform_back.xslt' and
-caches its value for a period of 15000 ms.</p>
-
-<p>Execute the custom quote client as 'ant stockquote -Dmode=customquote ...'
-and analyze the the Synapse debug log output</p>
-<pre>ant stockquote -Daddurl=http://localhost:9000/soap/SimpleStockQuoteService -Dtrpurl=http://localhost:8080/ -Dmode=customquote</pre>
-
-<p>The incoming message is now transformed into a standard stock quote
-request as expected by the SimpleStockQuoteService deployed on the local
-Axis2 instance, by the XSLT mediator. The XSLT mediator uses Xalan-J to
-perform the transformations. It is possible to configure the underlying
-transformation engine using properties where necessary. The response from the
-SimpleStockQuoteService is converted back into the custom format as expected
-by the client during the out message processing.</p>
-
-<p>During the response processing you could see the SimpleURLRegistry
-fetching the resource as shown by the log message below</p>
-<pre>[HttpClientWorker-1] INFO SimpleURLRegistry - ==> Repository fetch of resource with key : transform/transform_back.xslt</pre>
-
-<p>If you run the client again immediately (i.e within 15 seconds of the
-first request) you will not see the resource being reloaded by the registry
-as the cached value would be still valid.</p>
-
-<p>However if you leave the system idle for 15 seconds or more and then retry
-the same request, you will now notice that the registry noticed the cached
-resource has expired and will check the meta information about the resource
-to check if the resource itself has changed and will require a fresh fetch
-from the source URL. If the meta data / version number indicates that a
-reload of the cached resource is not necessary (i.e. unless the resource
-itself actually changed) the updated meta information is used and the cache
-lease extended as appropriate.</p>
-<pre>[HttpClientWorker-1] DEBUG AbstractRegistry - Cached object has expired for key : transform/transform_back.xslt
+ <p>
+ <strong>Objective: Introduction to static and dynamic registry
+ resources and the XSLT mediator</strong>
+ </p>
+ <p>
+ <strong>Prerequisites:</strong><br/> Start the Synapse
+ configuration numbered 8: i.e. synapse -sample 8<br/> Start the Axis2
+ server and deploy the SimpleStockQuoteService if not already done
+ </p>
+ <p>
+ This example uses the XSLT mediator to perform transformations, and the
+ xslt tranformations are specified as registry resources. The first
+ resource 'xslt-key-req' is specified as a 'local' registry entry. Local
+ entries do not place the resource on the registry, but simply make it
+ available to the local configuration. If a local entry is defined with a
+ key that already exists in the remote registry, the local entry will have
+ higher preference and override the remote resource.
+ </p>
+ <p>
+ In this example you will notice the new 'registry' definition. Synapse
+ comes with a simple URL based registry implementation SimpleURLRegistry.
+ During initialization of the registry, the SimpleURLRegistry expects to
+ find a property named 'root', which specifies a prefix for the registry
+ keys used later. When the SimpleURLRegistry is used, this root is prefixed
+ to the entry keys to form the complete URL for the resource being looked
+ up. The registry caches a resource once requested, and caches it
+ internally for a specified duration. Once this period expires, it will
+ reload the meta information about the resource and reload its cached copy
+ if necessary, the next time the resource is requested.
+ </p>
+ <p>
+ Hence the second XSLT resource key 'transform/transform_back.xslt'
+ concatenated with the 'root' of the SimpleURLRegistry
+ 'file:repository/conf/sample/resources/' forms the complete URL of the
+ resource as
+ 'file:repository/conf/sample/resources/transform/transform_back.xslt' and
+ caches its value for a period of 15000 ms.
+ </p>
+ <p>
+ Execute the custom quote client as 'ant stockquote -Dmode=customquote ...'
+ and analyze the the Synapse debug log output
+ </p>
+<pre xml:space="preserve">ant stockquote -Daddurl=http://localhost:9000/soap/SimpleStockQuoteService -Dtrpurl=http://localhost:8080/ -Dmode=customquote</pre>
+ <p>
+ The incoming message is now transformed into a standard stock quote
+ request as expected by the SimpleStockQuoteService deployed on the local
+ Axis2 instance, by the XSLT mediator. The XSLT mediator uses Xalan-J to
+ perform the transformations. It is possible to configure the underlying
+ transformation engine using properties where necessary. The response from
+ the SimpleStockQuoteService is converted back into the custom format as
+ expected by the client during the out message processing.
+ </p>
+ <p>
+ During the response processing you could see the SimpleURLRegistry
+ fetching the resource as shown by the log message below
+ </p>
+<pre xml:space="preserve">[HttpClientWorker-1] INFO SimpleURLRegistry - ==> Repository fetch of resource with key : transform/transform_back.xslt</pre>
+ <p>
+ If you run the client again immediately (i.e within 15 seconds of the
+ first request) you will not see the resource being reloaded by the
+ registry as the cached value would be still valid.
+ </p>
+ <p>
+ However if you leave the system idle for 15 seconds or more and then retry
+ the same request, you will now notice that the registry noticed the cached
+ resource has expired and will check the meta information about the
+ resource to check if the resource itself has changed and will require a
+ fresh fetch from the source URL. If the meta data / version number
+ indicates that a reload of the cached resource is not necessary (i.e.
+ unless the resource itself actually changed) the updated meta information
+ is used and the cache lease extended as appropriate.
+ </p>
+<pre xml:space="preserve">[HttpClientWorker-1] DEBUG AbstractRegistry - Cached object has expired for key : transform/transform_back.xslt
[HttpClientWorker-1] DEBUG SimpleURLRegistry - Perform RegistryEntry lookup for key : transform/transform_back.xslt
[HttpClientWorker-1] DEBUG AbstractRegistry - Expired version number is same as current version in registry
[HttpClientWorker-1] DEBUG AbstractRegistry - Renew cache lease for another 15s </pre>
-
-<p>Now edit the
-repository/conf/sample/resources/transform/transform_back.xslt file and add a
-blank line at the end. Now when you run the client again, and if the cache is
-expired, the resource would be re-fetched from its URL by the registry and
-this can be seen by the following debug log messages</p>
-<pre>[HttpClientWorker-1] DEBUG AbstractRegistry - Cached object has expired for key : transform/transform_back.xslt
+ <p>
+ Now edit the
+ repository/conf/sample/resources/transform/transform_back.xslt file and
+ add a blank line at the end. Now when you run the client again, and if the
+ cache is expired, the resource would be re-fetched from its URL by the
+ registry and this can be seen by the following debug log messages
+ </p>
+<pre xml:space="preserve">[HttpClientWorker-1] DEBUG AbstractRegistry - Cached object has expired for key : transform/transform_back.xslt
[HttpClientWorker-1] DEBUG SimpleURLRegistry - Perform RegistryEntry lookup for key : transform/transform_back.xslt
[HttpClientWorker-1] INFO SimpleURLRegistry - ==> Repository fetch of resource with key : transform/transform_back.xslt </pre>
-
-<p>Thus the SimpleURLRegistry allows resource to be cached, and updates
-detected so that the changes could be reloaded without restarting the Synapse
-instance.</p>
-
-<h2><a name="Sample9">Sample 9: Introduction to dynamic sequences with the
-Registry</a></h2>
-<pre><definitions xmlns="http://ws.apache.org/ns/synapse">
+ <p>
+ Thus the SimpleURLRegistry allows resource to be cached, and updates
+ detected so that the changes could be reloaded without restarting the
+ Synapse instance.
+ </p>
+ <h2>
+ <a name="Sample9" id="Sample9">Sample 9: Introduction to dynamic
+ sequences with the Registry</a>
+ </h2>
+<pre xml:space="preserve"><definitions xmlns="http://ws.apache.org/ns/synapse">
<registry provider="org.apache.synapse.registry.url.SimpleURLRegistry">
<parameter name="root">file:./repository/conf/sample/resources/</parameter>
<parameter name="cachableDuration">15000</parameter>
@@ -910,57 +1101,62 @@
<sequence key="sequence/dynamic_seq_1.xml"/>
</definitions> </pre>
-
-<p><strong>Objective: Introduction to dynamic sequences with a
-Registry</strong></p>
-
-<p><strong>Prerequisites:</strong><br>
-Start the Synapse configuration numbered 9: i.e. synapse -sample 9<br>
-Start the Axis2 server and deploy the SimpleStockQuoteService if not already
-done</p>
-
-<p>This example introduces the dynamic behaviour of Synapse through the use
-of a Registry. Synapse supports dynamic definitions for sequences and
-endpoints, and as seen before, for resources. In this example we define a
-Synapse configuration which references a sequence definition specified as a
-registry key. The registry key resolves to the actual content of the sequence
-which would be loaded dynamically by Synapse at runtime, and cached
-appropriately as per its definition in the registry. Once the cache expires,
-Synapse would recheck the meta information for the definition and re-load the
-sequence definition if necessary and re-cache it again.</p>
-
-<p>Once Synapse is started, execute the stock quote client as 'ant
-stockquote..'. You will notice that that Synapse fetches the definition of
-the sequence from the registry and executes its rules as follows:</p>
-<pre>ant stockquote -Daddurl=http://localhost:9000/soap/SimpleStockQuoteService -Dtrpurl=http://localhost:8080/</pre>
-<pre>[HttpServerWorker-1] INFO SimpleURLRegistry - ==> Repository fetch of resource with key : sequence/dynamic_seq_1.xml
+ <p>
+ <strong>Objective: Introduction to dynamic sequences with a Registry</strong>
+ </p>
+ <p>
+ <strong>Prerequisites:</strong><br/> Start the Synapse
+ configuration numbered 9: i.e. synapse -sample 9<br/> Start the Axis2
+ server and deploy the SimpleStockQuoteService if not already done
+ </p>
+ <p>
+ This example introduces the dynamic behaviour of Synapse through the use
+ of a Registry. Synapse supports dynamic definitions for sequences and
+ endpoints, and as seen before, for resources. In this example we define a
+ Synapse configuration which references a sequence definition specified as
+ a registry key. The registry key resolves to the actual content of the
+ sequence which would be loaded dynamically by Synapse at runtime, and
+ cached appropriately as per its definition in the registry. Once the cache
+ expires, Synapse would recheck the meta information for the definition and
+ re-load the sequence definition if necessary and re-cache it again.
+ </p>
+ <p>
+ Once Synapse is started, execute the stock quote client as 'ant
+ stockquote..'. You will notice that that Synapse fetches the definition of
+ the sequence from the registry and executes its rules as follows:
+ </p>
+<pre xml:space="preserve">ant stockquote -Daddurl=http://localhost:9000/soap/SimpleStockQuoteService -Dtrpurl=http://localhost:8080/</pre>
+<pre xml:space="preserve">[HttpServerWorker-1] INFO SimpleURLRegistry - ==> Repository fetch of resource with key : sequence/dynamic_seq_1.xml
...
[HttpServerWorker-1] DEBUG SequenceMediator - Sequence mediator <dynamic_sequence> :: mediate()
...
[HttpServerWorker-1] INFO LogMediator - message = *** Test Message 1 ***</pre>
-
-<p>Now if you execute the client immediately (i.e. within 15 seconds of the
-last execution) you will notice that the sequence was not reloaded. If you
-edit the sequence definition in
-repository/conf/sample/resources/sequence/dynamic_seq_1.xml (i.e. edit the
-log message to read as "*** Test Message 2 ***") and execute the client
-again, you will notice that the new message is not yet visible (i.e. if you
-execute this within 15 seconds of loading the resource for the first time)
-However, after 15 seconds elapsed since the original caching of the sequence,
-you will notice that the new sequence is loaded and executed by Synapse from
-the following log messages.</p>
-<pre>[HttpServerWorker-1] INFO SimpleURLRegistry - ==> Repository fetch of resource with key : sequence/dynamic_seq_1.xml
+ <p>
+ Now if you execute the client immediately (i.e. within 15 seconds of the
+ last execution) you will notice that the sequence was not reloaded. If you
+ edit the sequence definition in
+ repository/conf/sample/resources/sequence/dynamic_seq_1.xml (i.e. edit the
+ log message to read as "*** Test Message 2 ***") and execute the client
+ again, you will notice that the new message is not yet visible (i.e. if
+ you execute this within 15 seconds of loading the resource for the first
+ time) However, after 15 seconds elapsed since the original caching of the
+ sequence, you will notice that the new sequence is loaded and executed by
+ Synapse from the following log messages.
+ </p>
+<pre xml:space="preserve">[HttpServerWorker-1] INFO SimpleURLRegistry - ==> Repository fetch of resource with key : sequence/dynamic_seq_1.xml
...
[HttpServerWorker-1] DEBUG SequenceMediator - Sequence mediator <dynamic_sequence> :: mediate()
...
[HttpServerWorker-1] INFO LogMediator - message = *** Test Message 2 ***</pre>
-
-<p>The cache timeout could be tuned appropriately by configuring the URL
-registry to suite the environment and the needs.</p>
-
-<h2><a name="Sample10">Sample 10: Introduction to dynamic endpoints with the
-Registry</a></h2>
-<pre><definitions xmlns="http://ws.apache.org/ns/synapse">
+ <p>
+ The cache timeout could be tuned appropriately by configuring the URL
+ registry to suite the environment and the needs.
+ </p>
+ <h2>
+ <a name="Sample10" id="Sample10">Sample 10: Introduction to dynamic
+ endpoints with the Registry</a>
+ </h2>
+<pre xml:space="preserve"><definitions xmlns="http://ws.apache.org/ns/synapse">
<registry provider="org.apache.synapse.registry.url.SimpleURLRegistry">
<parameter name="root">file:repository/conf/sample/resources/</parameter>
@@ -976,97 +1172,111 @@
<send/>
</out>
</definitions> </pre>
-
-<p><strong>Objective: Introduction to dynamic endpoints with the
-Registry</strong></p>
-
-<p><strong>Prerequisites:</strong><br>
-Start the Synapse configuration numbered 10: i.e. synapse -sample 10<br>
-Start the Axis2 server and deploy the SimpleStockQuoteService if not already
-done<br>
-Start a second Axis2 server on http port 9001 and https port 9003 as
-follows:</p>
-<pre>./axis2server.sh -http 9001 -https 9003</pre>
-
-<p>This example introduces dynamic endpoints, where the definition of an
-endpoint is stored in the Registry. To follow this example execute the stock
-quote client as 'ant stockquote..' and see that the message is routed to the
-SimpleStockQuoteService on the default Axis2 instance on http port 9000.
-Repeat the above example immediately again, and notice that the endpoint is
-cached and reused by Synapse - similarly to example # 8.</p>
-<pre>ant stockquote -Dtrpurl=http://localhost:8080/</pre>
-
-<p>Now edit the repository/conf/sample/resources/endpoint/dynamic_endpt_1.xml
-definition and update the address to
-"http://localhost:9001/soap/SimpleStockQuoteService". After the cached
-expires, the Registry loads the new definition of the endpoint, and then the
-messages can be seen being routed to the second sample Axis2 server on http
-port 9001.</p>
-
-<h2><a name="Sample11">Sample 11: A full registry based configuration, and
-sharing a configuration between multiple instances</a></h2>
-<pre><definitions xmlns="http://ws.apache.org/ns/synapse">
+ <p>
+ <strong>Objective: Introduction to dynamic endpoints with the Registry</strong>
+ </p>
+ <p>
+ <strong>Prerequisites:</strong><br/> Start the Synapse
+ configuration numbered 10: i.e. synapse -sample 10<br/> Start the Axis2
+ server and deploy the SimpleStockQuoteService if not already done<br/>
+ Start a second Axis2 server on http port 9001 and https port 9003 as
+ follows:
+ </p>
+<pre xml:space="preserve">./axis2server.sh -http 9001 -https 9003</pre>
+ <p>
+ This example introduces dynamic endpoints, where the definition of an
+ endpoint is stored in the Registry. To follow this example execute the
+ stock quote client as 'ant stockquote..' and see that the message is
+ routed to the SimpleStockQuoteService on the default Axis2 instance on
+ http port 9000. Repeat the above example immediately again, and notice
+ that the endpoint is cached and reused by Synapse - similarly to example #
+ 8.
+ </p>
+<pre xml:space="preserve">ant stockquote -Dtrpurl=http://localhost:8080/</pre>
+ <p>
+ Now edit the repository/conf/sample/resources/endpoint/dynamic_endpt_1.xml
+ definition and update the address to
+ "http://localhost:9001/soap/SimpleStockQuoteService". After the cached
+ expires, the Registry loads the new definition of the endpoint, and then
+ the messages can be seen being routed to the second sample Axis2 server on
+ http port 9001.
+ </p>
+ <h2>
+ <a name="Sample11" id="Sample11">Sample 11: A full registry based
+ configuration, and sharing a configuration between multiple instances</a>
+ </h2>
+<pre xml:space="preserve"><definitions xmlns="http://ws.apache.org/ns/synapse">
<registry provider="org.apache.synapse.registry.url.SimpleURLRegistry">
<parameter name="root">file:./repository/conf/sample/resources/</parameter>
<parameter name="cachableDuration">15000</parameter>
</registry>
</definitions> </pre>
-
-<p><strong>Objective: A full registry based configuration</strong></p>
-
-<p><strong>Prerequisites:</strong><br>
-Start the Synapse configuration numbered 11: i.e. synapse -sample 11<br>
-Start the Axis2 server and deploy the SimpleStockQuoteService if not already
-done</p>
-
-<p>This example shows a full registry based Synapse configuration. Thus it is
-possible to start a remote configuration from multiple instances of Synapse
-in a clustered environment easily. The Synapse configuration held on a node
-hosting Synapse simply points to the registry and looks up the actual
-configuration by requesting the key 'synapse.xml'. </p>
-
-<p>(Note: Full registry based configuration is not dynamic atleast for the
-moment. i.e. it is not reloading itself) </p>
-<pre>ant stockquote -Daddurl=http://localhost:9000/soap/SimpleStockQuoteService -Dtrpurl=http://localhost:8080/</pre>
-<pre>[HttpServerWorker-1] INFO LogMediator - message = This is a dynamic Synapse configuration</pre>
-
-<p>The actual synapse.xml loaded is:</p>
-<pre><!-- a registry based Synapse configuration -->
+ <p>
+ <strong>Objective: A full registry based configuration</strong>
+ </p>
+ <p>
+ <strong>Prerequisites:</strong><br/> Start the Synapse
+ configuration numbered 11: i.e. synapse -sample 11<br/> Start the Axis2
+ server and deploy the SimpleStockQuoteService if not already done
+ </p>
+ <p>
+ This example shows a full registry based Synapse configuration. Thus it is
+ possible to start a remote configuration from multiple instances of
+ Synapse in a clustered environment easily. The Synapse configuration held
+ on a node hosting Synapse simply points to the registry and looks up the
+ actual configuration by requesting the key 'synapse.xml'.
+ </p>
+ <p>
+ (Note: Full registry based configuration is not dynamic atleast for the
+ moment. i.e. it is not reloading itself)
+ </p>
+<pre xml:space="preserve">ant stockquote -Daddurl=http://localhost:9000/soap/SimpleStockQuoteService -Dtrpurl=http://localhost:8080/</pre>
+<pre xml:space="preserve">[HttpServerWorker-1] INFO LogMediator - message = This is a dynamic Synapse configuration</pre>
+ <p>
+ The actual synapse.xml loaded is:
+ </p>
+<pre xml:space="preserve"><!-- a registry based Synapse configuration -->
<definitions xmlns="http://ws.apache.org/ns/synapse">
<log level="custom">
<property name="message" value="This is a dynamic Synapse configuration $$$"/>
</log>
<send/>
</definitions></pre>
-
-<h2><a name="Sample12">Sample 12: One way messaging / fireAndForget through
-synapse</a></h2>
-
-<p><strong>Objective: Demonstrate one way messaging / fireAndForget through
-synapse</strong></p>
-
-<p><strong>Prerequisites:</strong><br>
-Start the Axis2 server and deploy the SimpleStockQuoteService (Refer steps
-above)<br>
-Start the Synapse configuration numbered 1: i.e. synapse -sample 1</p>
-
-<p>This example invokes the one-way 'placeOrder' operation on the
-SimpleStockQuoteService using the custom client which uses the Axis2
-ServiceClient.fireAndForget() API. To test this, use 'ant
--Dmode=placeorder...' and you will notice the one way message flowing through
-Synapse into the sample Axis2 server instance, which reports the acceptance
-of the order as follows:</p>
-<pre>ant stockquote -Daddurl=http://localhost:9000/soap/SimpleStockQuoteService -Dtrpurl=http://localhost:8080/ -Dmode=placeorder</pre>
-<pre>SimpleStockQuoteService :: Accepted order for : 7482 stocks of IBM at $ 169.27205579038733</pre>
-
-<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-turn replies to the client with a HTTP 202 acknowledgement</p>
-
-<h1><a name="Endpoints">Advanced mediations with endpoints</a></h1>
-
-<h2><a name="Sample50">Sample 50: POX to SOAP conversion</a></h2>
-<pre><definitions xmlns="http://ws.apache.org/ns/synapse">
+ <h2>
+ <a name="Sample12" id="Sample12">Sample 12: One way messaging /
+ fireAndForget through synapse</a>
+ </h2>
+ <p>
+ <strong>Objective: Demonstrate one way messaging / fireAndForget
+ through synapse</strong>
+ </p>
+ <p>
+ <strong>Prerequisites:</strong><br/> Start the Axis2 server
+ and deploy the SimpleStockQuoteService (Refer steps above)<br/> Start
+ the Synapse configuration numbered 1: i.e. synapse -sample 1
+ </p>
+ <p>
+ This example invokes the one-way 'placeOrder' operation on the
+ SimpleStockQuoteService using the custom client which uses the Axis2
+ ServiceClient.fireAndForget() API. To test this, use 'ant
+ -Dmode=placeorder...' and you will notice the one way message flowing
+ through Synapse into the sample Axis2 server instance, which reports the
+ acceptance of the order as follows:
+ </p>
+<pre xml:space="preserve">ant stockquote -Daddurl=http://localhost:9000/soap/SimpleStockQuoteService -Dtrpurl=http://localhost:8080/ -Dmode=placeorder</pre>
+<pre xml:space="preserve">SimpleStockQuoteService :: Accepted order for : 7482 stocks of IBM at $ 169.27205579038733</pre>
+ <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-turn replies to the client with a HTTP 202 acknowledgement
+ </p>
+ <h1>
+ <a name="Endpoints" id="Endpoints">Advanced mediations with endpoints</a>
+ </h1>
+ <h2>
+ <a name="Sample50" id="Sample50">Sample 50: POX to SOAP conversion</a>
+ </h2>
+<pre xml:space="preserve"><definitions xmlns="http://ws.apache.org/ns/synapse">
<!-- filtering of messages with XPath and regex matches -->
<filter source="get-property('To')" regex=".*/StockQuote.*">
<send>
@@ -1078,22 +1288,27 @@
</filter>
<send/>
</definitions> </pre>
-
-<p><strong>Objective: POX to SOAP conversion</strong></p>
-
-<p><strong>Prerequisites:</strong><br>
-Start the Synapse configuration numbered 50: i.e. synapse -sample 50</p>
-
-<p>Start the Axis2 server and deploy the SimpleStockQuoteService if not
-already done</p>
-
-<p>Execute the 'ant stockquote' specifying that the request should be a REST
-request as follows:</p>
-<pre>ant stockquote -Dtrpurl=http://localhost:8080/soap/StockQuote -Drest=true</pre>
-
-<p>This example shows a http REST request (as shown below) being transformed
-into a SOAP request and forwarded to the stock quote service. </p>
-<pre>POST /soap/StockQuote HTTP/1.1
+ <p>
+ <strong>Objective: POX to SOAP conversion</strong>
+ </p>
+ <p>
+ <strong>Prerequisites:</strong><br/> Start the Synapse
+ configuration numbered 50: i.e. synapse -sample 50
+ </p>
+ <p>
+ Start the Axis2 server and deploy the SimpleStockQuoteService if not
+ already done
+ </p>
+ <p>
+ Execute the 'ant stockquote' specifying that the request should be a REST
+ request as follows:
+ </p>
+<pre xml:space="preserve">ant stockquote -Dtrpurl=http://localhost:8080/soap/StockQuote -Drest=true</pre>
+ <p>
+ This example shows a http REST request (as shown below) being transformed
+ into a SOAP request and forwarded to the stock quote service.
+ </p>
+<pre xml:space="preserve">POST /soap/StockQuote HTTP/1.1
Content-Type: application/xml; charset=UTF-8;action="urn:getQuote";
SOAPAction: urn:getQuote
User-Agent: Axis2
@@ -1106,10 +1321,11 @@
<m0:symbol>IBM</m0:symbol>
</m0:request>
</m0:getQuote>0</pre>
-
-<h2><a name="Sample51">Sample 51: MTOM and SwA optimizations and
-request/response correlation</a></h2>
-<pre><definitions xmlns="http://ws.apache.org/ns/synapse">
+ <h2>
+ <a name="Sample51" id="Sample51">Sample 51: MTOM and SwA optimizations
+ and request/response correlation</a>
+ </h2>
+<pre xml:space="preserve"><definitions xmlns="http://ws.apache.org/ns/synapse">
<in>
<filter source="get-property('Action')" regex="urn:uploadFileUsingMTOM">
<property name="example" value="mtom"/>
@@ -1138,43 +1354,48 @@
<send/>
</out>
</definitions></pre>
-
-<p><strong>Objective: MTOM and SwA optimizations and request/response
-correlation</strong></p>
-
-<p><strong>Prerequisites:</strong><br>
-Start the Synapse configuration numbered 51: i.e. synapse -sample 51<br>
-Start the Axis2 server and deploy the MTOMSwASampleService if not already
-done</p>
-
-<p>Execute the 'ant optimizeclient' specifying MTOM optimization as
-follows:</p>
-<pre>ant optimizeclient -Dopt_mode=mtom</pre>
-
-<p>The configuration now sets a local message context property, and forwards
-the message to 'http://localhost:9000/soap/MTOMSwASampleService' optimizing
-binary content as MTOM. By sending this message through TCPMon you would be
-able to see the actual message sent over the http transport if required. Thus
-during response processing, by checking the local message property Synapse
-could identify the past information about the current message context, and
-uses this knowledge to transform the response back to the client in the same
-format as the original request.</p>
-
-<p>When the client executes successfully, it will upload a file containing
-the ASF logo and receive its response back again and save it into a temporary
-file.</p>
-<pre>[java] Sending file : ./../../repository/conf/sample/resources/mtom/asf-logo.gif as MTOM</pre>
-<pre>[java] Saved response to file : /tmp/mtom-36877.gif</pre>
-
-<p>Next try SwA as:</p>
-<pre>ant optimizeclient -Dopt_mode=swa</pre>
-<pre>[java] Sending file : ./../../repository/conf/sample/resources/mtom/asf-logo.gif as SwA
+ <p>
+ <strong>Objective: MTOM and SwA optimizations and request/response
+ correlation</strong>
+ </p>
+ <p>
+ <strong>Prerequisites:</strong><br/> Start the Synapse
+ configuration numbered 51: i.e. synapse -sample 51<br/> Start the Axis2
+ server and deploy the MTOMSwASampleService if not already done
+ </p>
+ <p>
+ Execute the 'ant optimizeclient' specifying MTOM optimization as follows:
+ </p>
+<pre xml:space="preserve">ant optimizeclient -Dopt_mode=mtom</pre>
+ <p>
+ The configuration now sets a local message context property, and forwards
+ the message to 'http://localhost:9000/soap/MTOMSwASampleService'
+ optimizing binary content as MTOM. By sending this message through TCPMon
+ you would be able to see the actual message sent over the http transport
+ if required. Thus during response processing, by checking the local
+ message property Synapse could identify the past information about the
+ current message context, and uses this knowledge to transform the response
+ back to the client in the same format as the original request.
+ </p>
+ <p>
+ When the client executes successfully, it will upload a file containing
+ the ASF logo and receive its response back again and save it into a
+ temporary file.
+ </p>
+<pre xml:space="preserve">[java] Sending file : ./../../repository/conf/sample/resources/mtom/asf-logo.gif as MTOM</pre>
+<pre xml:space="preserve">[java] Saved response to file : /tmp/mtom-36877.gif</pre>
+ <p>
+ Next try SwA as:
+ </p>
+<pre xml:space="preserve">ant optimizeclient -Dopt_mode=swa</pre>
+<pre xml:space="preserve">[java] Sending file : ./../../repository/conf/sample/resources/mtom/asf-logo.gif as SwA
[java] Saved response to file : /tmp/swa-47549.gif</pre>
-
-<p>By using TCPMon and sending the message through it, one can inspect that
-the requests and responses sent are indeed MTOM optimized or sent as http
-attachments as follows:</p>
-<pre>POST http://localhost:9000/soap/MTOMSwASampleService HTTP/1.1
+ <p>
+ By using TCPMon and sending the message through it, one can inspect that
+ the requests and responses sent are indeed MTOM optimized or sent as http
+ attachments as follows:
+ </p>
+<pre xml:space="preserve">POST http://localhost:9000/soap/MTOMSwASampleService HTTP/1.1
Host: 127.0.0.1
SOAPAction: urn:uploadFileUsingMTOM
Content-Type: multipart/related; boundary=MIMEBoundaryurn_uuid_B94996494E1DD5F9B51177413845353; type="application/xop+xml";
@@ -1205,7 +1426,7 @@
Content-Transfer-Encoding: binary
Content-ID:
<1.urn:uuid:78F94BC50B68D76FB41177413845003@apache.org>22800GIF89a... << binary content >></pre>
[... 3786 lines stripped ...]
---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@synapse.apache.org
For additional commands, e-mail: dev-help@synapse.apache.org