2011-02-11 59 views
2

嘿夥計們,希望這裏有一個很好的簡單的人。如何讓JAXB生成的類參與訪問者模式?

我使用JAXB從模式生成類,我希望能夠使用Visitor模式處理它們。

爲了做到這一點,我想我需要每一個JAXB生成的類來實現我定義的接口,並添加一個非常簡單的方法給他們,這樣一個簡單的例子是:

默認等級:

public class MyClass { 
    private String name; 

    public void get/setName() {...} 
} 

所需類:

public class MyClass implements MyVisitorNode { 
    private String name; 

    public void get/setName() {...} 

    public void accept(MyVisitorVisitor visitor) { 
    visitor.visit(this); 
    } 
} 

這是可能的,如果是,有什麼選擇? (更改模式,運行時字節碼操作,以某種方式操縱JAXBContext ...)

理想情況下,不依賴於供應商特定的擴展。

謝謝!

回答

4

JAXB的xjc編譯器有一個插件接口,允許開發人員創建插件來修改生成的代碼。我個人最喜歡的是流利api,但還有其他人可以添加toString,equals,hashCode等。

我創建了一個使用此技術實現訪問者模式的插件,並將其作爲google代碼項目提供。它可能不是您正在尋找的東西,但它可能是一個開始審查代碼並測試是否需要修改以適應您的需求的好地方。

http://code.google.com/p/jaxb-visitor/

2

JAX-B生成的類是標準的Java類,您可以以任何您想要的方式進行自定義,例如擴展接口,添加其他方法等。)。類和屬性上的註釋是編組和解組過程的驅動因素。

即便如此,如果您自定義JAXB生成的類,還需要考慮一些事項。正如每個類的頂部所述「重新編譯源模式時,對該文件的任何修改都將丟失」。簡而言之,如果您自定義類,則需要手動進行代碼更改以支持任何模式更新。如果你重新創建類,你的自定義代碼將被刪除,你將不得不從頭開始。