2013-05-22 54 views
1

這更多的是一種高層次的問題有關使用JAXB和XSLT,因爲我試圖獲得更多的什麼,我需要做一個瞭解,我需要更多地瞭解。XSD架構更改,XSLT和向後兼容性

我繼承有(使用JAXB)從XSD模式生成Java類文件,做一些事情的應用程序,然後寫入這些對象序列化的一個「保存文件」。

我現在需要更改到xsd,這當然意味着一些原本我生成的類將被更新。但是,我仍然需要能夠加載舊的序列化保存的文件以實現向後兼容性 - 這是否意味着我需要維護當前xsd的副本以及所有生成的類文件以加載舊的序列化保存文件?有沒有人有建議的方式,我可以做到這一點,如果我必須能夠加載舊文件?

對於所有未來版本的xsd,我打算將保存的文件輸出到xml,並在解組xml之前使用xslt轉換文件,我認爲這將工作,如此線程How should I manage different incompatible formts of Xml based documents中所述。不幫我用舊的序列化文件 - 任何想法?

謝謝。

回答

1

大概JAXB的主要缺點,以及數據的普遍約束力的,是它使模式演變非常麻煩。 XML是一種技術,人們期望經常更改和擴展架構/數據模型,而在Java中,它是硬編碼的,難以改變。在這種情況下,使用XSLT和XQuery等面向XML的語言是一大優勢。

在序列化的Java對象的形式保存永久數據似乎完全是有悖常理的我。在轉換到新的模式格式之前,將其全部轉換回XML。 XML的重點在於數據的格式更持久,並且不依賴於創建它的軟件的持續存在。

+0

感謝您的回答,這使得有很大的意義。但是,如果我絕對必須向後兼容(因爲許多舊文件存在於許多地方),是繼續編譯最初生成的類僅用於閱讀舊文件的唯一方法嗎?有沒有一個聰明的方法來做到這一點?謝謝.. –

+0

好吧,Java在面對類變化時已經具有了對序列化對象的兼容性的詳細規則,但我從未仔細研究它們:最好避免陷入需要的情況。 –