Property mediator has no direct impact on the message but rather on the message context flowing through Synapse. The properties set on a message can be later retrieved through the synapse:get-property(prop-name) XPath extension function. If a scope is specified for a property, the property could be set as a transport header property or an (underlying) Axis2 message context property, or as a Axis2 client option. If a scope is not specified, it will default to the Synapse message context scope. Using the property element with action specified as "remove" you can remove any existing message context properties.
The above extracted from the WSO2 ESB documentation...
This blog post focuses on different types of scopes available while setting properties.
1. Default - or the Synapse
Once you set a property under this scope - the value of it will be available through out both the in/out sequences.
To access this property inside the mediate() method of a mediator...
public boolean mediate(org.apache.synapse.MessageContext mc) { // Available in both in-sequence and out-sequenc String propValue = (String) mc.getProperty("PropName"); System.out.println("SCOPE_SYNAPSE : " + propValue); return true; }2. Axis2
Once you set a property under this scope - the value of it will be available only through out the the sequence it's been set. If you set the Property mediator to the in-sequence, you cannot access it in the out-sequence.To access this property inside the mediate() method of a mediator...
public boolean mediate(org.apache.synapse.MessageContext mc) { org.apache.axis2.context.MessageContext axis2MsgContext; axis2MsgContext = ((Axis2MessageContext) mc).getAxis2MessageContext(); // Available only in the sequence the property is defined. String propValue = (String) axis2MsgContext.getProperty("PropName"); System.out.println("SCOPE_AXIS2 : " + propValue); return true; }3. Axis2-Client
This is similar to Synapse scope. The difference is - you can access it in following two ways..
public boolean mediate(org.apache.synapse.MessageContext mc) { org.apache.axis2.context.MessageContext axis2MsgContext; axis2MsgContext = ((Axis2MessageContext) mc).getAxis2MessageContext(); String propValue = (String) axis2MsgContext.getProperty("PropName"); System.out.println("SCOPE_AXIS2_CLIENT - 1 : " + propValue); propValue = (String) axis2MsgContext.getOptions().getProperty("PropName"); System.out.println("SCOPE_AXIS2_CLIENT - 2: " + propValue); return true; }4. Transport
Once you set a property under this scope - it will be added to the transport header of the out going message from the ESB.