XMLGregorianCalendar小时转换为xs:date时的最大负整数

时间:2014-08-19 07:34:49

标签: java web-services soap wsdl wsdl2java

我使用cxf的wsdl2java来创建java存根以使用外部Web服务,它使用日期作为XMLGregorianCalendar,其中在wsdl中它们是xs:date。看了之后这似乎是正确的。

我可以毫无问题地调用Web服务,但是当我发送日期时,响应附带的请求副本在小时,分钟,秒和时区字段中总是有-2,147,483,648,这使我的日期成为可能非常错!由于Web服务旨在响应与我的请求匹配的数据,因此它当然会给我错误的信息。

我正在查看我实际发送的内容(请参阅Viewing SOAP request from Java client),但无法下载任何额外的软件,并且遇到处理程序问题。至于java的调试,我不是从java发送这些值,但我不知道它是否是我生成的java转换为soap请求转换的转换问题,或者它是否在外部服务。

有没有人有任何关于调试此问题的建议,或者之前有人用wsdl2java和XMLGregorianCalendar看到xs:date?

1 个答案:

答案 0 :(得分:0)

解决了我自己的问题 -

值-2,147,483,648也是常量DatatypeConstants.FIELD_UNDEFINED使用的值,所以为了使我的日期与Web服务使用的日期匹配,我必须在XMLGregorianCalendar中设置我的时间字段,如此

GregorianCalendar calendar = new GregorianCalendar();
calendar.setTime(date);
XMLGregorianCalendar xmlDate =  DatatypeFactory.newInstance().newXMLGregorianCalendar(calendar);   
xmlDate.setMillisecond(DatatypeConstants.FIELD_UNDEFINED);  

我假设0将等同于undefined,但事实并非如此。