我正在使用架构中的JAXB生成类,我希望能够使用访问者模式处理它们。
要做到这一点,我想我需要每个JAXB生成的类来实现我定义的接口,并为它们添加一个非常简单的方法,所以一个简单的例子就是:
默认课程:
public class MyClass {
private String name;
public void get/setName() {...}
}
所需课程:
public class MyClass implements MyVisitorNode {
private String name;
public void get/setName() {...}
public void accept(MyVisitorVisitor visitor) {
visitor.visit(this);
}
}
这是可能的,如果可以,有哪些选择? (更改架构,运行时字节码操作,以某种方式操纵JAXBContext ...)
理想情况下,不依赖于特定于供应商的扩展。
谢谢!
答案 0 :(得分:4)
JAXB的xjc编译器有一个插件接口,允许开发人员创建修改生成的代码的插件。我个人最喜欢的是fluent-api,但还有其他人可以添加toString,equals,hashCode等。
我使用此技术创建了一个插件来实现访问者模式,并将其作为Google代码项目提供。它可能不是您正在寻找的,但如果您需要根据自己的需要进行修改,它可能是开始查看代码和测试的好地方。
答案 1 :(得分:2)
JAX-B生成的类是标准的Java类,您可以以任何方式自定义,例如,扩展接口,添加其他方法等。)。类和属性的注释是编组和解组过程的驱动因素。
如上所述,如果您自定义JAXB生成的类,则需要考虑一些事项。如每个类顶部所述“重新编译源模式时将丢失对此文件的任何修改”。简而言之,如果您自定义类,则需要手动进行代码更改以支持任何架构更新。如果您重新生成了类,那么您的自定义代码将被删除,您必须从头开始。