fix for SYNAPSE-1060
git-svn-id: https://svn.apache.org/repos/asf/synapse/trunk@1768346 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/java/modules/core/src/main/java/org/apache/synapse/config/xml/PropertyMediatorFactory.java b/java/modules/core/src/main/java/org/apache/synapse/config/xml/PropertyMediatorFactory.java
index 7f0ffc8..e5df84a 100644
--- a/java/modules/core/src/main/java/org/apache/synapse/config/xml/PropertyMediatorFactory.java
+++ b/java/modules/core/src/main/java/org/apache/synapse/config/xml/PropertyMediatorFactory.java
@@ -81,7 +81,8 @@
if (value != null) {
propMediator.setValue(value.getAttributeValue(), dataType);
} else if (valueElement != null) {
- propMediator.setValueElement(valueElement);
+ propMediator.setValueElement(valueElement.cloneOMElement()); // Need to clone,
+ // otherwise same reference getting modified at the message flow
} else if (expression != null) {
try {
propMediator.setExpression(SynapseXPathFactory.getSynapseXPath(elem, ATT_EXPRN),
diff --git a/java/modules/core/src/main/java/org/apache/synapse/mediators/builtin/PropertyMediator.java b/java/modules/core/src/main/java/org/apache/synapse/mediators/builtin/PropertyMediator.java
index 02c3f97..110af76 100644
--- a/java/modules/core/src/main/java/org/apache/synapse/mediators/builtin/PropertyMediator.java
+++ b/java/modules/core/src/main/java/org/apache/synapse/mediators/builtin/PropertyMediator.java
@@ -288,7 +288,8 @@
if (value != null) {
return value;
} else if (valueElement != null) {
- return valueElement;
+ // Need to take a clone of the element, otherwise same reference is shared across all the requests
+ return valueElement.cloneOMElement();
} else {
return convertValue(expression.stringValueOf(synCtx), type);
}
diff --git a/java/modules/core/src/test/java/org/apache/synapse/mediators/builtin/PropertyMediatorTest.java b/java/modules/core/src/test/java/org/apache/synapse/mediators/builtin/PropertyMediatorTest.java
index addb01a..227db57 100644
--- a/java/modules/core/src/test/java/org/apache/synapse/mediators/builtin/PropertyMediatorTest.java
+++ b/java/modules/core/src/test/java/org/apache/synapse/mediators/builtin/PropertyMediatorTest.java
@@ -140,7 +140,7 @@
MessageContext synCtx = TestUtils.getTestContext("<getQuote><symbol>IBM</symbol></getQuote>");
propMediatorOne.mediate(synCtx);
Object prop = synCtx.getProperty("nameOne");
- assertEquals(valueOne, prop);
+ assertEquals(valueOne.toString(), prop.toString()); // Objects are not equal, so need to compare the content
// Test XML property retrieval
String exprValue = new SynapseXPath("synapse:get-property('nameOne')").stringValueOf(synCtx);