需要一个空的XML,而解组JAXB注释类

问题描述:

我有一个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,然后导致我的反编组人员忽略此操作。

我该如何做到这一点?

类似<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