Jaxb JXB如何使用不同的代码生成策略
通常,JAXB用于从xsd生成代码,xsd通过注释为xsdJaxb JXB如何使用不同的代码生成策略,jaxb,Jaxb,通常,JAXB用于从xsd生成代码,xsd通过注释为xsdcomplexType生成java类,将其转换为xml,反之亦然 我正在努力实现不同的目标。我想为每个这样的xsd元素生成一个数据映射器类。映射器将用另一个数据类型(比如数据库或其他流)的值映射生成的类的每个字段 所以我需要:对于xsd中的每个用户定义的数据类型,在DataMapperclassmap-()中添加一个方法,并生成方法体 为了实现这一点,我认为在扩展com.sun.tools.internal.xjc.Plugin的插件中生
complexType
生成java类,将其转换为xml,反之亦然
我正在努力实现不同的目标。我想为每个这样的xsd元素生成一个数据映射器类。映射器将用另一个数据类型(比如数据库或其他流)的值映射生成的类的每个字段
所以我需要:对于xsd中的每个用户定义的数据类型,在DataMapper
classmap-()
中添加一个方法,并生成方法体
为了实现这一点,我认为在扩展com.sun.tools.internal.xjc.Plugin
的插件中生成此类是不可能的,因为在run
方法中,我将无法创建新的JDefinedClass
在模型
调用插件
之前,有没有办法添加钩子方法
谢谢,您可以做几件事。我的意思是:
- 在插件中,您可以编写并设置自己的
。字段渲染器从com.sun.tools.xjc.generator.bean.field.FieldRenderFactory
s生成CPropertyInfo
s。这是模型和大纲之间的一步。因此,如果您希望从模型中生成不同的代码,请考虑实现自己的<代码> FieldRendererFactory < /代码>。您可以通过XJC插件注册FieldOutline
(请参阅FieldRenderFactory
)Options.setFieldRenderFactory(…)
- 在类级别上,您可以编写自己的
,并将其用于代码生成com.sun.tools.xjc.generator.bean.BeangGenerator
- 您只需使用
并完全自行生成代码即可。当我为XMLJSON生成JavaScript映射时,我在Jsonix中这样做model
至于您的特定任务,我实际上只是在插件的
run
方法中对代码模型进行后处理。您拥有一切—模型、大纲以及代码模型(请参见outline.getCodeModel()
)。您可以在那里创建JDefinedClass
es,代码模型已经存在。您可以做一些事情。我的意思是:
- 在插件中,您可以编写并设置自己的
。字段渲染器从com.sun.tools.xjc.generator.bean.field.FieldRenderFactory
s生成CPropertyInfo
s。这是模型和大纲之间的一步。因此,如果您希望从模型中生成不同的代码,请考虑实现自己的<代码> FieldRendererFactory < /代码>。您可以通过XJC插件注册FieldOutline
(请参阅FieldRenderFactory
)Options.setFieldRenderFactory(…)
- 在类级别上,您可以编写自己的
,并将其用于代码生成com.sun.tools.xjc.generator.bean.BeangGenerator
- 您只需使用
并完全自行生成代码即可。当我为XMLJSON生成JavaScript映射时,我在Jsonix中这样做model
至于您的特定任务,我实际上只是在插件的
run
方法中对代码模型进行后处理。您拥有一切—模型、大纲以及代码模型(请参见outline.getCodeModel()
)。你完全可以在那里创建你的JDefinedClass
es,代码模型已经存在了。是的,我按照你最后说的那样,定义了我自己的JDefinedClass
并向其中添加了方法。它正处于非常初级的阶段。谢谢是的,正如您在最后所说的,我定义了自己的JDefinedClass
,并向其中添加了方法。它正处于非常初级的阶段。谢谢