JAXB编组:如何将异常信息包含到xml输出文件中?

时间:2011-04-21 13:50:07

标签: jaxb marshalling

我有一个非常基本的应用程序,它使用JAXB marshaller来验证xsd架构的输入信息。我注册验证事件处理程序以获取有关异常的信息。我想要实现的是能够将这些信息包含到我通过封送处理收到的xml输出结构中。我已将异常收集部分包含到我的xsd中,现在我可以在遇到异常时实例化相应的异常对象。问题是考虑到编组过程已经开始的事实,我如何将这个对象附加到我的JAXB生成的其他Java对象结构中?它甚至可能吗?或者我应该在封送完成后尝试修改xml结果吗?任何建议都将受到高度赞赏。 谢谢!

2 个答案:

答案 0 :(得分:1)

有几种方法可以做到这一点:

选项#1 - 向您的根对象添加“例外”属性

  1. 确保最后编组例外属性,这可以使用@OmlType注释上的propOrder进行配置。
  2. 创建一个保留在根对象上的验证处理程序。
  3. 当验证处理程序遇到异常时,将该异常添加到根对象的exceptions属性中。
  4. 选项#2 - 使用XMLStreamWriter

    1. 创建XMLStreamWriter
    2. 写出根元素
    3. 在marshaller上设置验证处理程序,确保它将存储遇到的异常。
    4. 将根对象编组为XMLStreamWriter。
    5. 确定XMLStreamWriter遇到的各个异常。
    6. 写出根元素的结束。

答案 1 :(得分:0)

简答:不。 JAXB旨在获取对象图并生成XML。它并不打算这样做。

更长的答案:您可以在第一次完成JAXB后将异常表示注入图中。

更长的答案:JAX-B有许多插件和自定义技术,您可以使用其中一种技术。但是,很难在问题的抽象层面上对此进行概念化。