- 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.