我们在SOAP API中将日期限制为xs:date,其模式为'\ d {4}-\ d {2}-\ d {2}'。我们能够使用SOAP UI对其进行测试,并且运行良好。当客户端应用程序调用我们的API时,我们将获取日期字段值作为时间戳,这是因为我们的架构验证会引发错误并生成SOAP Fault。
我们正在使用JAX-WS规范API来实现我们的Web服务(Websphere作为应用程序服务器),并使用WAS默认实现。
在客户端SOAP日志中,日期值打印为'1990-01-01',但在我们的应用程序SOAP日志中,日期值打印为'1990-01-01T06:00:00.000Z' 。 (客户端使用Metro JAX-WS实现)。我在这里想念什么?
之所以发生这种情况,是因为WebSphere(版本8.5.5,修订包16)在移交给SOAP处理程序之前处理/转换了SOAP XML。要禁用它并在处理程序中使用SOAP XML,我们将WAS属性jaxws.payload.highFidelity
设置为true
。此后,我们将获得正确的SOAP XML,并且XML模式验证可以按预期进行。