将解组方法添加到JAXB生成的POJO

时间:2015-08-06 14:54:37

标签: java xml maven xsd jaxb

我有一堆XSD,我用jaxb maven插件转换成POJO。

出于记录目的,我希望有一个" unmarshal"方法直接集成在JAXB对象中,因此我可以调用generatedPOJO.toXMLString()之类的东西,知道generatedPOJO是通过JAXB从XSD文件生成的POJO。

我试图查看Custom bindings documentation,但我没有得到任何结果。

感谢您的帮助。

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

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

1 个答案:

答案 0 :(得分:2)

简而言之,不要这样做,这不是一个好的设计。

虽然正如@j.con指出的那样,可以使用-xinject-code或自定义XJC插件向生成的类添加更多方法,但添加编组方法并不是一个好主意。使用JAXB API,它会非常难看。

要做任何事情,您需要JAXBContext的实例。要么将它传递给方法,要么在方法中实例化。

后者不是很好,因为JAXBContext被实例化为类或包的集合(上下文路径)。因此,您基本上必须预设,您的课程可以一起使用哪些课程。这样做,你就失去了灵活性。

接下来,JAXB marshallers会产生很多东西,不仅仅是字符串/流结果,还有DOM或SAX或StAX。 JAXB API非常酷。只选择字符串似乎是一个短视的选择。

最后,我认为与简单的公用事业服务或类相比,添加toXMLString()或其他任何东西都是如此甜美的语法糖。而攻击代码生成真的感觉就像是错位的努力。