Date转换为XMLGregorianCalendar的问题是什么

时间:2014-05-06 15:40:47

标签: java web-services date dozer

我有一个基于SOAP的Web服务,在SOAP响应中有一个XMLGregorianCalendar字段(在响应合同中定义)。

在服务的业务层中,相同的字段定义为Date类型,并且此日期作为XMLGregorianCalendar值映射到SOAP响应XML生成的合同层。

从Business到Contract层的映射是通过Dozer mapper完成的,它使用Date to XMLGregorianCalendar自定义转换器。我目前面临的问题是在某些特定情况下,日期值如下:

Date value being set in Business Layer is 2014-11-15 00:00:00

相同的值转换为

XMLGregorianCalendar value set in contract layer is 2014-11-15T-2147483648:-2147483648:-2147483648

我在SOAP响应中验证了相同的内容,它显示了xml日期值的上述输出。

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

为时间值更改为-2147483648:-2147483648:-2147483648

的任何帮助

某个论坛告诉它Stackoverflow问题,但无法正确地将其与我的问题场景链接,因为在转换器中我没有按时间值进行任何操作。

1 个答案:

答案 0 :(得分:0)

以下代码解释了为什么可能出现像-2147483648(= Integer.MIN_VALUE)这样的奇怪时间字段值(这些值是未定义字段值的符号):

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

您必须检查哪个类或库直接使用字段方法进行打印(显然是一个错误)。我没有在推土机转换器的链接中看到这样的相关代码。所以请看我的答案,作为第一个暗示在哪里看。