4

我正在尝试从一组 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?

4

1 回答 1

2

在 Java 6 及更高版本中,oracle 将 JRE 中嵌入的 JAXB 实现移动到不同的包中,以防止与外部JAXB 参考实现的潜在冲突。

所以这个类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选项。

于 2015-04-22T12:35:20.320 回答