【问题标题】:Passing MuleMessage to Java method with Mule invoke使用 Mule 调用将 MuleMessage 传递给 Java 方法
【发布时间】:2015-07-08 05:50:22
【问题描述】:

我有一个 Java 方法,它将读取一些流变量,进行一些聚合并将结果附加到另一个流变量中已经存在的列表中。

因此,该方法需要一个 MuleMessage。我认为显然可以使用message MEL 变量将MuleMessage 传递给java 方法,例如:

<invoke object-ref="Aggregator" method="aggregateSingle" methodArguments="#[message]" doc:name="Invoke"/>

但事实证明,这反而传递了一个MessageContext 对象。但是我需要设置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 方法?

【问题讨论】:

  • 为什么要使用调用组件,然后将其与 Mule API 耦合? ...拥有两种创建组件的方式的想法是,一种方式将您与 Mule API 联系起来,而另一种则没有。
  • @Sudarshan 我想保持 mule 代码干净。我的流程中有两个分支,一个使用scatter-gather,另一个使用顺序。后者产生与前者的 AggregationStrategy 产生的类似对象。因此,我想重用 AggregationStrategy 中的功能。它还允许进行更细粒度的测试。您是在问我为什么要将 MuleMessage(即 Mule API 特定类)传递给我的班级吗?这是因为它比传递 5 个单独的 flowVariables 更容易。
  • +1 解决了您的问题,但是我会考虑创建 5 个 flowVariables 的 POJO 并将 POJO 传递到组件中,特别是如果您正在考虑测试能力和干净的代码。期待答案:)
  • 请注意,您可以从 Groovy 调用 POJO,方法是先在注册表中查找它,然后调用它。

标签: java mule


【解决方案1】:

默认情况下,mel 使用消息上下文来引用消息变量,这实际上只是为了帮助使用常见的表达式,例如 message.payload != null(在以前的 mule 版本中,您必须检查 null 有效负载) .我已经调试了调用元素,不幸的是没有表达式可以删除它,但这是您可以使用的等效方法

<expression-transformer expression="#[groovy: Aggregator.aggregateSingle(message)]" />

这可以按预期工作,因为 groovy 可以直接访问 bean 注册表,因此您可以引用 bean 名称并将其保留为 spring bean(我想您希望拥有)

【讨论】:

  • 这有点用。它绝对应该工作。但由于某种原因,它调用了两次该方法。
  • 这是一个 MUnit 错误。我从 3.6.0-SNAPSHOT 升级到 3.6.0-RC1-SNAPSHOT,这个错误就消失了。然而,随着 FlowVariables 的消失,出现了其他 MUnit 错误。但是你的回答很好,谢谢! :D
猜你喜欢
  • 1970-01-01
  • 2015-07-20
  • 1970-01-01
  • 2011-11-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-05-04
  • 1970-01-01
相关资源
最近更新 更多