【发布时间】:2015-09-20 09:01:50
【问题描述】:
我正在使用 jaxb 从 xsd 生成代码。
生成的代码包含很多注解;用于类和字段。
我正在尝试使用com.sun.tools.internal.xjc.Plugin 来修改生成的代码。
在插件run() 方法中,我们得到一个Outline 类,我们可以从中获取ClassOutline。 ClassOutline 有一个 JDefinedClass final 成员,其中包含将生成的实际类的信息。
如果我想添加任何东西,JDefinedClass 中有可以使用的 api。但是如果我想删除一些东西,那就没有办法了。
例如我无法清除注释,因为JDefinedClass.annotations() 方法返回UnmodifiableCollection。所以我无法清除它或从中删除任何东西。
我尝试通过调用_class 方法创建另一个JDefinedClass,但ClassOutline.implClass 变量是最终变量,所以我无法设置它。
如何获得没有任何注释的JDefinedClass?
我可以进入另一个代码生成阶段来真正控制JDefinedClass的生成吗?
【问题讨论】:
-
简短回答:您需要从模型中删除内容,而不是从代码模型中删除。答案很长。
-
我看到有一个
postProcessModel方法,以Model作为输入。我看到如何可以操纵这个Model来删除注释 -
我看到
BeanGenerator在调用implClass.annotate2之前没有做任何检查。没有办法停止它的调用 -
我终于做到了。从
_package中删除了每个JDefinedClass。添加了具有相同名称的新JDefinedClass,并从原始JDefinedClass复制了implements、extends、fileds、methods、javadoc等。有点乏味,但找不到其他事情可做。
标签: jaxb