You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@synapse.apache.org by su...@apache.org on 2011/01/31 08:10:08 UTC

svn commit: r1065495 - in /synapse/trunk/java/modules/core/src/main/java/org/apache/synapse: core/axis2/Axis2FlexibleMEPClient.java endpoints/EndpointDefinition.java

Author: supun
Date: Mon Jan 31 07:10:07 2011
New Revision: 1065495

URL: http://svn.apache.org/viewvc?rev=1065495&view=rev
Log:
adding support for calculating the endpoint address dynamically. Refer Jira SYNAPSE-727

Modified:
    synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/core/axis2/Axis2FlexibleMEPClient.java
    synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/endpoints/EndpointDefinition.java

Modified: synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/core/axis2/Axis2FlexibleMEPClient.java
URL: http://svn.apache.org/viewvc/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/core/axis2/Axis2FlexibleMEPClient.java?rev=1065495&r1=1065494&r2=1065495&view=diff
==============================================================================
--- synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/core/axis2/Axis2FlexibleMEPClient.java (original)
+++ synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/core/axis2/Axis2FlexibleMEPClient.java Mon Jan 31 07:10:07 2011
@@ -101,7 +101,7 @@ public class Axis2FlexibleMEPClient {
         if (log.isDebugEnabled()) {
             String to;
             if (endpoint != null && endpoint.getAddress() != null) {
-                to = endpoint.getAddress();
+                to = endpoint.getAddress(synapseOutMessageContext);
             } else {
                 to = synapseOutMessageContext.getTo().toString();
             }
@@ -221,13 +221,16 @@ public class Axis2FlexibleMEPClient {
             if (endpoint.getAddress() != null) {
                 if (isRest && restSuffix != null && !"".equals(restSuffix)) {
                     axisOutMsgCtx.setTo(
-                            new EndpointReference(endpoint.getAddress() + restSuffix));
+                            new EndpointReference(
+                                    endpoint.getAddress(synapseOutMessageContext) + restSuffix));
 
                 } else {
-                    axisOutMsgCtx.setTo(new EndpointReference(endpoint.getAddress()));
+                    axisOutMsgCtx.setTo(
+                            new EndpointReference(endpoint.getAddress(synapseOutMessageContext)));
                 }
 
-                axisOutMsgCtx.setProperty(NhttpConstants.ENDPOINT_PREFIX, endpoint.getAddress());
+                axisOutMsgCtx.setProperty(NhttpConstants.ENDPOINT_PREFIX,
+                        endpoint.getAddress(synapseOutMessageContext));
             } else {
                 // Supporting RESTful invocation
                 if (isRest && restSuffix != null && !"".equals(restSuffix)) {
@@ -413,9 +416,11 @@ public class Axis2FlexibleMEPClient {
             if ( (rm11 != null) && rm11.equals(Sandesha2Constants.SPEC_VERSIONS.v1_1)){
                 ServiceClient serviceClient = new ServiceClient(
                         axisOutMsgCtx.getConfigurationContext(), axisOutMsgCtx.getAxisService());
-                serviceClient.setTargetEPR(new EndpointReference(endpoint.getAddress()));
+                serviceClient.setTargetEPR(
+                        new EndpointReference(endpoint.getAddress(synapseOutMessageContext)));
                 serviceClient.setOptions(clientOptions);
-                serviceClient.getOptions().setTo(new EndpointReference(endpoint.getAddress()));
+                serviceClient.getOptions().setTo(
+                        new EndpointReference(endpoint.getAddress(synapseOutMessageContext)));
                 SandeshaClient.terminateSequence(serviceClient);
             }
         }

Modified: synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/endpoints/EndpointDefinition.java
URL: http://svn.apache.org/viewvc/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/endpoints/EndpointDefinition.java?rev=1065495&r1=1065494&r2=1065495&view=diff
==============================================================================
--- synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/endpoints/EndpointDefinition.java (original)
+++ synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/endpoints/EndpointDefinition.java Mon Jan 31 07:10:07 2011
@@ -19,12 +19,15 @@
 
 package org.apache.synapse.endpoints;
 
+import org.apache.synapse.MessageContext;
 import org.apache.synapse.SynapseConstants;
 import org.apache.synapse.aspects.AspectConfigurable;
 import org.apache.synapse.aspects.AspectConfiguration;
 
 import java.util.ArrayList;
 import java.util.List;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
 
 
 /**
@@ -166,6 +169,47 @@ public class EndpointDefinition implemen
         return address;
     }
 
+
+    /**
+     * This should return the absolute EPR address referenced by the named endpoint. This may be
+     * possibly computed if the ${} properties specified in the URL.
+     *
+     * @param messageContext the current message context against the address is computed
+     * @return an absolute address to be used to reference the named endpoint
+     */
+    public String getAddress(MessageContext messageContext) {
+        if (address == null) {
+            return null;
+        }
+
+        boolean matches = false;
+        int s = 0;
+        Pattern pattern = Pattern.compile("\\$\\{.*?\\}");
+
+        StringBuffer computedAddress = new StringBuffer();
+
+        Matcher matcher = pattern.matcher(address);
+        while (matcher.find()) {
+
+
+            Object property = messageContext.getProperty(
+                    address.substring(matcher.start() + 2, matcher.end() - 1));
+            if (property != null) {
+                computedAddress.append(address.substring(s, matcher.start()));
+                computedAddress.append(property.toString());
+                s = matcher.end();
+                matches = true;
+            }
+        }
+
+        if (!matches) {
+            return address;
+        } else {
+            computedAddress.append(address.substring(s, address.length()));
+            return computedAddress.toString();
+        }
+    }
+
     /**
      * Set an absolute URL as the address for this named endpoint
      *