- marshal. Consiste en presentar un objeto Java en XML. Java Object > XML
- unmarshal. Consiste en presentar XML en un objeto Java. XML > Java Object
Esta versión trabaja con anotaciones con las cuáles se indica cuál será la raíz del documento XML, los elementos y los atributos. Las principales anotaciones son:
- @XmlRootElement
- @XmlElement
- @XmlAttribute
package com.blogspot.ingmmurillo.axisws;
import javax.xml.bind.JAXBContext;
import javax.xml.bind.JAXBException;
import javax.xml.bind.Marshaller;
import javax.xml.bind.annotation.XmlAttribute;
import javax.xml.bind.annotation.XmlRootElement;
import java.io.IOException;
import java.io.OutputStream;
import java.io.Serializable;
@XmlRootElement
public class Message implements Serializable {
private Field[] fields;
private String from;
private String to;
@XmlAttribute
public String getFrom() {
return from;
}
public void setFrom(String from) {
this.from = from;
}
@XmlAttribute
public String getTo() {
return to;
}
public void setTo(String to) {
this.to = to;
}
public Field[] getFields() {
return fields;
}
public void setFields(Field[] fields) {
this.fields = fields;
}
@Override
public String toString() {
OutputStream xmlOutput = new OutputStream() {
private StringBuilder string = new StringBuilder();
@Override
public void write
(
int b) throws IOException {
this.string.append((char) b);
}
@Override
public String toString
() {
return this.string.toString();
}
};
JAXBContext contextObj = null;
Marshaller marshallerObj = null;
try {
contextObj = JAXBContext.newInstance(Message.class);
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();
}
}
Al realizar la invocación del servicio web la respuesta obtenida es la siguiente:
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<soapenv:Body>
<ns1:sendMessageResponse soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" xmlns:ns1="http://ingmmurillo.blogspot.com/webservices/axis">
<sendMessageReturn xsi:type="xsd:string"><![CDATA[<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<message to="The World" from="My Blog">
<fields>
<name>FirstName</name>
<value>Mauricio</value>
</fields>
<fields>
<name>LastName</name>
<value>Mauricio</value>
</fields>
</message>]]></sendMessageReturn>
</ns1:sendMessageResponse>
</soapenv:Body>
</soapenv:Envelope>
El XML de respuesta ahora fue generado automáticamente usando JAXB. En conclusión, JAXB permite ahorrar tiempo para realizar los procesos de marshal y unmarshal. Además, JAXB permite que el mantenimiento de un bean sea menos costoso, ayudando a los desarrolladores a trabajar de forma más ágil.