JAXB';日期';从Java5SE迁移到Java6SE后转换失败

JAXB';日期';从Java5SE迁移到Java6SE后转换失败,java,xsd,jaxb,Java,Xsd,Jaxb,我正在尝试将现有应用程序的JavaJDK版本从Java5更改为Java6(更新38)。应用程序使用一些JAXB生成的类来封送/解封我们从远程服务器发送/接收的XML。XML符合架构(.xsd)文件 在Java5环境下,通过类路径中下载的JAXB二进制文件包,这一切都可以正常工作。我不确定下载的JAXB二进制文件的版本是什么(这个项目在我之前就已经存在了)。如果我只是将JDK版本从Java 5更改为Java 6(更新38),那么我会遇到一些以前从未发生过的单元测试失败,例如: [org.xml.s

我正在尝试将现有应用程序的JavaJDK版本从Java5更改为Java6(更新38)。应用程序使用一些JAXB生成的类来封送/解封我们从远程服务器发送/接收的XML。XML符合架构(.xsd)文件

在Java5环境下,通过类路径中下载的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'.]
The attribute required is undefined for the annotation type XmlElementRef
我想我可以通过将Java6JDK移动到类路径的头部来解决这个问题,这样就可以在外部JAXB二进制文件之前找到它。产生编译时错误的,例如:

[org.xml.sax.SAXParseException: cvc-datatype-valid.1.2.1: '2012-08-22T00:00:00-04:00' is not a valid value for 'date'.]
The attribute required is undefined for the annotation type XmlElementRef
这个错误是在我的一个JAXB生成的类(基于.xsd文件)上报告的。此错误是由以下注释行引起的:

@XmlElementRef(name = "DealCalendarId", type = JAXBElement.class, required = false)
所以,我不确定我下一步需要做什么。我有一些想法:

  • 删除下载的JAXB二进制文件,只依赖Java6SE中的内置JAXB支持(但我似乎记得这在不久前的项目中不起作用…)
  • 用新版本替换下载的JAXB二进制文件
  • 用更新的版本替换下载的JAXB二进制文件,并在类路径中将Java6JDK放在它们之后
  • 执行上述操作之一,并重新生成所有基于.xsd的JAXB类
有什么建议吗?

问题1

[org.xml.sax.SAXParseException:cvc数据类型有效。1.2.1: “2012-08-22T00:00:00-04:00”不是“日期”的有效值。]

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

第2期

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


Java SE 6包含JAXB 2.1,您一定在Java SE 5中使用过JAXB 2.2,其中
@xmlementref
注释包含
required
属性。

非常感谢您花时间帮助我Blaise。我明天去办公室看看。两种情况都正确。我不知道为什么旧版本的JAXB允许将这些时间戳解组为xs:date,但它确实做到了。我修复了我的单元测试数据,删除了时间组件,一切都很好。我下载了当前的JAXB版本(版本2.2.6),看起来一切正常。再次感谢!我相信您已经创建了一个绑定文件,它在datetime XML数据类型上创建了一个适配器,我刚刚删除了它,并再次生成了JAXB类,java数据类型从Date转换为XMLGregorianType。