[英]Passing MuleMessage to Java method with Mule invoke
我有一個Java方法,它將讀取一些流變量,進行一些聚合並將結果附加到已存在於另一個流變量中的列表中。
因此,該方法需要MuleMessage。 我認為顯然可以將MuleMessage
傳遞給java方法,使用message
MEL變量,如:
<invoke object-ref="Aggregator" method="aggregateSingle" methodArguments="#[message]" doc:name="Invoke"/>
但事實證明,這會傳遞一個MessageContext
對象。 但是我需要設置InvocationVariable
所以這個類InvocationVariable
。 我知道我已經在groovy中設置了變量,所以也許這會起作用(我想):
<invoke object-ref="Aggregator" method="aggregateSingle" methodArguments="#[groovy:message]" doc:name="Invoke"/>
但不,這以某種方式傳遞了payload
而不是MuleMessage
。
所以我發現這樣做的唯一方法是在Groovy組件中實際調用它,如下所示。 這意味着每次都必須創建一個新的Aggregator對象,而不是像我計划的那樣使用spring:bean
。
<scripting:transformer doc:name="aggregateSingle">
<scripting:script engine="Groovy"><![CDATA[
new com.example.Aggregator().aggregateSingle(message);
message
]]></scripting:script>
</scripting:transformer>
有沒有辦法使用invoke
將MuleMessage
對象傳遞給Java方法?
默認情況下,mel使用消息上下文來引用消息變量,這實際上只是用於幫助解決常見的表達式,例如message.payload!= null(在以前版本的mule中,您必須檢查null有效負載)。 我調試了invoke元素,遺憾的是沒有表達式可以刪除它,但這是一個可以使用的等效方法
<expression-transformer expression="#[groovy: Aggregator.aggregateSingle(message)]" />
這可以正常工作,因為groovy可以直接訪問bean注冊表,因此你可以引用bean名稱並將其保存為spring bean(我想你想擁有)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.