我使用StreamingMarkupBuilder生成XML。 我试图考虑我的数据中是否存在错误的情况,导致NullPointerException。这就是我目前建立数据的方式:
def xml = new StreamingMarkupBuilder()
...
def records = Package.findAll()
def resp = { mkp ->
...
records.each{ rec ->
buildMetadata(rec, mkp, result, metadataPrefix, prefixHandler)
}
}
xml.bind(resp)
当我在buildMetadata中获取NPE时,该过程将在中途停止,从而生成无效的XML。
我需要的是不要包含错误的记录,所以我尝试这样的事情:
records.each{ rec ->
def single_rec_builder = { builder ->
buildMetadata(rec, builder, result,metadataPrefix,prefixHandler)
}
try{
mkp.bind(single_rec_builder)
}catch(Exception e){
log.debug("Caught exception ${e.class} and continue")
}
因此,在我的方法中,我尝试分解添加到主结构中的部分,因此我可以省略错误的记录。
评估发生在.bind()
来电,这已经太晚了。如果我之前尝试强制进行评估,可以在def output = new StreamingMarkupBuilder().bind(single_rec_builder)
之前添加类似mkp.bind()
之类的东西,我会得到命名空间错误,因为这些是早先在mkp上定义的。是否有某种“干运行”或其他更好的解决这个问题的方法?