【问题标题】:dataweave 2 code works in one machine but not on the other (same O/S and Anypoint Studio version)dataweave 2 代码可在一台机器上工作,但不能在另一台机器上工作(相同的操作系统和 Anypoint Studio 版本)
【发布时间】:2020-05-03 23:18:40
【问题描述】:

我在将 dataweave 2 代码从一台计算机复制到另一台计算机时遇到问题(Windows 10 和 Anypoint Studio 7,Mule Server 4.2.2 EE):

  1. 从电脑A导出jar文件
  2. 将相同的 jar 文件导入到计算机 B 上的 Anypoint Studio
  3. 在机器 B 上工作/测试代码
  4. 将转换器代码(dataweave 2)从计算机 B 复制到草稿 gmail
  5. 在计算机 A 上打开 gmail 并将代码复制到同一个转换器
  6. 有错误 - 有时只有一个,有时很多错误

例如:

%dw 2.0
output application/json
var addr = payload.PersonInfo.AddressList.Address 
---
{
    Addresses: if (addr is Object)
        [addr] map ( address ) -> {
        Suburb: address.City
        }
    else 
        addr map ( address ) -> {
        Suburb: address.City
    }
}

错误指向第一个map函数:'Invalid input "map (address) -> {\r\n\tSuburb: address.City\r\n\t ", expected Function Call (line 7 column 10):

任何帮助将不胜感激。

【问题讨论】:

  • 我复制了您的代码并粘贴到了转换消息处理器中。我看到的大多数“错误”都是警告;您被警告正在执行自动投射。有时您可能会得到误报,这与 DataSense 相关——您是否尝试设置输入有效负载元数据?您是否尝试运行服务器?此外,请向我们提供示例输入数据和所需的输出,因为我相信我们可以重构您的表达式并使其变得更好。
  • 您必须共享此转换的输入有效负载,以便我们可以尝试重现错误。此外,您应该粘贴完整的错误消息,而不仅仅是可能缺少一些重要细节的 sn-p。

标签: dataweave mule4


【解决方案1】:

操作系统没有问题 - 都是数据/有效负载和 Dataweave 脚本问题。 首先 - 函数映射适用于数组,但错误消息中显示的是带对象的字符串。基于问题的脚本应该期望使用 Array 或 String 并且应该适应它。

这里是如何做到这一点的例子 https://simpleflatservice.com/mule4/ChangeStringToJsonOnTheFly.html

这是一个例子。使用它并更改输入以查看它在不同负载下的行为

%dw 2.0
var xAsObject=[{City:'AlbanyObject',State:'NY'},{City:'Seattle',State:'WA'}]
var xAsString='[{"City":"AlbanyString","State":"NY"},{"City":"Seattle","State":"WA"}]'
output application/json
var addr = xAsString
//var addr = xAsObject 
---
{
    Addresses: if (addr is Array)
        [addr] map ( address, index ) -> {
        Suburb: address.City
        }
    else if (addr is String )
        ( read ( ( addr default '' ), 'application/json' ) ) map ( address, index ) -> {
        Suburb: address.City
    }
    else {Suburb: 'Unknown'}
}

可能的输出是(对于字符串)

{
  "Addresses": [
    {
      "Suburb": "AlbanyString"
    },
    {
      "Suburb": "Seattle"
    }
  ]
}

对于数组

{
  "Addresses": [
    {
      "Suburb": [
        "AlbanyObject",
        "Seattle"
      ]
    }
  ]
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-06-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多