All, Recently there have been discussions (see e.g. SYNAPSE-503) about how to store parts of a message for later use during a mediation. For the moment this is possible, but requires an XML <-> string conversion. The best solution would obviously be to allow storing elements (or other nodes) in Synapse properties. This is allowed by the core (property values are Objects, not strings), but currently not supported by the <property> mediator.
In terms of storing nodes in Synapse properties we should support the following features: (1) Remove a node from the message and store it in a property. (2) Clone a node and store the copy in a property. Note that I intentionally left out storing a reference to a node, because this might have unexpected effects. I think that the node stored in a property should not have any reference to the message itself. We should also have mediators that allow to insert a stored node into the message, i.e. support the following features: (3) Insert a node stored in a property into the message, either as a child or sibling (before/after) of an existing node. (4) Replace an existing node by a node stored in a property. In both cases, the user should have the possibility to choose if he wants to insert a clone of the node or the node itself (in which case the property should be cleared to avoid unexpected effects). I recently added two mediators to synapse-experimental implementing features (1) and (4). They work well, but they will need some rework before moving to the built-in mediators. I would like to have your opinion on the following points: - Is the list of suggested features complete or are there any use cases not covered? - Should we implement features (1) and (2) as distinct mediators or would it make more sense to enhance the existing <property> mediator? - Should we have a separate mediator for each feature (e.g. <removeNode>, <cloneNode>, <insertNode> and <replaceNode>) or should we try to group these features into a smaller set of mediators (using attributes to choose between remove/clone and insert/replace)? - Suggestions for the names of these mediators. Regards, Andreas
