2

我正在尝试将现有应用程序的 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 类

有什么建议么?

4

1 回答 1

3

问题 #1

[org.xml.sax.SAXParseException: cvc-datatype-valid.1.2.1: '2012-08-22T00:00:00-04:00' 不是 'date' 的有效值。]

仅通过此消息2012-08-22T00:00:00-04:00不是 XML Schemadate类型的有效值,有效值将2012-08-22没有时间信息。您提供的值将对应于dateTime类型。您使用的其他版本可能只是不执行此验证。

问题 #2

注释类型 XmlElementRef 所需的属性未定义

Java SE 6 包含 JAXB 2.1,您必须在 Java SE 5 中使用 JAXB 2.2,其中@XmlElementRef注解包含required属性。

于 2013-01-08T21:42:17.663 回答