【问题标题】:How properly convert ArrayList to String in MEL如何在 MEL 中正确地将 ArrayList 转换为 String
【发布时间】:2021-12-06 17:27:31
【问题描述】:

所以我有有效载荷,其中一部分有这样的数组:

{
...
members [
  John,
  Robert,
  Tony
]
...
}

我尝试将变量设置为:

#[payload.members joinBy(",")]

但它的返回类型为 java.lang.ArrayList

但是如果对 DW 1.0 做同样的事情(输出到变量):

%dw 1.0
%output application/java
---
payload.members joinBy ","

我根据需要接收它类型 - java.lang.String

任何建议为什么会这样,或者我在 MEL 中做错了什么,与在转换组件中一样? (我正在避免在这样简单的步骤中使用转换组件)

【问题讨论】:

    标签: mule mule-esb mel


    【解决方案1】:

    您混淆了两种不同的语言。 Mule 3.x 使用MEL 作为其表达语言。这意味着#[...] 形式的每个表达式都是 MEL 表达式。 Mule 3.7+ 还支持 DataWeave 1 在 Transform 组件中。那是两种不同的语言。 joinBy 操作是一个 DataWeave 操作,因此它不会在 MEL 表达式中工作。我不知道为什么它不只是抛出一个错误。

    在 MEL 中,您可以执行以下操作:

    #[ org.apache.commons.lang.StringUtils.join(payload.members, ",") ]
    

    大多数基本 Java 表达式都与 MEL 兼容。

    请注意,在 Mule 4 中,唯一的表达式语言是 DataWeave 2。#[...] 中的表达式与 Transform 组件中的表达式相同。

    【讨论】:

    • 是的,我们仍然使用 v.3.8,所以我理解其中的区别,但我的问题是 MEL 如何获得相同的结果 - 从 json 数组转换为字符串,类似于 dw 结果。错误不会因为语法正确而引发,但结果出乎意料。
    • 我认为 MEL 的语法不正确。如果您尝试#[payload.members],您将看到它返回相同的 ArrayList。由于某种原因,joinBy() 被忽略了。该语法仅在 DataWeave 中有效。出乎意料的是缺少语法错误。作为旁注,我建议迁移到较新版本的 Mule。 3.8 版已于上个月终止。
    • 作为证明,试试这个也不会引发错误的表达式:#[payload.members nonsense()]。显然,任何地方都没有nonsense() 函数,但它不会引发错误。可能是一个错误。
    • 组织计划迁移到 Kong API,这样他们就不会在 mule 迁移上花费 :( 但是我仍然需要支持他们如此努力地优化以获得更快的速度。是的,很好发现 - 废话() 也不会抛出错误,所以它可能是一个错误 :( 但仍有问题是在 MEL 中是否可以将数组转换为字符串?
    • 我已经提到了一个可能的有效 MEL 表达式来实现这一点。
    猜你喜欢
    • 2021-10-21
    • 2012-08-31
    • 2021-02-21
    • 1970-01-01
    • 2012-06-06
    • 1970-01-01
    • 2011-08-20
    • 1970-01-01
    • 2021-07-25
    相关资源
    最近更新 更多