我从外部源获得了一个xsd,我无法控制。现在我们要为JAXB生成的类添加自定义方法,以便对象更多地了解自身,而不是一个带有getter和setter的简单POJO。
这个想法就像我们实施这种方法一样,我们不需要向下钻取水合物体,而是通过调用自定义方法向对象询问我们需要的具体信息,并得到我们想要的东西?
当然,有传统的编程方法,我继续深入研究根对象的孩子们的孩子,为每个孩子调用getter方法并实现业务逻辑。但不知何故,这里的团队不希望这样。
到目前为止,我所做的一种方法是蛮力的方法。就像我使用JAXB从XSD生成类。然后我有一个外部实用程序(现在这是一个独立的java程序),在运行时,将读取一些文本文件(以我们自己的方式构造,以找出应该去哪个方法和.java文件)在特定目录中它包含自定义方法,并将这些方法移动到适当的JAXB生成的类。每次我得到一个新版本的XSD我需要生成类,调用这个实用程序,并可能解决一些编译问题等,以防JAXB生成的类中有一些变量。该实用程序工作得非常好。但我想知道这一点。
有没有更好的方法呢?我检查了互联网。给出了一些解决方案,但这些解决方案只是覆盖了JAXB生成的对象中的现有get方法,而没有添加全新的方法。
请建议。
答案 0 :(得分:1)
嗯,“最干净的方法”是使用面向方面编程(AOP),它在源代码级别但在运行时执行您所描述的内容。它将方法注入到类中。 AOP的一种可能实现是AspectJ
如果XML shema不太复杂,那么第二种替代方案就是在它周围创建一个包装器。
您已经描述过的第三种选择。但我认为你可以依靠标准工具而不是自己编写代码 - 我建议使用标准差异/补丁工具。只要你的代码样式被修复,从现有的修改过的java文件创建diff并将其应用于新生成的JAXB代码就不会太复杂。