You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@synapse.apache.org by ru...@apache.org on 2010/02/25 15:50:48 UTC
svn commit: r916303 - in
/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse:
config/xml/PropertyMediatorFactory.java
config/xml/PropertyMediatorSerializer.java
mediators/builtin/PropertyMediator.java
Author: ruwan
Date: Thu Feb 25 14:50:47 2010
New Revision: 916303
URL: http://svn.apache.org/viewvc?rev=916303&view=rev
Log:
Fixing the issue SYNAPSE-588, committing for Supun
Modified:
synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/PropertyMediatorFactory.java
synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/PropertyMediatorSerializer.java
synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/mediators/builtin/PropertyMediator.java
Modified: synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/PropertyMediatorFactory.java
URL: http://svn.apache.org/viewvc/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/PropertyMediatorFactory.java?rev=916303&r1=916302&r2=916303&view=diff
==============================================================================
--- synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/PropertyMediatorFactory.java (original)
+++ synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/PropertyMediatorFactory.java Thu Feb 25 14:50:47 2010
@@ -27,6 +27,7 @@
import org.jaxen.JaxenException;
import javax.xml.namespace.QName;
+import java.util.regex.Pattern;
/**
* Creates a property mediator through the supplied XML configuration
@@ -39,6 +40,8 @@
private static final QName ATT_SCOPE = new QName("scope");
private static final QName ATT_ACTION = new QName("action");
private static final QName ATT_TYPE = new QName("type");
+ private static final QName ATT_PATTERN = new QName("pattern");
+ private static final QName ATT_GROUP = new QName("group");
public Mediator createMediator(OMElement elem) {
@@ -49,6 +52,8 @@
OMAttribute scope = elem.getAttribute(ATT_SCOPE);
OMAttribute action = elem.getAttribute(ATT_ACTION);
OMAttribute type = elem.getAttribute(ATT_TYPE);
+ OMAttribute pattern = elem.getAttribute(ATT_PATTERN);
+ OMAttribute group = elem.getAttribute(ATT_GROUP);
OMElement valueElement = elem.getFirstElement();
@@ -86,6 +91,24 @@
}
}
+ if (pattern != null) {
+ propMediator.setPattern(Pattern.compile(pattern.getAttributeValue()));
+ if (group != null) {
+ int groupValue = Integer.parseInt(group.getAttributeValue());
+ if (groupValue >= 0) {
+ propMediator.setGroup(groupValue);
+ } else {
+ String msg = "group can have a positive value only";
+ log.error(msg);
+ throw new SynapseException(msg);
+ }
+ }
+ } else if (group != null) {
+ String msg = "group is only allowed when a pattern is specified";
+ log.error(msg);
+ throw new SynapseException(msg);
+ }
+
// The action attribute is optional, if provided and equals to 'remove' the
// property mediator will act as a property remove mediator
if (action != null && "remove".equals(action.getAttributeValue())) {
Modified: synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/PropertyMediatorSerializer.java
URL: http://svn.apache.org/viewvc/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/PropertyMediatorSerializer.java?rev=916303&r1=916302&r2=916303&view=diff
==============================================================================
--- synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/PropertyMediatorSerializer.java (original)
+++ synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/PropertyMediatorSerializer.java Thu Feb 25 14:50:47 2010
@@ -77,6 +77,15 @@
"type" , nullNS, mediator.getType()));
}
+ if (mediator.getPattern() != null) {
+ property.addAttribute(fac.createOMAttribute(
+ "pattern", nullNS, mediator.getPattern().toString()));
+ if (mediator.getGroup() >= 0) {
+ property.addAttribute(fac.createOMAttribute(
+ "group", nullNS, Integer.toString(mediator.getGroup())));
+ }
+ }
+
if (parent != null) {
parent.addChild(property);
}
Modified: synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/mediators/builtin/PropertyMediator.java
URL: http://svn.apache.org/viewvc/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/mediators/builtin/PropertyMediator.java?rev=916303&r1=916302&r2=916303&view=diff
==============================================================================
--- synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/mediators/builtin/PropertyMediator.java (original)
+++ synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/mediators/builtin/PropertyMediator.java Thu Feb 25 14:50:47 2010
@@ -33,6 +33,8 @@
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
+import java.util.regex.Pattern;
+import java.util.regex.Matcher;
/**
* The property mediator would save(or remove) a named property as a local property of
@@ -62,6 +64,13 @@
/** Set the property (ACTION_SET) or remove it (ACTION_REMOVE). Defaults to ACTION_SET */
private int action = ACTION_SET;
+ /** Regualar expresion pattern to be evaluated over the property value.
+ * Resulting match string will be applied to the property */
+ private Pattern pattern;
+
+ /** A pattern can be matched to several parts of the value. Which one to choose.*/
+ private int group = 0;
+
/**
* Sets a property into the current (local) Synapse Context or into the Axis Message Context
* or into Transports Header and removes above properties from the corresponding locations.
@@ -85,6 +94,12 @@
Object resultValue = getResultValue(synCtx);
+ // if the result value is a String we can apply a reguar expression to
+ // choose part of it
+ if (resultValue instanceof String && pattern != null) {
+ resultValue = getMatchedValue((String) resultValue, synLog);
+ }
+
if (synLog.isTraceOrDebugEnabled()) {
synLog.traceOrDebug("Setting property : " + name + " at scope : " +
(scope == null ? "default" : scope) + " to : " + resultValue + " (i.e. " +
@@ -252,6 +267,22 @@
this.action = action;
}
+ public Pattern getPattern() {
+ return pattern;
+ }
+
+ public void setPattern(Pattern pattern) {
+ this.pattern = pattern;
+ }
+
+ public int getGroup() {
+ return group;
+ }
+
+ public void setGroup(int group) {
+ this.group = group;
+ }
+
private Object getResultValue(MessageContext synCtx) {
if (value != null) {
return value;
@@ -287,4 +318,42 @@
throw new SynapseException(msg, e);
}
}
+
+ /**
+ * Apply the Regular expression on to the String value and choose the matching group.
+ * If a matching not found same string passed in to this method will be returned.
+ * If a pattern is not specified same String passed to this method will be retured.
+ *
+ * @param value String value against the regular expression is matched
+ * @param synLog log
+ * @return the matched string group
+ */
+ private String getMatchedValue(String value, SynapseLog synLog) {
+
+ String matchedValue = value;
+ // if we cannot find a match set the value to empty string
+ Matcher matcher = pattern.matcher(value);
+ if (matcher.matches()) {
+
+ if (matcher.groupCount() >= group) {
+ matchedValue = matcher.group(group);
+ } else {
+ if (synLog.isTraceOrDebugEnabled()) {
+ String msg = "Failed to get a match for regx : " +
+ pattern.toString() + " with the property value :" +
+ value + " for group :" + group;
+ synLog.traceOrDebug(msg);
+ }
+ }
+
+ } else {
+ if (synLog.isTraceOrDebugEnabled()) {
+ String msg = "Unable to find a match for regx : " +
+ pattern.toString() + " with the property value :" + value;
+ synLog.traceOrDebug(msg);
+ }
+ }
+
+ return matchedValue;
+ }
}