我在將XML節點轉換爲JPA實體的任務之前。 XML中的對象與實體所代表的類似,但不完全相同。看起來我會有很多轉換代碼。轉換頭疼
XML在Schema .xsd文件中定義,我使用JAXB生成類和創建實例。上面的決定不是觸及生成的類型。我會爲他們每個人創建轉換器,也許我會按照訪問者模式去做,還不知道。
讓我感到困擾的是有人決定改變.xsd文件並且不會更新可靠的轉換器。
我的想法是讓這些轉換器類保持來自代碼中處理的適當JAXB類的字段的靜態最終列表。如果有人在.xsd文件中修改它們,則會記錄一些警告,表明某些字段尚未處理,或者某些處理字段不再存在。
此外,我想確保轉換器的數量與JAXB生成的類的數量相匹配。 如何做到這一點?
也許我應該以某種方式檢查執行時間可以從.xsd文件生成哪些類並將它們與已註冊的轉換器進行比較。我覺得我不能只掃描特定包中的類來檢查JAXB輸出類。
也許訪問者模式可以告訴我哪裏出了問題,但延長檢查可能是一個壞主意,直到在實踐中發生XML-JPA轉換錯誤。
如果您在構建過程中生成類,則在編譯失敗的情況下,如果某個人更改了XSD文件並且未處理字段,應該通知某個可以實現缺少字段的人。沒有簡單的解決方案。 – Phani
他們應該通知,但你永遠不知道他們會不會......雖然,這些預防措施可能會花費我更多的時間,而不是值得的。 – Atom
如果您希望您的XSD獨立於目標Java類進化,我建議不要使用JAXB。相反,您可以讓轉換器使用XPath表達式從知名位置的XML文件中提取數據。如果模式更改,某些路徑可能無效,但XPath不會崩潰,並且可以記錄一些警告消息。 –