JXB如何使用不同的代码生成策略

时间:2015-09-21 08:51:41

标签: jaxb

通常,JAXB用于从xsd生成代码,xsd为带有注释的xsd complexType生成java类,将其转换为xml,反之亦然。

我正在努力实现不同的目标。我想,为每个这样的xsd元素生成一个数据映射器类。映射器将使用另一种数据类型(例如来自数据库或其他流)的值映射生成的类的每个字段

所以我需要:对于xsd中的每个用户定义的数据类型,在DataMappermap-<XSD-ComplexDataType-Class>()中添加一个方法并生成方法体。

要实现这一点,我认为不能像com.sun.tools.internal.xjc.Plugin方法那样在扩展run的插件中生成此类,我将无法创建新的JDefinedClass < / p>

有没有办法在Model调用Plugins之前添加一个钩子方法?

感谢,

1 个答案:

答案 0 :(得分:0)

您可以做一些事情。在my other answer我特别指出这些:

  • 在插件中,您可以编写并设置自己的com.sun.tools.xjc.generator.bean.field.FieldRendererFactory。字段渲染器从FieldOutline生成CPropertyInfo s。这是模型和大纲之间的一个步骤。因此,如果您希望从模型中生成不同的代码,请考虑实现自己的FieldRendererFactory。您可以通过XJC插件注册FieldRendererFactory(请参阅Options.setFieldRendererFactory(...))。
  • 在课程级别,您可以编写自己的com.sun.tools.xjc.generator.bean.BeanGenerator并将其用于代码生成。
  • 您可以使用model并完全自行生成代码。当我为XML&lt; - &gt; JSON生成JavaScript映射时,我在Jsonix中执行此操作。

至于你的具体任务,我实际上只是在插件的run方法中对代码模型进行后处理。您拥有所有内容 - modeloutline以及代码模型(请参阅outline.getCodeModel())。你绝对可以在那里创建JDefinedClass,代码模型已经存在。