User properties
Support for user properties is provided by the SIMessage interface and the mediation configuration selector. The JMS API supports user properties of primitive wrapper or string types. The property name can be any valid Java identifier providing it does not have the prefix JMS. The SIMessage API also supports user properties of primitive wrapper or string types, and additionally supports byte[] and serializable types. Arbitrary serializable objects are stored as byte arrays, and are selected on as byte arrays only (using equals only).
User properties supported by the SIMessage API must have the prefix user. We can set and access these properties using getMessageProperty, setMessageProperty and deleteMessageProperty.
Interaction with JMS
Alternatively, we can set and access user properties using xxxUserProperty methods. In this case, the prefix user must be omitted. The property name, excluding the prefix user, exists in the same namespace as the JMS user properties.
For example, a JMS application calls a property as follows:
setStringProperty("color", "green");A mediation can access the property by making one of the following calls:
getMessageProperty("user.color"); getUserProperty("color");
Mediation message selectors must contain the user prefix. JMS property methods only affect user properties that have types supported by the JMS API:
- clearProperties() clears only those properties supported by JMS.
- propertyExists() returns true only when the property type is supported by JMS.
- getPropertyNames() includes only those properties with types supported by JMS.
- setObjectProperty("xxxx", null); clears a property only if it is supported by JMS.
Note that setxxxxProperty("xxxx", value) overrides a user property of any type when the value is non-null.