我正在使用 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 上定义的。是否有某种“空运行”或另一种更好的方法来解决这个问题?