Java date和datetime应该如何序列化SOAP(xml)消息
我们正在使用第三方SOAP Web服务构建java客户机,也就是说,我无法访问或控制服务器端代码。我们只提供了服务的WSDL描述文件。我们使用的是Axis1(版本1.4) 我们遇到了以下与日期与日期时间序列化和反序列化相关的问题。上述wsdl定义了两种类型DateTime和DateRangeJava date和datetime应该如何序列化SOAP(xml)消息,java,web-services,datetime,soap,xml-serialization,Java,Web Services,Datetime,Soap,Xml Serialization,我们正在使用第三方SOAP Web服务构建java客户机,也就是说,我无法访问或控制服务器端代码。我们只提供了服务的WSDL描述文件。我们使用的是Axis1(版本1.4) 我们遇到了以下与日期与日期时间序列化和反序列化相关的问题。上述wsdl定义了两种类型DateTime和DateRange <xs:element minOccurs="0" name="DateTime" type="xs:dateTime"/> <xs:element minOccurs="0" name=
<xs:element minOccurs="0" name="DateTime" type="xs:dateTime"/>
<xs:element minOccurs="0" name="DateRange">
<xs:complexType>
<xs:sequence>
<xs:element name="Start" type="xs:date"/>
<xs:element name="End" type="xs:date"/>
</xs:sequence>
</xs:complexType>
</xs:element>
axis wsdl2java生成Java对象,其中datetime字段的类型为Calendar,start和end字段的类型为Java.util.Date
发生序列化时,开始和结束字段被序列化为yyyy-mm-dd格式,例如2014-02-01
但当实际调用服务器端时,我们收到以下响应
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">
<SOAP-ENV:Header/>
<SOAP-ENV:Body>
<SOAP-ENV:Fault>
<faultcode>SOAP-ENV:Server</faultcode>
<faultstring xml:lang="en">JiBX unmarshalling exception; nested exception is org.jibx.runtime.JiBXException: Missing 'T' separator in dateTime</faultstring>
</SOAP-ENV:Fault>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
SOAP-ENV:服务器
JiBX解组异常;嵌套异常为org.jibx.runtime.JiBXException:dateTime中缺少“T”分隔符
我们使用SOAPUI直接构建请求xml负载,并观察到,如果我们只传递开始和结束字段中的日期部分,我们将得到完全相同的响应,而如果我们传递这两个字段的时间部分与dateTime字段类似,则不会给出错误消息
这与我可以从XMLSchema文档中获得的信息结合在一起
特别是词汇和规范表达部分,似乎暗示
即使这样,也会以yyyy-mm-dd格式序列化开始和结束,并在结尾处添加一个“Z”。 即使这种序列化格式符合XML模式定义的xs:date,也无法在服务器端反序列化
<ns1:Start>2014-02-05Z</ns1:Start>
2014-02-05Z
有人能确认我们根据观察到的行为、文档和Python的ZSI实验形成的假设是否正确吗。或者,如果我们缺少一些细节,您可以解释DateRange字段的开始和结束,但是消息显然是关于DateTime字段的,这需要(正如XML模式所说)日期部分和时间部分之间的T分隔符,而不是空格或任何其他字符
请检查如何序列化DateTime字段(而不是开始或结束字段!)。它必须是格式
“yyyy-MM-dd'T'HH:MM:ss”
我已经检查过日期时间字段是否正确序列化。正如我通过SOAP UI提到的,我唯一更改的是从2014-02-03格式到2014-02-03T00:00:00格式的开始和结束字段,然后开始working@Himanshu很高兴你找到了解决办法。但我们可能会假设服务器端实现有问题(根据您的描述,这是一个黑匣子)。
<ns1:Start>2014-02-05Z</ns1:Start>