2010-04-05 56 views
3

我有一個JAXB註解類說JAXB註釋類 - 一個變量的設定是不是一個元素

@XmlRootElement(namespace = "http://www.abc.com/customer") 
Class Customer{ 
@XmlElement(namespace = "http://www.abc.com/customer") 
    private String Name; 
    @XmlElement(namespace = "http://www.abc.com/customer") 
    private String Address; 
@XmlTransient 
    private HashSet set = new HashSet(); 

    public String getName(){ 
    return Name; 
    } 
    public void setName(String name){ 
    this.Name = name; 
    set.add("Name"); 
    } 


    public String getAddress(){ 
    return Address; 
    } 
    public void setAddress(String address){ 
    this.Address = address; 
    set.add("Address"); 
    } 

    public void getSet(){ 
return set; 
} 

我有形式

<?xml version="1.0" encoding="UTF-8" standalone="yes"?> 
<Customer xmlns="http://www.abc.com/customer" > 
<Name>Ralph</Name> 
<Address>Newton Street</Address> 
</Customer> 

我使用JAXB解組得到的XML XML輸入的對象表示。名稱和地址的值設置正確。但是 set的值會丟失(因爲它是@XMLTransient會被忽略)

有什麼方法可以確保它仍然在已被解組的對象中設置?我可以使用一些其他註釋?

回答

3

嘗試將註釋放在方法上而不是字段上。具體而言,將@XmlElement放在getName()getAddress()上,將@XmlTransient放在getSet()上,並從字段中刪除所有註釋。

然後JAXB應該使用getter/setter方法對來注入/檢索數據,而不是字段,並且setAddress()將值添加到set字段,應該按照您的預期工作。此外,由於getSet()被標記爲瞬態,因此set的內容不應再次編組。

+0

嗨, 感謝您的解決方案。我試過這個,但沒有設置XML元素值(名稱,地址)是否將這些註釋添加到方法中是否有效? – sswdeveloper 2010-04-06 07:25:05

+0

@sswdeveloper:這是有效的,是的,但有時候你必須做一些事情。嘗試註釋setter方法而不是getter方法。 – skaffman 2010-04-06 07:32:49

0

我建議使用一些後處理工具來填充你的設置。也許使用反思或反思。

請注意,後處理器將只需檢查JAXB註釋,而不是xml文件。

+0

我可以這樣做,但該集只包含那些已經在XML中設置的元素,而不包含任何其他元素。因此,進行後期處理將涉及再次解析XML,然後設置值/讀取所有類成員並檢查是否已設置。然而,這消除了使用JAXB的全部重點,並且會成爲一個性能問題。有沒有其他的選擇使用JAXB itsef? 謝謝。 – sswdeveloper 2010-04-06 07:27:37

+0

@sswdeveloper否,後處理將僅包含解析JAXB註釋。 – Bozho 2010-04-06 07:39:55

2

避免所有代碼中的所有這些鍋爐板代碼的XmLElement註釋。你可以繼續在課程頂部使用@XmlAccessType.PROPERTY,你可以去掉所有的@XmlElement註解。 XmlAccessType註釋負責告訴JAXB查看setter和getters,而不是字段本身。

相關問題