Mock de un web service con Jetty
De Dos Ideas.
Revisión del 18:35 27 oct 2009 de 201.251.182.130 (discusión)
El siguiente ejemplo de código muestra como crear una clase utilitaria que se encarga de simular un Web Service usando Jetty para atender las peticiones.
package com.dosideas.test;
import java.io.BufferedReader; import java.io.IOException;
import javax.servlet.ServletException; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse;
import org.mortbay.jetty.Handler; import org.mortbay.jetty.Request; import org.mortbay.jetty.Server; import org.mortbay.jetty.handler.AbstractHandler;
import com.thoughtworks.xstream.XStream;
public class WebServiceServerMock {
private Server server; private Envelope envelope; private WebServiceServerMock() { } public static WebServiceServerMock crear(int port) throws Exception { WebServiceServerMock mock = new WebServiceServerMock(); mock.server = new Server(port); mock.server.start(); return mock; } public Envelope getRequestEnvelope() { return envelope; } public void crearOperacion(final String xmlRespuesta, final int httpStatus) { Handler handler = new AbstractHandler() { public void handle( String target, HttpServletRequest request, HttpServletResponse response, int dispatch ) throws IOException, ServletException {
BufferedReader in = new BufferedReader(request.getReader()); String line = ""; String xml = ""; while (null != (line = in.readLine())) { xml += line; } envelope = envelopeFromXml(xml); response.setStatus(httpStatus); response.getWriter().print(xmlRespuesta); ((Request) request).setHandled(true); } }; server.setHandler(handler); }
public static Envelope envelopeFromXml(String xml) { XStream xStream = new XStream(); xStream.alias("soapenv:Envelope", Envelope.class); xStream.alias("soapenv:Body", Body.class); xStream.aliasField("soapenv:Body", Envelope.class, "body"); //el resto de los mapeos Envelope envelope = (Envelope) xStream.fromXML(xml); return envelope; } public static class Body { public ConsultarListasDisponiblesRequest consultarListasDisponiblesRequest; } public static class Envelope { public Body body; }
public void stop() throws Exception { server.stop(); }
}
El test con JUnit
El siguiente test utiliza la clase anterior para maquetar el Web Service.
blah