使用 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
所以这个 class 没有用。我知道我已经在 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 版本中,您必须检查对于空负载)。我已经调试了 invoke 元素,不幸的是没有表达式会删除它,但这是您可以使用的等效方法
<expression-transformer expression="#[groovy: Aggregator.aggregateSingle(message)]" />
这按预期工作,因为 groovy 可以直接访问 bean 注册表,因此您可以引用 bean 名称并将其保留为 spring bean(正如我想象的那样)
我有一个 Java 方法可以读取一些流变量,进行一些聚合并将结果附加到另一个流变量中已经存在的列表中。
因此,该方法需要一个 MuleMessage。我认为显然可以将 MuleMessage
传递给 java 方法,使用 message
MEL 变量,例如:
<invoke object-ref="Aggregator" method="aggregateSingle" methodArguments="#[message]" doc:name="Invoke"/>
但事实证明,这传递了一个 MessageContext
对象。但是我需要设置 InvocationVariable
所以这个 class 没有用。我知道我已经在 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 版本中,您必须检查对于空负载)。我已经调试了 invoke 元素,不幸的是没有表达式会删除它,但这是您可以使用的等效方法
<expression-transformer expression="#[groovy: Aggregator.aggregateSingle(message)]" />
这按预期工作,因为 groovy 可以直接访问 bean 注册表,因此您可以引用 bean 名称并将其保留为 spring bean(正如我想象的那样)