【问题标题】:Store soap Xml response in database in xml format将soap Xml响应以xml格式存储在数据库中
【发布时间】:2017-10-18 20:35:20
【问题描述】:

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

我尝试将肥皂响应存储在 Java 对象中并编组为 XML 以存储在 SQL 数据库中。它工作正常,但是编组后存储的日期存在问题,即日期为 2017-10-10-05:00。所以这是一个问题。 谁能告诉我是否有另一种方法可以将 Soap XML 响应以 XML 格式存储在 oracle 数据库中。

【问题讨论】:

  • XML 的日期格式无效。您需要通过转换它来使其正确。 05:00 是什么意思?是时间?比它必须像 2017-10-10T05:00:00 您需要将 if 转换为正确的 XML 日期或 dateTime 格式。如果您使用 JAXB,您可以在那里查看我的答案以了解如何做到这一点stackoverflow.com/questions/40549526/…
  • 从soap响应中得到正确格式的日期为2017-10-10。我正在做的是,设置对 java 对象的响应,并使用 jaxb 将 java 对象转换为文本(xml 格式)。当我将 java 对象转换为文本时,通过将时间添加为 2017-10-10-05:00 来更改日期,这给了我一个错误的日期。有没有其他方法可以像soaphandlers等数据库一样存储soap响应。

标签: java xml web-services soap


【解决方案1】:

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

所以,只要您不想将 Date 中的时区信息作为字符串,我想您有下一个选择:

  1. 创建您自己的转换器并在绑定文件中定义它(如我在 cmets 中提供的链接) - 小心使该转换器全局化。如果您不需要将其应用于所有xsd:date 字段绑定将相当复杂。

  2. 如果是关于一个领域,最好看看那里的答案中的链接:

JAXB unmarshaller with custom interceptor? 对 Marshaller 也有效。

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

  1. 如果只有一个字段(简单的“残酷”方式)- 在将该 XML 作为字符串存储到数据库之前,请从代码中的所需字段中删除时区。

  2. 1234563通常他们在那里。

首选正确选项:1(如果适用于所有 xsd:date 字段)或 2(如果仅适用于一个字段)。

【讨论】:

  • 你是对的 Vadim,我的 xsd 有 xs:date 元素 javax.xml.bind.DatatypeConverter。但这是由另一个系统给出的。我们不是写 xsd 或 wsdl,它是由其他系统给出的。它不适用于一个字段,因为所有日期字段都采用相同的格式。让我与他们核实一下。感谢您澄清我的疑问 Vadim。谢谢。
  • 不客气。但我认为没有什么可以处理来自其他系统的 XSD。问题是如何将 XML 存储在数据库中?数据库是否抱怨该字段?其他系统如何使用该 XML?关键是带或不带时区的两种格式都是有效的,任何适当的解析器都必须理解两者。区别仅在于:没有运行解析器的时区服务器,使用当前时区。你有 2017-10-10-05:00 (它是美国中部),但如果现在带有时区的那个字段将传递到加利福尼亚,它不会是 2017-10-10,而是 2017-10-09T22:00: 00-07:00。
  • 是的,与其他系统无关。我存储的响应与显示在soap ui中的xml格式相同。我认为我们通过进行一些日期转换来实现这一点。
猜你喜欢
  • 2012-07-24
  • 1970-01-01
  • 1970-01-01
  • 2013-06-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-09
相关资源
最近更新 更多