gpt4 book ai didi

java - 从 Java 5 SE 迁移到 Java 6 SE 后,JAXB 'date' 转换失败

转载 作者:行者123 更新时间:2023-12-04 05:16:16 26 4
gpt4 key购买 nike

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

    有什么建议吗?

    最佳答案

    问题 #1

    [org.xml.sax.SAXParseException: cvc-datatype-valid.1.2.1: '2012-08-22T00:00:00-04:00' is not a valid value for 'date'.]



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

    问题 #2

    The attribute required is undefined for the annotation type XmlElementRef



    Java SE 6 包含 JAXB 2.1,您一定已经将 JAXB 2.2 与 Java SE 5 一起使用,其中 @XmlElementRef注释包含 required属性(property)。

    关于java - 从 Java 5 SE 迁移到 Java 6 SE 后,JAXB 'date' 转换失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14223852/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com