【问题标题】:Groovy script overwriting first byte?Groovy脚本覆盖第一个字节?
【发布时间】:2018-09-18 00:26:08
【问题描述】:

嗨,所以我在 groovy 中创建和附加的这个字符串以某种方式破坏了第一个字节,我不知道为什么会发生这种情况。它是第二个字符串创建。在这个脚本中,我正在做一个查询,第一个有效,但第二个初始化不知何故弄乱了字符串中的第一个字节,我必须做一个额外索引的子字符串(它是两个,因为我正在初始化一个逗号)。任何见解将不胜感激!

注意:我在 Anypoint studio 6.4.4 中使用 mulesoft 运行时 3.8.5。不知道这是否是原因,但它是我心目中的候选人......

 flowVars.queryIds = "Id IN ("
 for (Integer i = 0; i < payload.size(); i++) {
     flowVars.queryIds += "\'" + payload[i].Id + "\',"
 }
  flowVars.queryIds = flowVars.queryIds.substring(0,flowVars.queryIds.size() - 1) + ")"

  //Assigning comma because a random byte is getting inserted and this makes that error explicit & deterministic
  flowVars.queryFields = ",";
  for (String key : payload[0].keySet()) {
      flowVars.queryFields += key + ",";
  }
  //Skipping over custom field isMatch
  flowVars.queryFields = flowVars.queryFields.substring(2, flowVars.queryFields.size() - 9);

  return payload

【问题讨论】:

  • 你能试着把你的问题减少到核心问题吗?那么分析起来会更容易......

标签: groovy mule mule-studio


【解决方案1】:

我无法重现您的问题,但由于您使用 groovy,您可以将代码写得更短:

flowVars.queryIds = "Id IN ("
flowVars.queryIds += payload.collect{"'${it.Id}'"}.join(", ")
flowVars.queryIds += ")"
flowVars.queryFields = payload[0].keySet().join(", ");

这应该以更易于理解的方式产生相同的输出

【讨论】:

  • 这太棒了!我不知道 groovy 可以做到这一点。 Mulesoft 不喜欢 {" '${it.Id}' "} 因为 ${} 保留用于访问属性文件中的值并因此解释它。这是我按照您的建议所做的修改代码:code flowVars.queryIds = "Id IN (\'" flowVars.queryIds += payload.collect{ it.Id }.join("\', \'") ; flowVars.queryIds += "\')"; flowVars.queryFields = payload[0].keySet().join(", "); code
  • 很高兴你喜欢它!非常感谢您的支持......并确保标记正确答案的检查?
【解决方案2】:

所以我发现这个问题发生的原因实际上是因为我正在解析的 csv 文件已损坏(我认为它是 mulesoft 并且弄错了)。这个博客在解释这个问题方面做得比我做得更好。感谢您通过 Rdmueller 对 groovy 代码的评论!你的建议绝对干净多了。 https://medium.freecodecamp.org/a-quick-tale-about-feff-the-invisible-character-cd25cd4630e7

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多