簡體   English   中英

使用Mule調用將MuleMessage傳遞給Java方法

[英]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> 

有沒有辦法使用invokeMuleMessage對象傳遞給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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM