Groovy StreamingMarkupBuilder ::在绑定之前进行评估

时间:2015-03-09 11:10:11

标签: xml grails groovy markupbuilder streamingmarkupbuilder

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

0 个答案:

没有答案