2017-05-30 17 views
0

我在騾子裏有下面的Groovy腳本。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沒有問題?我錯過了什麼嗎?

+3

你可能會使用Groovy版本不支持Java 8的lambda語法。然而,你仍然可以在需要Lambda的地方使用閉包,所以'.withNodeFilter {node - >!node.getNodeName()。equals('EffectiveDate')}'應該這樣做。 – dmahapatro

+0

謝謝。你的評論在這裏幫了我很多。這比提供的建議答案更有意義,並使我解決了我的問題。 – Richie

回答

1

因爲在這裏:

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

是來自Java8的lambda語法,當前不受Groovy發佈版本支持(應包含在Groovy 3中);

而不是它使用Groovy的clojures:

.withNodeFilter { //code here } 
0
在常規

,沒有必要使用命令分隔符;

所以新的生產線可以被認爲是命令的結束時,如果有什麼提相反......

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()