Supongamos que tenemos el siguiente objeto de transferencia de datos (DTO), CustomerDTO:
package com.blogspot.ingmmurillo.jaxb;
import com.tandicorp.tandiesb.jaxb.XMLOutputStream;
import javax.xml.bind.JAXBContext;
import javax.xml.bind.JAXBException;
import javax.xml.bind.Marshaller;
import javax.xml.bind.annotation.XmlRootElement;
import java.io.IOException;
import java.io.Serializable;
import java.util.Date;
@XmlRootElement
public class CustomerDTO implements Serializable {
private String identification;
private String internalIdentifier;
private String firstName;
private String lastName;
private Date birthday;
public String getIdentification() {
return identification;
}
public void setIdentification(String identification) {
this.identification = identification;
}
public String getInternalIdentifier() {
return internalIdentifier;
}
public void setInternalIdentifier(String internalIdentifier) {
this.internalIdentifier = internalIdentifier;
}
public String getFirstName() {
return firstName;
}
public void setFirstName(String firstName) {
this.firstName = firstName;
}
public String getLastName() {
return lastName;
}
public void setLastName(String lastName) {
this.lastName = lastName;
}
public Date getBirthday() {
return birthday;
}
public void setBirthday(Date birthday) {
this.birthday = birthday;
}
@Override
public String toString() {
XMLOutputStream xmlOutput = new XMLOutputStream();
JAXBContext contextObj = null;
Marshaller marshallerObj = null;
try {
contextObj = JAXBContext.newInstance(this.getClass());
marshallerObj = contextObj.createMarshaller();
marshallerObj.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
marshallerObj.marshal(this, xmlOutput);
xmlOutput.flush();
xmlOutput.close();
} catch (JAXBException e) {
e.printStackTrace();
return e.getMessage();
} catch (IOException e) {
e.printStackTrace();
return e.getMessage();
} finally {
if (contextObj != null) {
contextObj = null;
}
if (marshallerObj != null) {
marshallerObj = null;
}
}
return xmlOutput.toString();
}
}
Cómo se puede observar se colocó la anotación @XmlRootElement y se sobrescribió el método toString(). Sí se crea una instancia del DTO y se lo imprime en consola se obtendrá lo siguiente:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<customerDTO>
<birthday>1983-07-13T13:23:27.436-05:00</birthday>
<firstName>Mauricio</firstName>
<identification>1845122451</identification>
<internalIdentifier>877441000001</internalIdentifier>
<lastName>Murillo</lastName>
</customerDTO>
Por defecto el elemento raíz del documento XML es el mismo nombre de la clase con la primera letra minúscula (customerDTO) y los elementos XML se ordenan en orden alfabético: (birthday, firstName, identification, internalIdentifier, lastName)
Para cambiar el nombre del elemento raíz se asigna un valor a la variable name de la anotación @XmlRootElement y para ordenar los elementos XML se usa la anotación @XmlType asignando el orden a la propiedad propOrder como un arreglo de String. Por último, se usa la anotación @XmlTransient para evitar que el atributo internalIdentifier de la clase se muestre como elemento XML, como se muestra a continuación:
package com.blogspot.ingmmurillo.jaxb;
import com.tandicorp.tandiesb.jaxb.XMLOutputStream;
import javax.xml.bind.JAXBContext;
import javax.xml.bind.JAXBException;
import javax.xml.bind.Marshaller;
import javax.xml.bind.annotation.XmlRootElement;
import javax.xml.bind.annotation.XmlTransient;
import javax.xml.bind.annotation.XmlType;
import java.io.IOException;
import java.io.Serializable;
import java.util.Date;
@XmlRootElement(name = "customer")
@XmlType(propOrder = {"firstName", "lastName", "identification", "birthday"})
public class CustomerDTO implements Serializable {
private String identification;
private String internalIdentifier;
//...
@XmlTransient
public String getInternalIdentifier() {
return internalIdentifier;
}
}
Sí se imprime en consola una instancia del objeto CustomerDTO ahora se obtendrá el siguiente resultado:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<customer>
<firstName>Mauricio</firstName>
<lastName>Murillo</lastName>
<identification>1845122451</identification>
<birthday>1983-07-13T14:28:48.079-05:00</birthday>
</customer> Referencias