2010-04-22 76 views
0

我有一個JAXB註解類客戶如下需要一個空的XML,而解組JAXB註釋類

@XmlRootElement(namespace = "http://www.abc.com/customer") 
public class Customer{ 

private String name; 
private Address address; 


@XmlTransient 
private HashSet set = new HashSet<String>(); 

public String getName(){ 
return name; 
} 

@XmlElement(name = "Name", namespace = "http://www.abc.com/customer") 
public void setName(String name){ 
this.name = name; 
set.add("name"); 
} 

public String getAddress(){ 
return address; 
} 

@XmlElement(name = "Address", namespace = "http://www.abc.com/customer") 
public void setAddress(Address address){ 
this.address = address; 
set.add("address"); 
} 

public HashSet getSet(){ 
return set; 
} 
} 

我需要返回表示此給用戶一個空的XML,這樣他可以填充necesary值在XML和發送請求 所以我需要的是:

<Customer> 
<Name></Name> 
<Address></Address> 
</Customer> 

如果我簡單地創建一個空的對象

Customer cust = new Customer() ; 
marshaller.marshall(cust,sw); 

我所得到的只是頂級元素,因爲該類的其他字段未設置。

我能做些什麼來獲得這樣一個空的XML?我嘗試將nillable = true註釋添加到元素,但是,這返回給我一個xsi:nil =「true」的XML,然後導致我的反編組人員忽略此操作。

我該如何做到這一點?

回答

1

類似<Name></Name>表示一個空的非空字符串,但是您的java對象將用空值初始化。如果你想讓JAXB調出空值,你需要設置這些值:

Customer cust = new Customer() ; 
cust.setName(""); 
cust.setAddress(""); 
marshaller.marshall(cust, sw); 
+0

我的類可以有任何數據類型的成員。如果它的整數,我將不得不初始化爲0,布爾值爲false等 我正在寫一個通用程序,應該給我一個空白的所有元素,而不考慮數據類型,還初始化複雜類型及其元素與一個空白值。這意味着我將不得不循環遍歷所有元素及其子元素。 – sswdeveloper 2010-04-22 11:04:47

+0

@sswdeveloper:的確如此。然而,這是它的工作方式。 XML中的''意味着不存在任何元素的不同之處。如果你想要這個元素,你必須提供一個值。 – skaffman 2010-04-22 11:14:27