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

Reply via email to