2017-10-18 112 views
0

如何将XML XML响应以XML格式存储在数据库中?以xml格式在数据库中存储soap xml响应

我试图将soap响应存储在Java对象中,并编组为XML以存储在SQL数据库中。它工作正常,但日期有问题,这是在编组后即日期即2017-10-10-05:00。所以这就造成了一个问题。 任何人都可以告诉我,如果有另一种方法在XML数据库中以XML格式存储Soap XML响应。

+0

这是XML无效的日期格式。你需要通过转换来使其正确。那'05:00'是什么意思?是时候了?比它必须像'2017-10-10T05:00:00'你需要转换,如果适当的XML日期或dateTime格式。如果你使用JAXB,你可以看看我的答案在那里得到一个想法如何做到这一点 https://stackoverflow.com/questions/40549526/replacing-date-of-type-xmlgregoriancalendar-generated-by-wsdl-to- java-util-date/40550469#40550469 – Vadim

+0

从肥皂申请获得日期在适当的格式为2017-10-10。 所做的是,设置对java对象的响应,并通过使用jaxb将java对象转换为文本(使用xml格式)。当我将java对象转换为文本时,日期通过将时间添加为2017-10-10-05:00来更改,这给了我一个错误的日期。 是否有任何其他方法来存储肥皂响应,就像数据库像肥皂等等。 – Goutham

回答

0

好吧,我错了。 格式是正确的XML,它是一个时区。 这种输出产生从默认 javax.xml.bind.DatatypeConverter.printDate(Calendar val)方法。 (这意味着您的XSD具有该元素的xs:date类型)。

所以,只要你不希望有日期作为字符串中的时区信息,我猜测你下一步选择:

  1. 创建您自己的转换器和装订文件中定义它(截至我在评论中给出的链接) - 小心使该转换器成为全球。如果您不需要将它应用于所有xsd:date字段,绑定将会非常复杂。

  2. 如果它是关于一个领域,在回答有链接更好看:

JAXB unmarshaller with custom interceptor? 它是有效的Marshaller为好。

Jaxb Marshaller没有处理程序或回调拦截器。 Java类中的Annotations的所有控件或绑定文件。

  • 如果它是大约只有一个字段(简单的“粗暴”的方式) - 存储该XML作为字符串从数据库领域需要在代码中移除时区之前。

  • 如果您不在代码中将Pojo编组为字符串,但某些框架会在前往数据库的过程中为您执行此操作,请检查该框架是否可以操纵有效内容的拦截器。通常他们在那里。

  • 首选正确的选项:1(如果它适用于所有xsd:日期字段)或2如果它只是关于一个字段。

    +0

    你是对的Vadim,我的xsd有xs:date元素javax.xml.bind.DatatypeConverter。但这是由其他系统给出的。我们不写xsd或wsdl,它是由其他系统给出的。 它不是针对一个字段,因为所有日期字段都获得相同的格式。 让我跟他们核对一下。 谢谢澄清我的怀疑瓦迪姆。谢谢。 – Goutham

    +0

    不客气。但我认为从其他系统处理XSD没有任何问题。问题是如何将该XML存储在数据库中?数据库抱怨该字段?其他系统如何使用该XML?要点是这两种格式都有或没有时区是有效的,任何合适的解析器都必须理解这两种格式。区别仅在于:没有运行解析器的时区服务器使用当前时区。你有2017-10-10-05:00(这是美国中部地区),但如果现在带有时区的领域将传递到加利福尼亚州,它不会在2017-10-10在那里,但2017-10-09T22:00: 00-07:00。 – Vadim

    +0

    是的,这与其他系统无关。我存储的响应与在soap ui中显示的xml格式相同。我想我们通过做一些日期转换来实现这一点。 – Goutham