groovy MissingMethodException - 通过ConfigSlurper进行解析

时间:2016-04-12 19:56:34

标签: groovy

我正在尝试使用configslurper解析一些属性文件。

ENT.adminserver.nodenumber=1
ENT.managedserver.1.host=vserver04
ENT.managedserver.2.host=vserver05
ENT.managedserver.3.host=vserver08
ENT.managedserver.4.host=vserver07

表示属性文件。我正在尝试从属性中读取主机名。

Properties properties = new Properties()
File propertiesFile = new File('DomainBuild.properties')
propertiesFile.withInputStream {properties.load(it)}
def config = new ConfigSlurper().parse(properties)

    def domainname="ENT" //will be passed through paremeters
    def domain = config.get(domainname)
    def managedServerFlow= {
      println domain.managedserver
      println domain.managedserver.keySet()
      domain.managedserver.each { 
        println it.getClass()
        println it.get("1") 
      }

      for (server in domain.managedserver) {
        println server.getClass()
        println server
      }
    }
}

it.get(“1”)导致以下错误。

No signature of method: java.util.LinkedHashMap$Entry.get() is applicable for argument types: (java.lang.String) values: [1]
Possible solutions: getAt(java.lang.String), grep(), grep(java.lang.Object), wait(), getKey(), any()

我查看了java和groovy文档,花了几个小时没有解决。请帮忙。

2 个答案:

答案 0 :(得分:0)

而不是

println it.get("1") 

尝试

println it.'1'

或者

println it.getAt("1") // as the exception shows you

答案 1 :(得分:0)

考虑您正在使用的类型。 configConfigObject,您可以将其视为地图。它的子对象domaindomain.managedserver也是ConfigObjects。当您在each上调用domain.managedserver并向其传递一个不带参数的闭包时,它会为您提供一组条目。因此,您无法调用it.get("1"),因为Entry没有名为“1”的属性。它有keyvalue。所以你可以println "$it.key: $it.value"

  domain.managedserver.each { key, value ->
    println value.getClass()
    println "$key: $value"
  }

或者如果您想直接获取密钥“1”的值:

  println domain.managedserver.'1'