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