У меня есть JAXB аннотированный класса Customer следующимнужен пустой 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 к элементам, но это возвращает мне XML с xsi: nil = "true", который затем вызывает мой unmarshaller, чтобы игнорировать это.
Как это достичь?
Мой класс может иметь элементы любого типа данных. Если его целое число мне нужно будет инициализировать до 0, от boolean до false и т. Д. Я пишу общую программу, которая должна дать мне пробел для всех элементов независимо от типа данных, а также инициализировать сложные типы и их элементы с помощью пустое значение. что означает, что мне придется рекурсивно прокручивать все элементы и их дочерние элементы. – sswdeveloper
@sswdeveloper: Это правда. Однако так оно и работает. ' ' в XML означает другое, что нет присутствующего элемента. Если вы хотите, чтобы элемент присутствовал, вы должны указать значение. –
skaffman