2011-07-22 71 views
5

我是新來的XML Schema和JAXB,不知道該怎麼使用Maven的JAXB插件(http://static.highsource.org/mjiip/maven-jaxb2-plugin/generate-mojo.html)最好的或預期的方法是的使用。預期或推薦的Maven的JAXB 2.x的插件

我有一個簡單的XML文檔格式,我已經定義了一個模式,我主要對將一個兼容的XML文件讀入Java中感興趣,但是我可能還想爲POJO添加額外的屬性,這些屬性不在XML中,但將在運行時使用

默認情況下,插件將生成的代碼放到$ {project.build.directory}/generated-sources/xjc中。我想要做的是將生成的代碼複製到/ src/main/java/whatever並添加/修改代碼添加我的額外屬性。當我更改模式時,我會將新生成的POJO的更改合併到我自己的模塊中。

另一種方法是告訴插件將生成的代碼直接放到/ src/main/java中,也許可以繼承POJO的子類來添加我自己的屬性,但是我不確定編組/解組是否仍然可以使用我的擴展類。

任何人都有任何指導,哪種方法更爲正常,或每種方法的缺陷是什麼?

回答

2

在你的地方,我會離開的產生來源,他們都讓相應的罐子可以通過Maven的無需再另行配置建成並把你的自定義代碼在不同的項目依賴於第一個。這確保了一切都按正確的順序進行。

這是你的選擇是否從生成的類派生或者只是使用它們的實例在你的代碼,如屬性,或者甚至更好,局部變量。我個人會避免推導;畢竟JAXB只是用於以特定格式執行I/O的低級機器。

最重要的是:忘記修改生成的來源;爲什麼在自動獲得相同效果時在開發過程中引入容易出錯的手動步驟?

+0

非常感謝,這是我的第一個堆棧溢出問題,它有一些真實世界的經驗來指導我非常有用。我會看看生成的文件的子類,看看我能否得到這個工作。我也可以使用具有默認值的模式屬性來生成具有我需要的字段的類,這將使我無法繼承所生成的源的子類。 – barnyr

1

(爲了提供一個微小的變化上Nicola的答案)

如果你的模式很少改變它可能是有意義的有一個完全獨立的編譯剛剛創建JAXB生成的代碼,罐子它,版本吧,和棍棒它在你的倉庫中。

然後在你的下游代碼您使用的罐子作爲依賴和子類在必要時添加新的領域JAXB代碼。

我們走到這條路,因爲我們認爲有JAXB請編譯每次我們做了建造時間是不必要的,因爲我們的模式是相當靜態的。

更重要的是:忘記修改生成的來源;爲什麼在自動獲得相同效果時在開發過程中引入容易出錯的手動步驟?

絕對。

+0

感謝羅伊,我喜歡把這一代作爲一個獨立的項目運行的想法。該模式預計將變化非常緩慢,所以它可能是適當的。 – barnyr

0

爲了詳細闡述和擴展一個已經做得很好的點......如果有很多隱式關係和你想在JAXB代碼中放置「getters」的東西,咬住項目符號幷包裝JAXB在你想要的地方完成你想要的東西。

使用IDE輔助的代表團,這只是一個單調乏味,並且會將主要應用程序中的很多簡單,令人分心的低級代碼都考慮在內。

這樣做的另一個好處是,您將花費更少的時間來與JAXB打交道,以完全按照您想要的方式生成事物 - 這些包裝將使您的關注度減少很多。