2

嘿伙计们,希望这里很容易。

我正在从模式中使用 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 ......)

理想情况下,不依赖供应商特定的扩展。

谢谢!

4

2 回答 2

4

JAXB 的 xjc 编译器有一个插件接口,允许开发人员创建插件来修改生成的代码。我个人最喜欢的是 fluent-api,但还有其他可以添加 toString、equals、hashCode 等。

我使用这项技术创建了一个插件来实现访问者模式,并将其作为谷歌代码项目提供。它可能不是您正在寻找的东西,但如果您需要修改它以满足您的需求,它可能是开始审查代码和测试的好地方。

http://code.google.com/p/jaxb-visitor/

于 2011-06-06T11:31:24.450 回答
2

JAX-B 生成的类是标准的 Java 类,您可以按照您希望的任何方式自定义它们,例如扩展接口、添加其他方法等。)。类和属性上的注释是编组和解组过程的驱动因素。

话虽如此,如果您自定义 JAXB 生成的类,则需要考虑一些事情。如每个类的顶部所述“在重新编译源模式时,对此文件的任何修改都将丢失”。简而言之,如果您自定义类,您将需要手动进行代码更改以支持任何模式更新。如果您确实重新生成了类,您的自定义代码将被删除,您将不得不重新开始。

于 2011-02-11T18:01:42.767 回答