I have a Java method that will read some flow variables, do some aggregation and append the result to a list that already exists in another flow variable.
For this reason the method expects a MuleMessage.  I thought it's obviously possible to pass a MuleMessage to a java method, using the message MEL variable like:
<invoke object-ref="Aggregator" method="aggregateSingle" methodArguments="#[message]" doc:name="Invoke"/>
But it turned out that this passes a MessageContext object instead. But I need to set InvocationVariable so this class is not useful.  I know I've set variables in groovy, so perhaps this would work (I thought):
<invoke object-ref="Aggregator" method="aggregateSingle" methodArguments="#[groovy:message]" doc:name="Invoke"/>
But no, this somehow passes the payload instead of the MuleMessage.
So the only way I've found to do this is to actually call it in a Groovy component as below. Which means I have to create a new Aggregator object every time, instead of using the spring:bean as I'd planned.
                <scripting:transformer doc:name="aggregateSingle">
                    <scripting:script engine="Groovy"><![CDATA[
                        new com.example.Aggregator().aggregateSingle(message);
                        message
                    ]]></scripting:script>
                </scripting:transformer> 
Is there no way to pass a MuleMessage object to the Java method using invoke?
By default mel uses message context to refer to the message variable, this in fact is just for helping out with common expressions such as message.payload != null (in previous versions of mule you would have to check for null payload). I have debugged the invoke element and unfortunately no expressions would cut it, but this is an equivalent method that you can use
<expression-transformer expression="#[groovy: Aggregator.aggregateSingle(message)]" />
This works as expected because groovy has direct access to the bean registry so you can reference the bean name and keep it as a spring bean (as I imagine you want to have)
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With