向 JAXB 生成的 POJO 添加解组方法

Add unmarshalling method to JAXB generated POJOs

我有一堆 XSD 我使用 jaxb maven 插件将其转换为 POJO。

出于日志记录的目的,我希望有一个 "unmarshal" 方法直接集成到 JAXB 对象中,这样我就可以调用类似 generatedPOJO.toXMLString() 的方法,知道 generatedPOJO 是通过 JAXB 从 XSD 文件生成的 POJO。

我试图查看 Custom bindings documentation,但一无所获。

感谢您的帮助。

编辑: 我想要的是 JAXB,除了从 XSD 文件生成 POJO 之外,还向这些 POJO 添加了一个 toXMLString() 方法。

此方法需要由 JAXB 生成,因为我无法编辑生成的 POJOS。

总之,不要这样做,这不是一个好的设计。

同时,正如@j.con 指出的那样,可以使用 -xinject-code 或自定义 XJC 插件向生成的 classes 添加更多方法,添加编组方法这不是一个好主意。使用 JAXB API,它会很丑陋。

要执行任何操作,您需要 JAXBContext 的一个实例。您要么将其传递给您的方法,要么在方法中实例化。

后者不太好,因为 JAXBContext 是为 class es 或包(上下文路径)的集合实例化的。因此,您基本上必须进行预设,您的 class 可以与 class 一起使用。这样做,您将失去灵活性。

接下来,JAXB 编组器会产生很多东西,不仅是 strings/stream 结果,还有 DOM 或 SAX 或 StAX。 JAXB API 对此非常满意。只选择字符串似乎是一个短视的选择。

最后,与简单的实用程序服务或 class 相比,我认为添加 toXMLString() 或其他任何语法糖都不算什么。为此侵入代码生成真的感觉像是错位的努力。