0

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

4

0 回答 0