Java 将日期转换为XMLGregorianCalendar有什么问题

Java 将日期转换为XMLGregorianCalendar有什么问题,java,web-services,date,dozer,Java,Web Services,Date,Dozer,我有一个基于SOAP的Web服务,在SOAP响应中,响应契约中定义了一个XMLGregorianCalendar字段 在服务的业务层中,同一字段被定义为日期类型,该日期作为XMLGregorianCalendar值映射到契约层,以生成SOAP响应XML 从业务层到合同层的映射是通过Dozer mapper完成的,该mapper使用日期到XMLGregorianCalendar自定义转换器。我目前面临的问题是在某些特定场景中,日期值如下所示: 在业务层中设置的日期值为2014-11-15 00:0

我有一个基于SOAP的Web服务,在SOAP响应中,响应契约中定义了一个XMLGregorianCalendar字段

在服务的业务层中,同一字段被定义为日期类型,该日期作为XMLGregorianCalendar值映射到契约层,以生成SOAP响应XML

从业务层到合同层的映射是通过Dozer mapper完成的,该mapper使用日期到XMLGregorianCalendar自定义转换器。我目前面临的问题是在某些特定场景中,日期值如下所示:

在业务层中设置的日期值为2014-11-15 00:00:00

并将相同的值转换为

合同层中设置的XMLGregorianCalendar值为2014-11-15T-2147483648:-2147483648:-2147483648

我在SOAP响应中验证了这一点,它显示了xml日期值的上述输出

在其他情况下,如2014-11-15 01:00:00,我可以在SOAP响应中看到预期值。 当时间是00:00:00时,这个问题就来了。日期到XMLGregorianCalendar的自定义转换器与指定的相同

时间值更改为-2147483648:-2147483648:-2147483648:-2147483648的原因有何帮助


一些论坛告知其存在Stackoverflow问题,但无法将其与我的问题场景正确链接,因为在converter中,我没有对时间值进行任何操作。

以下代码解释了为什么可能存在诸如-2147483648=Integer.MIN\u值之类的奇怪时间字段值这些值是未定义字段值的符号:

XMLGregorianCalendar xml =
    DatatypeFactory.newInstance().newXMLGregorianCalendar("2014-02-05");
System.out.println(xml.toString());
System.out.println(xml.getHour());
System.out.println(xml.getMinute());
System.out.println(xml.getSecond());
输出:

2014-02-05
-2147483648
-2147483648
-2147483648

您必须检查哪个类或库直接使用字段方法来打印明显的bug。我还没有看到这样的相关代码在您的链接推土机转换器。因此,请将我的答案作为第一个提示查看位置。

XMLGregorianCalendar将其用于未定义的小时、分钟和秒字段值。