JAXB如何从JDefinedClass中删除任何内容

时间:2015-09-20 09:01:50

标签: jaxb

我正在使用jaxb从xsd生成代码。

生成的代码包含大量注释;对于课程和领域。

我正在尝试使用com.sun.tools.internal.xjc.Plugin来修改生成的代码。

在插件run()方法中,我们获得了一个Outline类,我们可以从中获取ClassOutlineClassOutline有一个JDefinedClass最终成员,其中包含有关将要生成的实际课程的信息。

如果我想添加任何内容,可以使用JDefinedClass中的apis。但如果我想删除某些东西,就没有办法了。

e.g。我无法清除注释,因为JDefinedClass.annotations()方法返回UnmodifiableCollection。所以我无法清除它或从中移除任何东西。

我尝试通过调用JDefinedClass方法创建另一个_class,但ClassOutline.implClass变量是最终的,所以我无法设置它。

如何获得没有任何注释的JDefinedClass

是否存在另一个代码生成阶段,我可以陷入其中以真正控制JDefinedClass的生成?

2 个答案:

答案 0 :(得分:1)

代码模型确实主要是“只写”。但是,谈到注释,你可能错过了com.sun.codemodel.JDefinedClass.removeAnnotation(JAnnotationUse)com.sun.codemodel.JMethod.removeAnnotation(JAnnotationUse)等方法(从com.sun.codemodel.JAnnotatable.removeAnnotation(JAnnotationUse)实现)。

所以他们在那里。您可以使用常规CodeModel API删除注释。

正如我所看到的,您还可以从类中删除字段和方法。那你到底错过了什么?

答案 1 :(得分:0)

JDefinedClass.annotations()它返回一个不可修改的集合对象,您不能对其进行修改。

为此,您可以在构建JCodeModel之前在类和字段级别限制注释的添加/删除。

您需要创建一个自定义的Jackson2Annotator类,该类扩展了Jackson2Annotator并根据您的要求覆盖它们的方法。

以下是用于特定类型的注释属性的几种方法:

  1. propertyOrder(OTB JsonPropertyOrder)
  2. propertyInclusion(OTB JsonInclude)
  3. propertyField(可用于在字段级别自定义定义的注释)

通过查看Jackson2Annotator类,您可以发现更多适合您的需求。

相关问题