Lesen Sie eine YAML-Datei in Groovy
Ich versuche, laden Sie eine bestehende YAML-Datei (verwendet snakeYaml Bibliothek) in meinem Groovy-Projekt. Ich habe eine Klasse namens YamlTape.groovy enthält die Methode zum laden der YAML-Datei mit den folgenden code.
static YamlTape readFrom(Reader reader) {
try {
println "YamlTape : inside readFrom reader.size() = "+reader+" YamlTape: "+YamlTape
yaml.loadAs(reader, YamlTape)
println "YamlTape : after readfrom"
} catch (YAMLException e) {
println "YamlTape : inside catch block"
throw new TapeLoadException('Invalid tape', e)
}
}
und zu versuchen, rufen Sie diese Methode aus einem anderen groovy-Klasse.
Code:
YamlTape loadTape(String name) {
println "YamlTapeLoader : inside loadTape"
def file = fileFor(name)
println "YamlTapeLoader : inside loadTape filename -name: "+name
println "YamlTapeLoader : inside loadTape filename -file: "+file
file.setReadable(true);
file.setWritable(true);
if (file.isFile()) {
println "YamlTapeLoader : inside file.isFile() : "+file.isFile()
def tape = file.withReader(FILE_CHARSET) { reader ->
YamlTape.readFrom(reader)
println "YamlTapeLoader : inside readFrom : "+reader
}
println "YamlTapeLoader : tape : "+tape
tape
} else {
println "YamlTapeLoader : inside ELSE : "
new YamlTape(name: name)
}
}
Aber die tape variable load tape-Methode immer null zurück. Ich habe einige logs gefunden und der code ist in der Lage, den Zugriff auf die yaml-Datei aber nicht in der Lage zu analysieren Yaml-Dokuments und Rückgabe als Java-Objekt.
Protokolle sind :
YamlTapeLoader : inside loadTape
YamlTapeLoader : inside loadTape filename -name: kar
YamlTapeLoader : inside loadTape filename -file: /Users/Shared/AATest/Record/kar.yaml
YamlTapeLoader : inside file.isFile() : true
YamlTape : inside readFrom reader.size() = java.io.LineNumberReader@34189cab YamlTape: class co.freeside.betamax.tape.yaml.YamlTape
YamlTape : inside getYaml
YamlTape : representer = co.freeside.betamax.tape.yaml.TapeRepresenter@201a503f
YamlTape : constructor = org.yaml.snakeyaml.constructor.Constructor@16e7eec9
YamlTape : dumperOption = org.yaml.snakeyaml.DumperOptions@39d7af3
YamlTape : after readfrom
YamlTapeLoader : inside readFrom : java.io.LineNumberReader@34189cab
YamlTapeLoader : tape : null
Du musst angemeldet sein, um einen Kommentar abzugeben.
Den
withReader
block implizit gibt die Letzte Zeile der Schließung, die in Ihrem Fall ist:Sowie
println
zurücknull
, so ändern Sie den code:Und es sollte funktionieren
Bearbeiten
Ihre
readFrom
Methode den gleichen Fehler hat... es zu Ändern:readFrom
Methode...siehe edit