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

Jaxb JXB如何使用不同的代码生成策略,jaxb,Jaxb,通常,JAXB用于从xsd生成代码,xsd通过注释为xsdcomplexType生成java类,将其转换为xml,反之亦然 我正在努力实现不同的目标。我想为每个这样的xsd元素生成一个数据映射器类。映射器将用另一个数据类型(比如数据库或其他流)的值映射生成的类的每个字段 所以我需要:对于xsd中的每个用户定义的数据类型,在DataMapperclassmap-()中添加一个方法,并生成方法体 为了实现这一点,我认为在扩展com.sun.tools.internal.xjc.Plugin的插件中生

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

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

所以我需要:对于xsd中的每个用户定义的数据类型,在
DataMapper
class
map-()
中添加一个方法,并生成方法体

为了实现这一点,我认为在扩展
com.sun.tools.internal.xjc.Plugin
的插件中生成此类是不可能的,因为在
run
方法中,我将无法创建新的
JDefinedClass

模型
调用
插件
之前,有没有办法添加钩子方法


谢谢,

您可以做几件事。我的意思是:

  • 在插件中,您可以编写并设置自己的
    com.sun.tools.xjc.generator.bean.field.FieldRenderFactory
    。字段渲染器从
    CPropertyInfo
    s生成
    FieldOutline
    s。这是模型和大纲之间的一步。因此,如果您希望从模型中生成不同的代码,请考虑实现自己的<代码> FieldRendererFactory < /代码>。您可以通过XJC插件注册
    FieldRenderFactory
    (请参阅
    Options.setFieldRenderFactory(…)
  • 在类级别上,您可以编写自己的
    com.sun.tools.xjc.generator.bean.BeangGenerator
    ,并将其用于代码生成
  • 您只需使用
    model
    并完全自行生成代码即可。当我为XMLJSON生成JavaScript映射时,我在Jsonix中这样做

至于您的特定任务,我实际上只是在插件的
run
方法中对代码模型进行后处理。您拥有一切—模型、大纲以及代码模型(请参见
outline.getCodeModel()
)。您可以在那里创建
JDefinedClass
es,代码模型已经存在。

您可以做一些事情。我的意思是:

  • 在插件中,您可以编写并设置自己的
    com.sun.tools.xjc.generator.bean.field.FieldRenderFactory
    。字段渲染器从
    CPropertyInfo
    s生成
    FieldOutline
    s。这是模型和大纲之间的一步。因此,如果您希望从模型中生成不同的代码,请考虑实现自己的<代码> FieldRendererFactory < /代码>。您可以通过XJC插件注册
    FieldRenderFactory
    (请参阅
    Options.setFieldRenderFactory(…)
  • 在类级别上,您可以编写自己的
    com.sun.tools.xjc.generator.bean.BeangGenerator
    ,并将其用于代码生成
  • 您只需使用
    model
    并完全自行生成代码即可。当我为XMLJSON生成JavaScript映射时,我在Jsonix中这样做

至于您的特定任务,我实际上只是在插件的
run
方法中对代码模型进行后处理。您拥有一切—模型、大纲以及代码模型(请参见
outline.getCodeModel()
)。你完全可以在那里创建你的
JDefinedClass
es,代码模型已经存在了。

是的,我按照你最后说的那样,定义了我自己的
JDefinedClass
并向其中添加了方法。它正处于非常初级的阶段。谢谢是的,正如您在最后所说的,我定义了自己的
JDefinedClass
,并向其中添加了方法。它正处于非常初级的阶段。谢谢