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
*