2012-02-04 61 views
0

我最近轉移到一個項目,我發現有一個特定的需求來將一些數據存儲爲XML。Castor生成的類(XML編組) - XSD不可用

之前的團隊使用Castor爲Marshall和Unmarshall生成的類數據。

我現在有一個新的要求,那就是要求我爲這個XML添加一些額外的(但是可選的)字段。然而,我意識到之前的團隊據說從未在XSD中檢查過,我也無法與他們聯繫。

XSD肯定是龐大而複雜的,因爲它負責生成大約50個類。因此,再次編寫XSD將容易出錯,並且可能最終導致現在創建與舊XML兼容的XML。

我想到的另一種選擇是使用XML Spy之類的工具,並嘗試從XML中反向設計XSD,但是這聽起來有點困難,因爲我需要逆向工程20個奇數XML來生成XSD,然後將所有這些XSD合併爲一個,因爲XML有幾個可選部分。這種方法仍然有可能出現錯誤。

我能想到的最好的選擇是將這些類逆向工程到一個XSD - 但是Castor應該不支持這個特性。所以我沒有辦法將這些Castor生成的類轉換回XSD!雖然由Castor生成的類確實有一些Castor特定的方法,但如果Castor特定的方法被忽略,它們本質上是Pojos!

我們有什麼建議可以從java類獲取或生成XSD嗎?我們是否有其他建議來解決我所討論的問題?

謝謝。

回答

0

只是一個更新,雖然我沒有達到我尋找的100%,但是我能夠使用JAXB的schemagen工具成功地對XSD進行逆向工程。

請注意,castor會爲每個類生成一個XXXDescriptor,因爲它沒有映射到實際的XSD,因此不會將XXXDescriptor類作爲輸入傳遞給schemagen工具。

schemagen工具使用getter方法,並忽略像Castor的驗證,馬歇爾和unmarshall方法。

因此,與我第一次發佈問題時所處的情況相比,事情看起來非常有希望。

謝謝。