Parent Directory
|
Revision Log
Updated for article
package no.brodwall.insanejava.rest;
import java.io.IOException;
import java.io.Reader;
import java.io.StringReader;
import java.io.StringWriter;
import java.io.UnsupportedEncodingException;
import java.net.MalformedURLException;
import java.net.URL;
import javax.servlet.Servlet;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletResponse;
import org.springframework.mock.web.MockHttpServletRequest;
import org.springframework.mock.web.MockHttpServletResponse;
public class RESTServletClient implements RESTHttpClient {
private final Servlet restServlet;
private final String servletPath;
public RESTServletClient(Servlet restServlet, String servletPath) {
this.restServlet = restServlet;
this.servletPath = servletPath;
}
public void doDelete(URL url) {
MockHttpServletRequest request = new MockHttpServletRequest("DELETE", url.getFile());
MockHttpServletResponse response = new MockHttpServletResponse();
service(request, response);
checkResponseCode(response, HttpServletResponse.SC_OK, HttpServletResponse.SC_NOT_FOUND);
}
public Reader doGet(URL url) {
MockHttpServletRequest request = new MockHttpServletRequest("GET", url.getFile());
MockHttpServletResponse response = new MockHttpServletResponse();
service(request, response);
checkResponseCode(response, HttpServletResponse.SC_NOT_FOUND, HttpServletResponse.SC_OK);
if (response.getStatus() == HttpServletResponse.SC_NOT_FOUND) {
return null;
} else {
try {
return new StringReader(response.getContentAsString());
} catch (UnsupportedEncodingException e) {
throw new RuntimeException(e);
}
}
}
public URL doPostAndReturnLocation(URL url, WriterTemplate writerTemplate) {
MockHttpServletRequest request = new MockHttpServletRequest("POST", url.getFile());
request.setContent(toString(writerTemplate).getBytes());
MockHttpServletResponse response = new MockHttpServletResponse();
service(request, response);
checkResponseCode(response, HttpServletResponse.SC_CREATED);
try {
return new URL((String)response.getHeader("Location"));
} catch (MalformedURLException e) {
throw new RuntimeException(e);
}
}
public void doPut(URL url, WriterTemplate content) {
MockHttpServletRequest request = new MockHttpServletRequest("PUT", url.getFile());
request.setContent(toString(content).getBytes());
MockHttpServletResponse response = new MockHttpServletResponse();
service(request, response);
checkResponseCode(response);
}
private void checkResponseCode(MockHttpServletResponse response, int... validCodes) {
if (validCodes.length == 0) {
validCodes = new int[] { HttpServletResponse.SC_OK };
}
for (int code : validCodes) {
if (response.getStatus() == code) {
return;
}
}
throw new RuntimeException("Error from server " + response.getStatus() + " " + response.getErrorMessage());
}
private void service(MockHttpServletRequest request, HttpServletResponse response) {
String pathInfo = request.getRequestURI();
if (pathInfo.startsWith(servletPath)) {
pathInfo = pathInfo.substring(servletPath.length());
}
request.setPathInfo(pathInfo);
try {
restServlet.service(request, response);
} catch (ServletException e) {
throw new RuntimeException(e);
} catch (IOException e) {
throw new RuntimeException(e);
}
}
private String toString(WriterTemplate writerTemplate) {
StringWriter writer = new StringWriter();
try {
writerTemplate.doWithWriter(writer);
return writer.toString();
} catch (IOException e) {
throw new RuntimeException("Should never happen with StringWriter", e);
}
}
}
| Johannes Brodwall | ViewVC Help |
| Powered by ViewVC 1.0.0 |