jaxb – xjc从sun内部包生成代码引用OverrideAnnotationOf注释

我正在尝试从一组
XML模式生成
Java类.以下绑定文件用于处理模式中的混合内容:

<?xml version="1.0" encoding="UTF-8"?>
<jaxb:bindings
 xmlns:jaxb="http://java.sun.com/xml/ns/jaxb" jaxb:version="2.1"
 xmlns:xjc= "http://java.sun.com/xml/ns/jaxb/xjc" jaxb:extensionBindingPrefixes="xjc">
  <jaxb:globalBindings generateMixedExtensions="true"/>
</jaxb:bindings>

代码生成工作正常,但其中一个生成的类具有com.sun.xml.internal.bind.annotation包中的@OverrideAnnotationOf.这个包包含在rt.jar中,但是常规的java编译器找不到它(并且可能不应该找到它,因为它是sun内部的).

有没有办法处理混合内容,而不是在生成的代码中从sun内部包中获取OverrideAnnotationOf?

最佳答案 在Java 6及更高版本中,oracle将嵌入在JRE中的JAXB实现移动到不同的包中,以防止与外部
JAXB reference implementation的潜在冲突.

因此,类overrideAnnotationOf已从包com.sun.xml.bind.annotation移动到包com.sun.xml.internal.bind.annotation.

但是,嵌入式xjc仍会生成使用com.sun.xml.bind.annotation.OverrideAnnotationOf(!)注释的java文件.

因此,Java 7附带的JAXB实现将无法理解使用generateMixedExtensions =“true”生成的自己的输出.即使您使用-XDignore.symbol.file选项.

点赞