我有一个基于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这个问题即将到来。 Date
到XMLGregorianCalendar
的自定义转换器与dozer in this link指定的相同。
为时间值更改为-2147483648:-2147483648:-2147483648
某个论坛告诉它Stackoverflow问题,但无法正确地将其与我的问题场景链接,因为在转换器中我没有按时间值进行任何操作。
答案 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
您必须检查哪个类或库直接使用字段方法进行打印(显然是一个错误)。我没有在推土机转换器的链接中看到这样的相关代码。所以请看我的答案,作为第一个暗示在哪里看。