2016-04-12 10 views
0

configslurperを使用していくつかのプロパティファイルを解析しようとしています。groovy MissingMethodException - 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のドキュメントを見て、解決しないまま数時間を過ごしました。助けてください。

答えて

0

代わりの

println it.get("1") 

は、作業しているどのような種類について考え

println it.'1' 

それとも

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

を試してみてください。 configConfigObjectで、地図のように扱うことができます。そのサブオブジェクトdomainおよびdomain.managedserverもConfigObjectです。 をdomain.managedserverに呼び出し、パラメータを取らないクロージャを渡すと、一連のエントリが得られます。したがって、Entryには「1」というプロパティがないため、it.get("1")に電話をかけることはできません。それはkeyvalueです。詳細は

println domain.managedserver.'1' 
+0

ありがとう:だからprintln "$it.key: $it.value"または

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

か、直接キー「1」の値を取得したい場合はいずれかのことができます。当初、私は標準のjava forループを試しました、 'foreach(server in domain.managedservers)'と.get .putの考え方に固執しました。キーと価値が理にかなっています。 – vamirineni87

関連する問題