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());
+    }
 }