La necesidad de saber cómo podemos construir un Servlet que devuelve XML viene dada de las necesidades de los entornos SOA. Ahora que los desarrollos se están moviendo a arquitecturas SOA empezamos a ver que nos aparecen servicios por todos los lados. Es cierto que no se habla mucho de cómo se desarrollan dichos servicios, ya que las presentaciones de arquitectura SOA suponen que «estaban ahí».
Supongo que los sistemas legados de hace años ya estaban pensando en SOA y dejando sus interfaces lo más correctos posibles. Que no tenían datos en los interfaces de contrato datos relativos a la pantalla en la que se ejecutaban (esos terminales verde marciano) y que solo devolvían negocio.
Ahora que yo todavía no me he encontrado ningún «servicio del pasado» que solo maneje negocio. Y es por ello que tienes que acabar maleándolo para que deje unos datos lo suficientemente claros como para que sean consumidos en un entorno SOA.
En esta evolución nos encontramos que los servicios de los servidores ya no devuelven presentación, sino que ahora, en bastantes casos, devuelven solo negocio. Y qué mejor que utilizar el XML para describir dicho negocio.
Una de las posibilidades en estos casos es ir a un enfoque de Webservices. Posiblemente la más puritana. Si bien, es verdad que, los Webservices todavía no se encuentran en su punto más álgido y tienen ciertas cosas que mejorar: velocidad, versionado, transaccionalidad,…
Un enfoque más sencillo es el de montarse un Servlet que nos devuelva un contenido XML. Así que vamos ver qué pasos hay que dar para poder construir un Servlet que devuelve XML.
Para poder hacer esto, lo primero que tenemos que hacer es crearnos una clase que extienda de HttpServlet
.
public class RespuestaXML extends javax.servlet.http.HttpServlet implements javax.servlet.Servlet {...}
Como todos sabemos los servlets tienen dos métodos para procesar las peticiones, dependiendo de cómo sean estas (GET o POST). Estos métodos son doGet
y doPost
. Podemos coger cualquiera de los dos para implementar nuestro ejemplo.
Dentro del método de procesado de la petición lo primero que tenemos que hacer si queremos devolver XML es establecer el tipo de contenido que devolverá el Servlet. Para ello utilizamos el método .setContentType
del objeto HttpServletResponse
.
Response.setContentType("text/xml");
Con esto le estamos diciendo al cliente receptor de la petición que el contenido que le va a llegar en dicha petición es XML.
Una vez tenemos definido el tipo de contenido lo siguiente es volcar contenido XML a la salida. Para ello deberemos de obtener un PrintWriter
sobre el objeto HttpServletResponse
.
PrintWriter out = response.getWriter();
Y ahora empezar a volcar datos XML sobre la salida…
out.write("Línea de Código");
En nuestro caso solo estamos devolviendo una etiqueta con el nombre de la web.
Es importante en este punto el recordar que los documentos XML empiezan con la siguiente cabecera:
<?xml version="1.0" ?>
Aunque no estrictamente necesaria es buena práctica incluirla antes de nuestro contenido XML.
Espero que os haya servido este ejemplo que nos explica cómo podemos construir un Servlet que devuelve XML.