MuleMessage has a mechanism where by when a consumable payload type (one that can only be read once) is read the message payload gets updated with a new payload so that the message can be read again by filters/transformers/dispatchers etc.
This mechanism works well, but when transformers are called directly which often occurs from things like filters this mechanism is bypassed and problems occur.
Only workaround is to manually insert transformers that transform to a non-consumable type just before the filter for example with the issue. This is undesirable though but in terms of configuration and in some cases possibly performance.
One example is jaxen-filter, I'm sure there are others too.