Details
-
Bug
-
Status: Resolved
-
Critical
-
Resolution: Fixed
-
None
-
None
-
None
Description
<?xml version="1.0" encoding="UTF-8"?> <sequence xmlns="http://ws.apache.org/ns/synapse" name="main"> <property name="AA"> <a xmlns=""/> </property> <enrich> <source type="inline"> <b xmlns=""/> </source> <target xmlns:ns="http://org.apache.synapse/xsd" action="child" xpath="$ctx:AA"/> </enrich> <log> <property name="AA" expression="$ctx:AA"/> </log> </sequence>
Here initial configuration of the property mediator getting updated with each and every request.
Log
2016-10-31 07:29:51,770 [-] [PassThroughMessageProcessor-1] INFO LogMediator To: /, MessageID: urn:uuid:349a72af-a179-4a3c-a1b1-fd0570bb1d94, Direction: request, AA = <a><b/></a> 2016-10-31 07:30:01,562 [-] [PassThroughMessageProcessor-2] INFO LogMediator To: /, MessageID: urn:uuid:c40a4bbe-87b4-40c5-8d92-6589a68b5387, Direction: request, AA = <a><b/><b/></a> 2016-10-31 07:30:09,859 [-] [PassThroughMessageProcessor-3] INFO LogMediator To: /, MessageID: urn:uuid:c3238c91-c139-4426-a37f-f9e4bdd4adac, Direction: request, AA = <a><b/><b/><b/></a> 2016-10-31 07:30:15,594 [-] [PassThroughMessageProcessor-4] INFO LogMediator To: /, MessageID: urn:uuid:390b0637-c52b-4dac-822d-ce478a7a92a1, Direction: request, AA = <a><b/><b/><b/><b/></a>
Fix would be to clone the valueElement at the PropertyMediatorFactory
Instead of
if (value != null) { propMediator.setValue(value.getAttributeValue(), dataType); } else if (valueElement != null) { propMediator.setValueElement(valueElement);
we need to use
if (value != null) { propMediator.setValue(value.getAttributeValue(), dataType); } else if (valueElement != null) { propMediator.setValueElement(valueElement.cloneOMElement());