我有一系列的XML消息,都有自己的模式和名稱空間。這些消息目前使用JAXB進行編組(我們仍然生活在Java 1.4環境中),而且我們有大量使用此JAXB代碼的遺留代碼,因此任何解決方案都需要具有最低程度的侵入性。我如何定製jaxb代?
我的問題是,雖然每條消息都有一組公共標題標記,但名稱空間會覆蓋整個消息,因此每個消息的標題也都是唯一的。因此,使用通過使用非常難看的代理類和動態反射代碼實現的通用類,將「通用」標題部分加載到名稱空間綁定版本中。這個普通的類已被確定爲一些性能問題的來源。
理想我想使用來實現替代以下幾點:
- 使用的Maven2取代目前的人工JAXB構建過程。
- 爲每個消息中的「common」標題生成一次性的JAXB類。
- 將當前的動態/代理類轉換爲使用上述具體頭類。
- 爲每條消息的unqiue部分生成JAXB類。
不幸的是,我沒有對消息結構的控制,否則我會考慮創建一個單獨的「頭」命名空間。我認爲運行XSLT轉換以在編組之後和解組之前「重命名」頭部名稱空間,但是如果可能的話,我寧願避免額外的負載,即使它意味着更復雜的構建。
是我想做的事情,或者我錯過了一些基本的東西?有沒有關於如何實施的提示?插件版本等?
附錄1:綁定使用的javaType會做的工作,但它似乎並不複雜的工種。
附錄2:綁定使用類幾乎不會一樣好,但我希望它指定一個特定的類和包,以便我可以不理會產生重複。
我已經發現,但它有一個Java 1.5的先決條件,我現在堅持1.4。 – 2009-09-08 06:27:42
啊,對不起,我錯過了。 – janko 2009-09-08 07:33:24
這很不理想,但如果你仍然堅持不懈,你可以嘗試使用它,然後在jaxb-api jar中翻譯註釋 – GaZ 2009-11-01 22:47:18