繁体   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