Solution:
1. Write you own mock servlet
public class MockServlet extends HttpServlet {
private String servletData;
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
contextService(req, resp);
}
@Override
protected void doPut(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doGet(req, resp);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doGet(req, resp);
}
private void contextService(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
servletData = IOUtils.toString(req.getInputStream());
resp.setContentType("text/html");
resp.setStatus(HttpServletResponse.SC_OK);
resp.getWriter().print("Response from mock server: Submit is success.");
}
public String getServletData() {
return servletData;
}
}
2. define mock beans in spring application context (servlet and jetty server)
2.1 servlet:
<bean id="mockServlet" class="my.MockServlet"/>
2.2 jetty server
<property name="host" value="localhost"/>
<property name="port" value="8900"/>
<property name="contextPath" value="/"/>
<bean class="org.mortbay.jetty.servlet.SessionHandler">
<property name="resourceBase" value="c:/temp"/>
<property name="name" value="defaultServlet"/>
<bean class="org.mortbay.jetty.servlet.DefaultServlet"/>
<property name="name" value="mockServlet"/>
<property name="servlet" ref="mockServlet"/>
/
<property name="servletName" value="defaultServlet"/>
/test/myAction
<property name="servletName" value="mockCharityServlet"/>
3. You Http Client code
final HttpPost post = new HttpPost("http://127.0.0.1:9800/test/myAction");
final HttpResponse resp = hc.execute(post);
final HttpEntity respContent = resp.getEntity();
final InputStream is = respContent.getContent();
final StringWriter strWr = new StringWriter();
IOUtils.copy(is, strWr);
return strWr.toString();
4. Junit
String expected = "Response from mock server: Submit is success.";
String actual = mockClient.submit();
assertEquals(expected, actual);