You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@synapse.apache.org by us...@apache.org on 2011/12/20 04:49:41 UTC

svn commit: r1221091 - in /synapse/trunk/java: modules/core/src/main/java/org/apache/synapse/mediators/ repository/conf/sample/ repository/conf/sample/resources/recipients/ src/site/xdoc/

Author: uswick
Date: Tue Dec 20 03:49:40 2011
New Revision: 1221091

URL: http://svn.apache.org/viewvc?rev=1221091&view=rev
Log:
committing samples related to Recipient List..jira- SYNAPSE-808

Added:
    synapse/trunk/java/repository/conf/sample/resources/recipients/
    synapse/trunk/java/repository/conf/sample/resources/recipients/EP_LIST
    synapse/trunk/java/repository/conf/sample/synapse_sample_61.xml
    synapse/trunk/java/repository/conf/sample/synapse_sample_62.xml
    synapse/trunk/java/repository/conf/sample/synapse_sample_63.xml
Modified:
    synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/mediators/GetPropertyFunction.java
    synapse/trunk/java/src/site/xdoc/Synapse_Samples.xml

Modified: synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/mediators/GetPropertyFunction.java
URL: http://svn.apache.org/viewvc/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/mediators/GetPropertyFunction.java?rev=1221091&r1=1221090&r2=1221091&view=diff
==============================================================================
--- synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/mediators/GetPropertyFunction.java (original)
+++ synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/mediators/GetPropertyFunction.java Tue Dec 20 03:49:40 2011
@@ -38,6 +38,11 @@ import org.jaxen.FunctionCallException;
 import org.jaxen.Navigator;
 import org.jaxen.function.StringFunction;
 
+import javax.activation.DataHandler;
+import java.io.BufferedInputStream;
+import java.io.BufferedReader;
+import java.io.IOException;
+import java.io.InputStreamReader;
 import java.text.Format;
 import java.text.SimpleDateFormat;
 import java.util.List;
@@ -319,7 +324,24 @@ public class GetPropertyFunction impleme
                     }
                 } else if (propEntry.getValue() != null) {
                     if (propEntry.getValue() instanceof OMText) {
-                        return ((OMText) propEntry.getValue()).getText();
+                        OMText omText = (OMText) propEntry.getValue();
+                        DataHandler dh = (DataHandler) omText.getDataHandler();
+                        if (omText.getDataHandler() != null) {
+                            try {
+                                InputStreamReader streamReader = new InputStreamReader(dh.getInputStream());
+                                BufferedReader stringReader = new BufferedReader(streamReader);
+                                String omTextString = NULL_STRING;
+                                String tempStr;
+                                while ((tempStr = stringReader.readLine()) != null) {
+                                    omTextString = omTextString + tempStr;
+                                }
+                                return omTextString;
+                            } catch (IOException e) {
+                                return NULL_STRING;
+                            }
+                        } else {
+                            omText.getText();
+                        }
                     }
                     return propEntry.getValue().toString();
                 }

Added: synapse/trunk/java/repository/conf/sample/resources/recipients/EP_LIST
URL: http://svn.apache.org/viewvc/synapse/trunk/java/repository/conf/sample/resources/recipients/EP_LIST?rev=1221091&view=auto
==============================================================================
--- synapse/trunk/java/repository/conf/sample/resources/recipients/EP_LIST (added)
+++ synapse/trunk/java/repository/conf/sample/resources/recipients/EP_LIST Tue Dec 20 03:49:40 2011
@@ -0,0 +1 @@
+http://localhost:9001/services/SimpleStockQuoteService,http://localhost:9002/services/SimpleStockQuoteService,http://localhost:9003/services/SimpleStockQuoteService

Added: synapse/trunk/java/repository/conf/sample/synapse_sample_61.xml
URL: http://svn.apache.org/viewvc/synapse/trunk/java/repository/conf/sample/synapse_sample_61.xml?rev=1221091&view=auto
==============================================================================
--- synapse/trunk/java/repository/conf/sample/synapse_sample_61.xml (added)
+++ synapse/trunk/java/repository/conf/sample/synapse_sample_61.xml Tue Dec 20 03:49:40 2011
@@ -0,0 +1,55 @@
+<?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.
+  -->
+
+<!--Routing message to 3 static recipients-->        
+<definitions xmlns="http://ws.apache.org/ns/synapse">
+
+    <sequence name="main" onError="errorHandler">
+        <in>
+            <property name="OUT_ONLY" value="true" />
+            <property name="FORCE_SC_ACCEPTED" scope="axis2" value="true" />	
+            <send>
+                <endpoint>
+                    <!--List of Recipients (static)--> 
+                    <recipientlist>
+                        <endpoint>
+                            <address uri="http://localhost:9001/services/SimpleStockQuoteService"/>
+                        </endpoint>
+                        <endpoint>
+                            <address uri="http://localhost:9002/services/SimpleStockQuoteService"/>
+                        </endpoint>
+			<endpoint>
+                            <address uri="http://localhost:9003/services/SimpleStockQuoteService"/>
+                        </endpoint>
+                    </recipientlist>
+                </endpoint>
+            </send>
+            <drop/>
+        </in>
+    </sequence>
+
+    <sequence name="errorHandler">
+        <makefault response="true">
+            <code xmlns:tns="http://www.w3.org/2003/05/soap-envelope" value="tns:Receiver"/>
+            <reason value="COULDN'T SEND THE MESSAGE TO THE SERVER."/>
+        </makefault>
+        <send/>
+    </sequence>
+</definitions>

Added: synapse/trunk/java/repository/conf/sample/synapse_sample_62.xml
URL: http://svn.apache.org/viewvc/synapse/trunk/java/repository/conf/sample/synapse_sample_62.xml?rev=1221091&view=auto
==============================================================================
--- synapse/trunk/java/repository/conf/sample/synapse_sample_62.xml (added)
+++ synapse/trunk/java/repository/conf/sample/synapse_sample_62.xml Tue Dec 20 03:49:40 2011
@@ -0,0 +1,54 @@
+<?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.
+  -->
+<!--Routing message to dynamic recipients-->        
+<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">
+        <!-- the root property of the simple URL registry helps resolve a resource URL as root + key -->
+        <parameter name="root">file:repository/conf/sample/resources/</parameter>
+        <!-- all resources loaded from the URL registry would be cached for this number of milli seconds -->
+        <parameter name="cachableDuration">15000</parameter>
+    </registry>  
+	
+    <sequence name="main" onError="errorHandler">
+        <in>
+            <property name="OUT_ONLY" value="true" />
+            <property name="FORCE_SC_ACCEPTED" scope="axis2" value="true" />	
+	    <!--Dynamic Reclipient List-->	
+            <send>
+                <endpoint>
+                    <recipientlist>
+                        <endpoints value="{get-property('registry','recipients/EP_LIST')}"/>
+                    </recipientlist>
+                </endpoint>
+            </send>
+            <drop/>
+        </in>
+    </sequence>
+
+    <sequence name="errorHandler">
+        <makefault response="true">
+            <code xmlns:tns="http://www.w3.org/2003/05/soap-envelope" value="tns:Receiver"/>
+            <reason value="COULDN'T SEND THE MESSAGE TO THE SERVER."/>
+        </makefault>
+        <send/>
+    </sequence>
+</definitions>

Added: synapse/trunk/java/repository/conf/sample/synapse_sample_63.xml
URL: http://svn.apache.org/viewvc/synapse/trunk/java/repository/conf/sample/synapse_sample_63.xml?rev=1221091&view=auto
==============================================================================
--- synapse/trunk/java/repository/conf/sample/synapse_sample_63.xml (added)
+++ synapse/trunk/java/repository/conf/sample/synapse_sample_63.xml Tue Dec 20 03:49:40 2011
@@ -0,0 +1,63 @@
+<?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.
+  -->
+<!--Route message to dynamic Recipients and aggregate their responses-->        
+<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">
+        <!-- the root property of the simple URL registry helps resolve a resource URL as root + key -->
+        <parameter name="root">file:repository/conf/sample/resources/</parameter>
+        <!-- all resources loaded from the URL registry would be cached for this number of milli seconds -->
+        <parameter name="cachableDuration">15000</parameter>
+    </registry>  
+     	
+    <sequence name="main" onError="errorHandler">
+        <in>
+	    <!--Dynamic Recipient List-->	
+            <send>
+                <endpoint>
+                   <recipientlist>
+                        <endpoints value="{get-property('registry','recipients/EP_LIST')}"/>
+                    </recipientlist>
+                </endpoint>
+            </send>
+            <drop/>
+        </in>
+
+        <out>
+	    <log level="full"/>
+	    <!--Aggregate responses-->
+            <aggregate> 
+              <onComplete xmlns:m0="http://services.samples"
+                          expression="//m0:getQuoteResponse">
+                 <send/>
+	      </onComplete>    		
+	    </aggregate>
+        </out>
+    </sequence>
+
+    <sequence name="errorHandler">
+        <makefault response="true">
+            <code xmlns:tns="http://www.w3.org/2003/05/soap-envelope" value="tns:Receiver"/>
+            <reason value="COULDN'T SEND THE MESSAGE TO THE SERVER."/>
+        </makefault>
+        <send/>
+    </sequence>
+</definitions>

Modified: synapse/trunk/java/src/site/xdoc/Synapse_Samples.xml
URL: http://svn.apache.org/viewvc/synapse/trunk/java/src/site/xdoc/Synapse_Samples.xml?rev=1221091&r1=1221090&r2=1221091&view=diff
==============================================================================
--- synapse/trunk/java/src/site/xdoc/Synapse_Samples.xml (original)
+++ synapse/trunk/java/src/site/xdoc/Synapse_Samples.xml Tue Dec 20 03:49:40 2011
@@ -173,7 +173,12 @@
 <a href="#Sample59">Sample 59: Weighted load balancing between 3 endpoints</a></li>
 <li>
 <a href="#Sample60">Sample 60: Service dynamic load balancing between 2 Service nodes</a></li>
-</ul></li>    
+<li>
+<a href="#Sample60">Sample 61: Routing a message to a static list of recipients</a></li>
+<li>
+<a href="#Sample61">Sample 62: Routing a message to a dynamic list of recipients</a></li>
+<li>
+<a href="#Sample62">Sample 63: Routing a message to a dynamic list of recipients and aggregating the responses</a></li></ul></li>
 <li>
 <a href="#MessageMediationQoS">Quality of Service addition or deduction samples in message mediation</a>
 <ul>
@@ -1968,6 +1973,190 @@ ant loadbalancefailover -Di=100 -Dtrpurl
 For the sake of simplicity, we have shown how to run this sample for one clustering domain at a time. However, you can make a copy of the axis2Server directory, and setup both domains simultaneously, and run the sample client to see how the requests are load balanced in a round-robin manner within each clustering domain.
 </p>
 
+
+<h2><a name="Sample61">Sample 61: Routing a message to a static list of recipients</a></h2>
+<pre xml:space="preserve">
+&lt;?xml version="1.0" encoding="UTF-8"?&gt;
+&lt;definitions xmlns="http://ws.apache.org/ns/synapse"&gt;
+
+    &lt;sequence name="main" onError="errorHandler"&gt;
+        &lt;in&gt;
+            &lt;send&gt;
+                &lt;endpoint&gt;
+                    &lt;!--List of Recipients (static)--&gt;
+                    &lt;recipientlist&gt;
+                        &lt;endpoint&gt;
+                            &lt;address uri="http://localhost:9001/services/SimpleStockQuoteService"/&gt;
+                        &lt;/endpoint&gt;
+                        &lt;endpoint&gt;
+                            &lt;address uri="http://localhost:9002/services/SimpleStockQuoteService"/&gt;
+                        &lt;/endpoint&gt;
+			&lt;endpoint&gt;
+                            &lt;address uri="http://localhost:9003/services/SimpleStockQuoteService"/&gt;
+                        &lt;/endpoint&gt;
+                    &lt;/recipientlist&gt;
+                &lt;/endpoint&gt;
+           &lt;/send&gt;
+            &lt;drop/&gt;
+        &lt;/in&gt;
+
+        &lt;out&gt;
+            &lt;log level="full"/&gt;
+            &lt;drop/&gt;
+        &lt;/out&gt;
+    &lt;/sequence&gt;
+
+    &lt;sequence name="errorHandler"&gt;
+        &lt;makefault response="true"&gt;
+            &lt;code xmlns:tns="http://www.w3.org/2003/05/soap-envelope" value="tns:Receiver"/&gt;
+            &lt;reason value="COULDN'T SEND THE MESSAGE TO THE SERVER."/&gt;
+        &lt;/makefault&gt;
+        &lt;send/&gt;
+    &lt;/sequence&gt;
+&lt;/definitions&gt;
+</pre>
+<p><strong>Objective: Demonstrate message routing to a set of
+static endpoints</strong> </p>
+
+<p><strong>Prerequisites:</strong> </p>
+
+<p>Start ESB with sample configuration 61. (i.e. synapse -sample 61) </p>
+
+<p>Deploy the SimpleStockQuoteService and start three instances of sample Axis2 server as mentioned in sample 52.</p>
+
+<p>Above configuration routes a cloned copy of a message to each recipient defined within the static recipient list.
+<br/>To test this, run the stockquote client to send an out-only message: </p>
+<pre xml:space="preserve">ant stockquote -Dmode=placeorder -Dtrpurl=http://localhost:8280/</pre>
+
+<p>This client sends a request to the SimpleStockQuoteService through the
+ESB. ESB will create cloned copies of the message and route to the three endpoints
+mentioned in the configuration. SimpleStockQuoteService prints the details of the placed
+order. If you examine the console output of each server, you can see that requests are
+processed by the three servers as follows: </p>
+<pre xml:space="preserve">Accepted order #1 for : 15738 stocks of IBM at $ 185.51155223506518
+</pre>
+
+<p>Now shutdown MyServer1 and resend the request. You will observe that requests are still processed by MyServer2 and MyServer3.</p>
+
+<h2><a name="Sample62">Sample 62: Routing a message to a dynamic list of recipients</a></h2>
+<pre xml:space="preserve">
+&lt;?xml version="1.0" encoding="UTF-8"?&gt;
+&lt;definitions xmlns=&quot;http://ws.apache.org/ns/synapse&quot;&gt;
+
+    &lt;!-- the SimpleURLRegistry allows access to a URL based registry (e.g. file:/// or http://) --&gt;
+    &lt;registry provider=&quot;org.apache.synapse.registry.url.SimpleURLRegistry&quot;&gt;
+        &lt;!-- the root property of the simple URL registry helps resolve a resource URL as root + key --&gt;
+        &lt;parameter name=&quot;root&quot;&gt;file:repository/conf/sample/resources/&lt;/parameter&gt;
+        &lt;!-- all resources loaded from the URL registry would be cached for this number of milli seconds --&gt;
+        &lt;parameter name=&quot;cachableDuration&quot;&gt;15000&lt;/parameter&gt;
+    &lt;/registry&gt;
+
+    &lt;sequence name=&quot;main&quot; onError=&quot;errorHandler&quot;&gt;
+        &lt;in&gt;
+            &lt;property name=&quot;OUT_ONLY&quot; value=&quot;true&quot; /&gt;
+            &lt;property name=&quot;FORCE_SC_ACCEPTED&quot; scope=&quot;axis2&quot; value=&quot;true&quot; /&gt;
+	    &lt;!--Dynamic Reclipient List--&gt;
+            &lt;send&gt;
+                &lt;endpoint&gt;
+                    &lt;recipientlist&gt;
+                        &lt;endpoints value=&quot;{get-property(&#39;registry&#39;,&#39;recipients/EP_LIST&#39;)}&quot;/&gt;
+                    &lt;/recipientlist&gt;
+                &lt;/endpoint&gt;
+            &lt;/send&gt;
+            &lt;drop/&gt;
+        &lt;/in&gt;
+    &lt;/sequence&gt;
+
+    &lt;sequence name=&quot;errorHandler&quot;&gt;
+        &lt;makefault response=&quot;true&quot;&gt;
+            &lt;code xmlns:tns=&quot;http://www.w3.org/2003/05/soap-envelope&quot; value=&quot;tns:Receiver&quot;/&gt;
+            &lt;reason value=&quot;COULDN&#39;T SEND THE MESSAGE TO THE SERVER.&quot;/&gt;
+        &lt;/makefault&gt;
+        &lt;send/&gt;
+    &lt;/sequence&gt;
+&lt;/definitions&gt;
+</pre>
+<p><strong>Objective: Demonstrate message routing to a set of
+dynamic endpoints</strong> </p>
+
+<p><strong>Prerequisites:</strong> </p>
+
+<p>Start ESB with sample configuration 62. (i.e. synapse -sample 62) </p>
+
+<p>Deploy the SimpleStockQuoteService and start three instances of sample Axis2 server as mentioned in sample 52.</p>
+
+<p>This sample does the same thing as in sample 60. The difference is that unlike in sample 60, this sample defines
+the endpoints as a dynamic list of recipients.
+<br/>To test this, run the stockquote client to send an out-only message: </p>
+<pre xml:space="preserve">ant stockquote -Dmode=placeorder -Dtrpurl=http://localhost:8280/</pre>
+
+<p>The behaviour of this sample should be similar to that of sample 60</p>
+
+<h2><a name="Sample63">Sample 63: Routing a message to a dynamic list of recipients and aggregating responses</a></h2>
+<pre xml:space="preserve">
+&lt;definitions xmlns=&quot;http://ws.apache.org/ns/synapse&quot;&gt;
+
+    &lt;!-- the SimpleURLRegistry allows access to a URL based registry (e.g. file:/// or http://) --&gt;
+    &lt;registry provider=&quot;org.apache.synapse.registry.url.SimpleURLRegistry&quot;&gt;
+        &lt;!-- the root property of the simple URL registry helps resolve a resource URL as root + key --&gt;
+        &lt;parameter name=&quot;root&quot;&gt;file:repository/conf/sample/resources/&lt;/parameter&gt;
+        &lt;!-- all resources loaded from the URL registry would be cached for this number of milli seconds --&gt;
+        &lt;parameter name=&quot;cachableDuration&quot;&gt;15000&lt;/parameter&gt;
+    &lt;/registry&gt;
+
+    &lt;sequence name=&quot;main&quot; onError=&quot;errorHandler&quot;&gt;
+        &lt;in&gt;
+	    &lt;!--Dynamic Recipient List--&gt;
+            &lt;send&gt;
+                &lt;endpoint&gt;
+                   &lt;recipientlist&gt;
+                        &lt;endpoints value=&quot;{get-property(&#39;registry&#39;,&#39;recipients/EP_LIST&#39;)}&quot;/&gt;
+                    &lt;/recipientlist&gt;
+                &lt;/endpoint&gt;
+            &lt;/send&gt;
+            &lt;drop/&gt;
+        &lt;/in&gt;
+
+        &lt;out&gt;
+	    &lt;log level=&quot;full&quot;/&gt;
+	    &lt;!--Aggregate responses--&gt;
+            &lt;aggregate&gt;
+              &lt;onComplete xmlns:m0=&quot;http://services.samples&quot;
+                          expression=&quot;//m0:getQuoteResponse&quot;&gt;
+                 &lt;send/&gt;
+	      &lt;/onComplete&gt;
+	    &lt;/aggregate&gt;
+        &lt;/out&gt;
+    &lt;/sequence&gt;
+
+    &lt;sequence name=&quot;errorHandler&quot;&gt;
+        &lt;makefault response=&quot;true&quot;&gt;
+            &lt;code xmlns:tns=&quot;http://www.w3.org/2003/05/soap-envelope&quot; value=&quot;tns:Receiver&quot;/&gt;
+            &lt;reason value=&quot;COULDN&#39;T SEND THE MESSAGE TO THE SERVER.&quot;/&gt;
+        &lt;/makefault&gt;
+        &lt;send/&gt;
+    &lt;/sequence&gt;
+&lt;/definitions&gt;
+</pre>
+<p><strong>Objective: Demonstrate message routing to a set of
+dynamic endpoints and aggregate responses</strong> </p>
+
+<p><strong>Prerequisites:</strong> </p>
+
+<p>Start ESB with sample configuration 63. (i.e. synapse -sample 63) </p>
+
+<p>Deploy the SimpleStockQuoteService and start three instances of sample Axis2 server as mentioned in sample 52.</p>
+
+<p>Above configuration routes a cloned copy of a message to each recipient defined within the dynamic recipient list.
+Each recipient will respond back with a stock quote. When all the responses appear to synapse those resonses will be
+aggregated to form the resultant response which will be sent back to the client.
+<br/>To test this, invoke the client as follows: </p>
+<pre xml:space="preserve">ant stockquote -Dtrpurl=http://localhost:8280/</pre>
+
+<p>If you sent your client request through a TCP based conversation monitoring tool such as TCPMon, you will notice the
+structrue of the aggregated response message.</p>
+
+
 <h1><a name="MessageMediationQoS" id="MessageMediationQoS">Quality of Service addition or deduction samples in message mediation</a> </h1>
 <h2>
 <a name="Sample100" id="Sample100">Sample 100: Using WS-Security for outgoing messages</a></h2>