通常,JAXB用于从xsd生成代码,xsd为带有注释的xsd complexType
生成java类,将其转换为xml,反之亦然。
我正在努力实现不同的目标。我想,为每个这样的xsd元素生成一个数据映射器类。映射器将使用另一种数据类型(例如来自数据库或其他流)的值映射生成的类的每个字段
所以我需要:对于xsd中的每个用户定义的数据类型,在DataMapper
类map-<XSD-ComplexDataType-Class>()
中添加一个方法并生成方法体。
要实现这一点,我认为不能像com.sun.tools.internal.xjc.Plugin
方法那样在扩展run
的插件中生成此类,我将无法创建新的JDefinedClass
< / p>
有没有办法在Model
调用Plugins
之前添加一个钩子方法?
感谢,
答案 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
方法中对代码模型进行后处理。您拥有所有内容 - model
,outline
以及代码模型(请参阅outline.getCodeModel()
)。你绝对可以在那里创建JDefinedClass
,代码模型已经存在。