нужен пустой XML при демонтаже аннотированного класса JAXB - PullRequest
0 голосов
/ 22 апреля 2010

У меня есть JAXB-аннотированный класс Customer следующим образом

@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, представляющий это пользователю, чтобы он мог заполнить необходимые значения в XML и отправить запрос Итак, что мне нужно, это:

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

Если я просто создаю пустой объект

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

все, что я получаю, это элемент верхнего уровня, так как другие поля класса не установлены.

Что я могу сделать, чтобы получить такой пустой XML? Я пытался добавить аннотацию nillable = true к элементам, однако это возвращает мне XML с xsi: nil = "true", который затем мой маршаллер, чтобы игнорировать это.

Как мне этого добиться?

1 Ответ

1 голос
/ 22 апреля 2010

Что-то вроде <Name></Name> представляет пустую ненулевую строку, но ваш Java-объект будет инициализирован с нулями. Если вы хотите, чтобы JAXB собирал пустые значения, вам нужно установить эти значения:

Customer cust = new Customer() ;
cust.setName("");
cust.setAddress("");
marshaller.marshall(cust, sw);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...