You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@synapse.apache.org by hi...@apache.org on 2013/09/20 21:18:07 UTC
svn commit: r1525111 - in /synapse/trunk/java/modules/core/src:
main/java/org/apache/synapse/mediators/transform/HeaderMediator.java
test/java/org/apache/synapse/mediators/transform/HeaderMediatorTest.java
Author: hiranya
Date: Fri Sep 20 19:18:06 2013
New Revision: 1525111
URL: http://svn.apache.org/r1525111
Log:
Applying the patch for SYNAPSE-977
Modified:
synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/mediators/transform/HeaderMediator.java
synapse/trunk/java/modules/core/src/test/java/org/apache/synapse/mediators/transform/HeaderMediatorTest.java
Modified: synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/mediators/transform/HeaderMediator.java
URL: http://svn.apache.org/viewvc/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/mediators/transform/HeaderMediator.java?rev=1525111&r1=1525110&r2=1525111&view=diff
==============================================================================
--- synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/mediators/transform/HeaderMediator.java (original)
+++ synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/mediators/transform/HeaderMediator.java Fri Sep 20 19:18:06 2013
@@ -169,7 +169,9 @@ public class HeaderMediator extends Abst
hb.setText(value);
} else if (hasEmbeddedXml()) {
for (OMElement e : embeddedXmlContent) {
- header.addChild(e);
+ // Don't attach the original OMElement here.
+ // If another mediator down the line, changes the OM, we are in trouble.
+ header.addChild(e.cloneOMElement());
}
}
}
Modified: synapse/trunk/java/modules/core/src/test/java/org/apache/synapse/mediators/transform/HeaderMediatorTest.java
URL: http://svn.apache.org/viewvc/synapse/trunk/java/modules/core/src/test/java/org/apache/synapse/mediators/transform/HeaderMediatorTest.java?rev=1525111&r1=1525110&r2=1525111&view=diff
==============================================================================
--- synapse/trunk/java/modules/core/src/test/java/org/apache/synapse/mediators/transform/HeaderMediatorTest.java (original)
+++ synapse/trunk/java/modules/core/src/test/java/org/apache/synapse/mediators/transform/HeaderMediatorTest.java Fri Sep 20 19:18:06 2013
@@ -41,7 +41,7 @@ public class HeaderMediatorTest extends
headerMediator.setQName(new QName(SynapseConstants.HEADER_TO));
headerMediator.setValue(TEST_HEADER);
- // invoke transformation, with static enveope
+ // invoke transformation, with static envelope
MessageContext synCtx = TestUtils.getTestContext("<empty/>");
headerMediator.mediate(synCtx);
@@ -120,4 +120,29 @@ public class HeaderMediatorTest extends
new QName("http://org.synapse.example", "complexHeader"));
assertNull(result);
}
+
+ public void testEmbeddedXmlClone() throws Exception {
+ // Test for SYNAPSE-977
+ String complexHeader = "<header><m:complexHeader xmlns:m=\"http://org.synapse.example\">TEST</m:complexHeader></header>";
+
+ HeaderMediatorFactory fac = new HeaderMediatorFactory();
+ HeaderMediator headerMediator = (HeaderMediator) fac.createMediator(
+ AXIOMUtil.stringToOM(complexHeader), new Properties());
+
+ // Adding headers.
+ MessageContext synCtx = TestUtils.getTestContext("<empty/>");
+ headerMediator.mediate(synCtx);
+ OMElement result = synCtx.getEnvelope().getHeader().getFirstElement();
+ assertEquals("complexHeader", result.getLocalName());
+ assertEquals("TEST", result.getText());
+
+ // Now mutate the result
+ result.setText("TEST123");
+
+ synCtx = TestUtils.getTestContext("<empty/>");
+ headerMediator.mediate(synCtx);
+ result = synCtx.getEnvelope().getHeader().getFirstElement();
+ assertEquals("complexHeader", result.getLocalName());
+ assertEquals("TEST", result.getText());
+ }
}