Uploaded image for project: 'Synapse'
  1. Synapse
  2. SYNAPSE-1060

Property mediator configuration changes with requests if the type = OM

    XMLWordPrintableJSON

Details

    • Bug
    • Status: Resolved
    • Critical
    • Resolution: Fixed
    • None
    • 3.0.0
    • 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());
      
      

      Attachments

        Activity

          People

            isudana Isuru Udana
            isudana Isuru Udana
            Votes:
            0 Vote for this issue
            Watchers:
            2 Start watching this issue

            Dates

              Created:
              Updated:
              Resolved: