我花了一天时间调试JAXB的问题,让命名空间错误或丢失(可能与Marshaller.JAXB_FRAGMENT相关,但这不是重点).
我发现在我的背书目录中JAXB RI 2.1.10出现问题.
如果我使用JAXB RI 2.2.4或2.2.6,它是固定的
这是真正令人困惑的东西(以及它花了这么长时间).
在以下JDK中使用JAXB的Linux上发生此问题(即没有任何背书):
$ java -version
java version "1.7.0_03"
OpenJDK Runtime Environment (IcedTea7 2.1.1pre) (7~u3-2.1.1~pre1-1ubuntu2)
OpenJDK 64-Bit Server VM (build 22.0-b10, mixed mode)
$ xjc -version
xjc 2.2.4
Run Code Online (Sandbox Code Playgroud)
但它应该工作正常,如果这个java真的使用相同的JAXB作为RI 2.2.4 !!
请注意,我调试的问题与xjc无关; 我只是使用该命令来确定我正在使用的JAXB版本.
同样,我无法使用Java 1.6.0_27在Windows上重现该问题(我的背书目录中没有任何内容),它报告:
C:\Program Files\Java\jdk1.6.0_27\bin>java -version
java version "1.6.0_27"
Java(TM) SE Runtime Environment (build 1.6.0_27-b07)
Java HotSpot(TM) 64-Bit Server VM (build 20.2-b06, mixed mode)
C:\Program Files\Java\jdk1.6.0_27\bin>xjc -version
xjc version "JAXB 2.1.10 in JDK 6"
JavaTM Architecture for XML Binding(JAXB) Reference Implementation, (build JAXB 2.1.10 in JDK 6)
Run Code Online (Sandbox Code Playgroud)
然而如果我把2.1.10 RI放在我认可的目录中,问题就出现了.它应该发生在1.6.0_27,如果它真的使用相当于JAXB RI 2.1.10.
在我看来,我遇到的问题已经在2.1.10之后和2.2.4之前的某个地方的参考实现中得到修复,但是上面的两个虚拟机实际上都没有使用他们声称的JAXB版本.或者,也许他们使用他们声称的XJC,但是不知道是在JAXB-api.jar文件和JAXB - impl.jar中(我知道有一个命名空间中的前缀映射属性,并在包名称的差别,但不会是造成这个问题).
我已经在Win 7和Ubuntu,tomcat(没有eclipse)和eclipse(没有tomcat)上完成了这些实验,所以我非常有信心我正确地解释了我的发现.
任何人都可以提供有关正在发生的事情的任何见解
如果我是对的,有谁知道各种Sun/Oracle JDK真正使用的JAXB版本是什么?
可以信赖吗xjc -version
?
是的。它将为您提供 XJC 工具的版本。
可以xjc -version
信任提供JAXB (JSR-222)运行时实现的版本吗?
不:
JDK/JRE 中包含的 JAXB RI 和 JAXB Impl
Java SE 实现(版本 6 及更高版本)需要包含 JAXB (JSR-222) 版本。通常(但不是必须)包含的是JAXB RI 的重命名版本的包。因此,如果您运行以下命令:
import javax.xml.bind.JAXBContext;
public class Demo {
public static void main(String[] args) throws Exception {
JAXBContext jc = JAXBContext.newInstance(Demo.class);
System.out.println(jc.getClass());
}
}
Run Code Online (Sandbox Code Playgroud)
你得到:
class com.sun.xml.internal.bind.v2.runtime.JAXBContextImpl
Run Code Online (Sandbox Code Playgroud)
如果您下载JAXB-RI的一个版本并将其添加到您的类路径中并重新运行相同的演示代码,输出将更改为以下内容:
class com.sun.xml.bind.v2.runtime.JAXBContextImpl
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
2599 次 |
最近记录: |