我正在尝试将现有应用程序的 Java JDK 版本从 Java 5 更改为 Java 6(更新 38)。该应用程序使用一些 JAXB 生成的类来编组/解组我们从远程服务器发送/接收的 XML。XML 符合模式 (.xsd) 文件。
这一切在 Java 5 下都可以正常工作,在类路径中下载了 JAXB 二进制文件包。我不确定下载的 JAXB 二进制文件的版本是什么(这个项目在我之前就已经在这里了)。如果我只是将 JDK 版本从 Java 5 更改为 Java 6(更新 38),那么我会遇到一些以前从未发生过的单元测试失败,例如:
[org.xml.sax.SAXParseException: cvc-datatype-valid.1.2.1: '2012-08-22T00:00:00-04:00' is not a valid value for 'date'.]
我想我可以通过将 Java 6 JDK 移动到类路径的头部来解决这个问题,因此它位于外部 JAXB 二进制文件之前。这会产生编译时错误,例如:
The attribute required is undefined for the annotation type XmlElementRef
在我的一个 JAXB 生成的类(基于 .xsd 文件)上报告了此错误。该错误是由此注释行引起的:
@XmlElementRef(name = "DealCalendarId", type = JAXBElement.class, required = false)
所以,我不确定接下来我需要做什么。我有几个想法:
- 删除下载的 JAXB 二进制文件并仅依赖 Java 6 SE 中的内置 JAXB 支持(但我似乎记得前段时间这在项目上不起作用......)
- 将下载的 JAXB 二进制文件替换为较新的版本
- 将下载的 JAXB 二进制文件替换为较新版本,并将 Java 6 JDK 放在类路径中
- 执行上述操作之一,并重新生成我所有基于 .xsd 的 JAXB 类
有什么建议么?