【问题标题】:Groovy is complaining about unexpected token: ->Groovy 抱怨意外的令牌:->
【发布时间】:2017-05-31 00:09:59
【问题描述】:

我在 Mule 中有以下 Groovy 脚本。

import org.custommonkey.xmlunit.XMLUnit.*
def expected = 
    getClass().getResourceAsStream('/samples/in/request.xml').text 

XMLUnit.setIgnoreWhitespace(true)
def documentDiff = DiffBuilder
            .compare(expected)
            .withTest(message.getInboundProperty('webServiceRequest'))
            .withNodeFilter(node -> !node.getNodeName().equals('EffectiveDate'))
            .build()

出于某种原因,Groovy 抱怨“->”..

Script3.groovy: 10: unexpected token: -> @ line 10, column 34.
               .withNodeFilter(node -> !node.getNodeName().equals(EffectiveDate))

我不明白。我认为这在 Groovy 中很好吗?我错过了什么吗?

【问题讨论】:

  • 您可能正在使用不支持 Java 8 的 Lambda 语法的 Groovy 版本。但是,您仍然可以在任何需要 Lambda 的地方使用闭包,所以 .withNodeFilter { node -> !node.getNodeName().equals('EffectiveDate') } 应该这样做。
  • 谢谢。你在这里的评论对我帮助很大。这比提供的建议答案更相关,并引导我解决我的问题。

标签: groovy mule


【解决方案1】:

因为这里:

.withNodeFilter(node -> !node.getNodeName().equals(EffectiveDate)) 

是 Java8 的 lambda 语法,目前已发布的 Groovy 版本不支持(应该包含在 Groovy 3 中);

使用 Groovy 的 clojures 代替它:

.withNodeFilter { //code here }

【讨论】:

    【解决方案2】:

    在 groovy 中不需要使用命令分隔符;

    所以如果没有提及相反的内容,则可以将新行视为命令结束...

    def documentDiff = DiffBuilder
                .compare(expected)
                .withTest(message.getInboundProperty('webServiceRequest'))
                .withNodeFilter(node -> !node.getNodeName().equals('EffectiveDate'))
                .build()
    

    应该这样做(上一个字符串末尾的点)

    def documentDiff = DiffBuilder.
                compare(expected).
                withTest(message.getInboundProperty('webServiceRequest')).
                withNodeFilter(node -> !node.getNodeName().equals('EffectiveDate')).
                build()
    

    【讨论】:

      猜你喜欢
      • 2015-05-03
      • 2016-11-01
      • 1970-01-01
      • 1970-01-01
      • 2019-06-06
      • 2023-01-19
      • 2010-12-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多