Author: hiranya
Date: Thu Jul 18 22:23:33 2013
New Revision: 1504692

URL: http://svn.apache.org/r1504692
Log:
Applying the patch for SYNAPSE-887 with some modifications. Adding a test case 
to verify the fix.

Added:
    
synapse/trunk/java/modules/core/src/test/java/org/apache/synapse/mediators/elementary/
    
synapse/trunk/java/modules/core/src/test/java/org/apache/synapse/mediators/elementary/EnrichMediatorTest.java
Modified:
    
synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/EnrichMediatorFactory.java
    
synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/mediators/elementary/Target.java

Modified: 
synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/EnrichMediatorFactory.java
URL: 
http://svn.apache.org/viewvc/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/EnrichMediatorFactory.java?rev=1504692&r1=1504691&r2=1504692&view=diff
==============================================================================
--- 
synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/EnrichMediatorFactory.java
 (original)
+++ 
synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/EnrichMediatorFactory.java
 Thu Jul 18 22:23:33 2013
@@ -162,7 +162,7 @@ public class EnrichMediatorFactory exten
             if (propertyAttr != null && propertyAttr.getAttributeValue() != 
null) {
                 target.setProperty(propertyAttr.getAttributeValue());
             } else {
-                handleException("xpath attribute is required for CUSTOM type");
+                handleException("property attribute is required for property 
type");
             }
         }
     }

Modified: 
synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/mediators/elementary/Target.java
URL: 
http://svn.apache.org/viewvc/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/mediators/elementary/Target.java?rev=1504692&r1=1504691&r2=1504692&view=diff
==============================================================================
--- 
synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/mediators/elementary/Target.java
 (original)
+++ 
synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/mediators/elementary/Target.java
 Thu Jul 18 22:23:33 2013
@@ -21,6 +21,7 @@ package org.apache.synapse.mediators.ele
 import org.apache.axiom.om.OMElement;
 import org.apache.axiom.om.OMNode;
 import org.apache.axiom.om.OMText;
+import org.apache.axiom.om.util.AXIOMUtil;
 import org.apache.axiom.soap.SOAPBody;
 import org.apache.axiom.soap.SOAPEnvelope;
 import org.apache.axis2.AxisFault;
@@ -30,6 +31,7 @@ import org.apache.synapse.SynapseLog;
 import org.apache.synapse.util.xpath.SynapseXPath;
 import org.jaxen.JaxenException;
 
+import javax.xml.stream.XMLStreamException;
 import java.util.ArrayList;
 
 /**
@@ -136,7 +138,24 @@ public class Target {
             }
         } else if (targetType == EnrichMediator.PROPERTY) {
             assert property != null : "Property cannot be null for PROPERTY 
type";
-            synContext.setProperty(property, sourceNodeList);  
+            Object propertyObj = synContext.getProperty(property);
+            if (propertyObj != null && ACTION_ADD_CHILD.equals(action)) {
+                OMElement documentElement;
+                if (propertyObj instanceof OMElement) {
+                    documentElement = (OMElement) propertyObj;
+                } else {
+                    try {
+                        documentElement = 
AXIOMUtil.stringToOM(propertyObj.toString());
+                    } catch (XMLStreamException e) {
+                        throw new SynapseException("Error while converting 
property value into" +
+                                " an OMElement");
+                    }
+                }
+                insertElement(sourceNodeList, documentElement, synLog);
+                synContext.setProperty(property, documentElement);
+            } else {
+                synContext.setProperty(property, sourceNodeList);
+            }
         }
     }
 

Added: 
synapse/trunk/java/modules/core/src/test/java/org/apache/synapse/mediators/elementary/EnrichMediatorTest.java
URL: 
http://svn.apache.org/viewvc/synapse/trunk/java/modules/core/src/test/java/org/apache/synapse/mediators/elementary/EnrichMediatorTest.java?rev=1504692&view=auto
==============================================================================
--- 
synapse/trunk/java/modules/core/src/test/java/org/apache/synapse/mediators/elementary/EnrichMediatorTest.java
 (added)
+++ 
synapse/trunk/java/modules/core/src/test/java/org/apache/synapse/mediators/elementary/EnrichMediatorTest.java
 Thu Jul 18 22:23:33 2013
@@ -0,0 +1,66 @@
+package org.apache.synapse.mediators.elementary;
+
+import junit.framework.TestCase;
+import org.apache.axiom.om.OMAbstractFactory;
+import org.apache.axiom.om.OMElement;
+import org.apache.axiom.om.OMFactory;
+import org.apache.synapse.MessageContext;
+import org.apache.synapse.mediators.TestUtils;
+
+import javax.xml.namespace.QName;
+
+public class EnrichMediatorTest extends TestCase {
+
+    public void testEnrich1() throws Exception {
+        OMFactory fac = OMAbstractFactory.getOMFactory();
+        OMElement element = fac.createOMElement(new QName("test"));
+        element.setText("12345");
+
+        EnrichMediator mediator = new EnrichMediator();
+        Source source = new Source();
+        source.setSourceType(EnrichMediator.INLINE);
+        source.setInlineOMNode(element);
+
+        Target target = new Target();
+        target.setTargetType(EnrichMediator.BODY);
+        mediator.setSource(source);
+        mediator.setTarget(target);
+
+        MessageContext msgContext = TestUtils.getTestContext("<empty/>");
+        mediator.mediate(msgContext);
+        OMElement firstElement = 
msgContext.getEnvelope().getBody().getFirstElement();
+        assertEquals("test", firstElement.getLocalName());
+        assertEquals("12345", firstElement.getText());
+    }
+
+    public void testEnrich2() throws Exception {
+        OMFactory fac = OMAbstractFactory.getOMFactory();
+        OMElement element = fac.createOMElement(new QName("test"));
+        element.setText("12345");
+
+        OMElement propElement = fac.createOMElement(new QName("property"));
+
+        EnrichMediator mediator = new EnrichMediator();
+        Source source = new Source();
+        source.setSourceType(EnrichMediator.INLINE);
+        source.setInlineOMNode(element);
+
+        Target target = new Target();
+        target.setTargetType(EnrichMediator.PROPERTY);
+        target.setProperty("foo");
+        target.setAction(Target.ACTION_ADD_CHILD);
+        mediator.setSource(source);
+        mediator.setTarget(target);
+
+        MessageContext msgContext = TestUtils.getTestContext("<empty/>");
+        msgContext.setProperty("foo", propElement);
+
+        mediator.mediate(msgContext);
+        OMElement firstElement = 
msgContext.getEnvelope().getBody().getFirstElement();
+        assertEquals("empty", firstElement.getLocalName());
+
+        OMElement result = (OMElement) msgContext.getProperty("foo");
+        assertEquals("property", result.getLocalName());
+        assertEquals("test", result.getFirstElement().getLocalName());
+    }
+}


Reply via email to