org.eclipse.ecf.tests.remoteservice.rest.service.SimpleRestService.java Source code

Java tutorial

Introduction

Here is the source code for org.eclipse.ecf.tests.remoteservice.rest.service.SimpleRestService.java

Source

/*******************************************************************************
 * 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();
    }
}