[英]Read a YAML file in Groovy
I am trying to load an existing YAML file (which uses snakeYaml library) in my Groovy project. 我试图在我的Groovy项目中加载现有的YAML文件(使用snakeYaml库)。 I have a class called YamlTape.groovy which contains method to load the YAML file using the following code.
我有一个名为YamlTape.groovy的类,它包含使用以下代码加载YAML文件的方法。
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)
}
}
and trying to call this method from another groovy class. 并尝试从另一个groovy类调用此方法。
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)
}
}
But the tape variable in load tape method always returns null. 但是load tape方法中的tape变量始终返回null。 I have added some logs and found the code is able to access the yaml file but unable to parse Yaml document and return as Java Object.
我添加了一些日志,发现代码能够访问yaml文件,但无法解析Yaml文档并返回为Java Object。
Logs are : 日志是:
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
The withReader
block implicitly returns the last line of the closure, which in your case is: withReader
块隐式返回闭包的最后一行,在您的情况下是:
println "YamlTapeLoader : inside readFrom : "+reader
And println
returns null
, so change the code to: 并且
println
返回null
,因此将代码更改为:
def tape = file.withReader(FILE_CHARSET) { reader ->
def ret = YamlTape.readFrom(reader)
println "YamlTapeLoader : inside readFrom : "+reader
ret // Return the result of YamlTape.readFrom
}
And it should work 它应该工作
Your readFrom
method has the same error... Change it to: 您的
readFrom
方法具有相同的错误...将其更改为:
static YamlTape readFrom(Reader reader) {
try {
println "YamlTape : inside readFrom reader.size() = "+reader+" YamlTape: "+YamlTape
def ret = Yaml.loadAs(reader, YamlTape)
println "YamlTape : after readfrom"
ret // Return the YamlTape
} catch (YAMLException e) {
println "YamlTape : inside catch block"
throw new TapeLoadException('Invalid tape', e)
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.