2017-10-18 127 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