如何调试由于身份约束违规导致的JAXB Marshaling失败

时间:2018-02-07 13:47:31

标签: java xml jaxb

我正在尝试使用JAXB Marshaling将Java对象树写入XML。 marshal API调用失败,日志中出现以下错误:

javax.xml.bind.MarshalException
 - with linked exception:
[org.xml.sax.SAXParseException; lineNumber: 0; columnNumber: 0; Duplicate unique value [ar-AE] declared for identity constraint of element "source-language".]
 at com.sun.xml.internal.bind.v2.runtime.MarshallerImpl.write(MarshallerImpl.java:311)

我知道对象中有一些违反唯一值约束的数据。 Java对象是从包含所述约束的XSD文件生成的。

我需要一些方法来查看对象树中的数据,并识别重复的值,以便可以在数据源处解析它们。

有没有简单的方法将Java对象数据输出到字符串或日志文件?

Java对象是从XSD架构生成的,不包含一个合理的toString方法,我可以在树的根对象上调用它并获取所有数据的转储。我需要编写自定义代码来迭代树中的所有对象并打印出相关字段。

理想情况下,我希望在JAXB中有一些方法可以暂时忽略约束验证,并为对象树生成XML。

1 个答案:

答案 0 :(得分:0)

我找到了几种方法来解决这个问题

一种方法是添加toString方法。默认情况下,不会为从XSD文件生成的Java类生成toString方法。但是可以使用JAXB basics插件项目添加它们。查看此项目 - https://github.com/highsource/jaxb2-basics

另一种只是在编组时切换XSD验证。 (应该首先想到这一点)

使用任何一种方法,我都可以记录数据,并检查导致验证检查手动失败的原因。