/******************************************************************************* * Copyright (c) 2009 EclipseSource and others. All rights reserved. This * program and the accompanying materials are made available under the terms of * the Eclipse Public License v1.0 which accompanies this distribution, and is * available at http://www.eclipse.org/legal/epl-v10.html * * Contributors: EclipseSource - initial API and implementation *******************************************************************************/ package org.eclipse.ecf.tests.remoteservice.rest.service; import java.io.IOException; import org.apache.commons.httpclient.HttpStatus; import org.apache.commons.httpclient.HttpVersion; import org.apache.commons.httpclient.server.HttpRequestHandler; import org.apache.commons.httpclient.server.SimpleHttpServer; import org.apache.commons.httpclient.server.SimpleHttpServerConnection; import org.apache.commons.httpclient.server.SimpleRequest; import org.apache.commons.httpclient.server.SimpleResponse; public class SimpleRestService { public static final int PORT = 12550; private SimpleHttpServer server; private HttpRequestHandler reqHandler = new HttpRequestHandler() { public boolean processRequest(SimpleHttpServerConnection conn, SimpleRequest request) throws IOException { String uri = request.getRequestLine().getUri(); request.getBodyBytes(); boolean get = request.getRequestLine().getMethod().equals("GET"); if (uri.equals("/getTest") && get) { // normal response hookResponse(conn, "success"); return true; } else if (uri.equals( "/test.xml") && get) { // XML Response hookResponse(conn, XML_RESPONSE); return true; } else if (uri.equals("/test.json") && get) { // JSON Response hookResponse(conn, JSON_RESPONSE); return true; } return false; } }; public static final String XML_RESPONSE = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>" + "<root><aNode param=\"ok\"/></root>"; public static final String JSON_RESPONSE = "{\"aNode\":\"aValue\"}"; public SimpleRestService() { run(); } protected void hookResponse(SimpleHttpServerConnection conn, String body) throws IOException { SimpleResponse res = new SimpleResponse(); res.setStatusLine(HttpVersion.HTTP_1_1, HttpStatus.SC_OK); res.setBodyString(body); conn.setKeepAlive(false); conn.writeResponse(res); } public void shutdown() { if (server != null) { server.destroy(); server = null; } } public void run() { if (server == null) { createServer(); } else { if (!server.isRunning()) { server.destroy(); server = null; createServer(); } } } private void createServer() { try { server = new SimpleHttpServer(); server.setRequestHandler(reqHandler); } catch (IOException e) { e.printStackTrace(); } } public SimpleHttpServer getServer() { return server; } public String getServerUrl() { return "http://localhost:" + server.getLocalPort(); } }