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
*