All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.apache.oozie.test.EmbeddedServletContainer Maven / Gradle / Ivy

The newest version!
/**
 * Copyright (c) 2010 Yahoo! Inc. All rights reserved.
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *   http://www.apache.org/licenses/LICENSE-2.0
 *
 *  Unless required by applicable law or agreed to in writing, software
 *  distributed under the License is distributed on an "AS IS" BASIS,
 *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 *  See the License for the specific language governing permissions and
 *  limitations under the License. See accompanying LICENSE file.
 */
package org.apache.oozie.test;

import org.mortbay.jetty.Server;
import org.mortbay.jetty.servlet.FilterHolder;
import org.mortbay.jetty.servlet.ServletHolder;
import org.mortbay.jetty.servlet.Context;

import java.net.InetAddress;
import java.net.ServerSocket;

/**
 * An embedded servlet container for testing purposes. 

It provides reduced functionality, it supports only * Servlets.

The servlet container is started in a free port. */ public class EmbeddedServletContainer { private Server server; private String host = null; private int port = -1; private String contextPath; Context context; /** * Create a servlet container. * * @param contextPath context path for the servlet, it must not be prefixed or append with "/", for the default * context use "" */ public EmbeddedServletContainer(String contextPath) { this.contextPath = contextPath; server = new Server(0); context = new Context(); context.setContextPath("/" + contextPath); server.setHandler(context); } /** * Add a servlet to the container. * * @param servletPath servlet path for the servlet, it should be prefixed with '/", it may contain a wild card at * the end. * @param servletClass servlet class */ public void addServletEndpoint(String servletPath, Class servletClass) { context.addServlet(new ServletHolder(servletClass), servletPath); } /** * Add a filter to the container. * * @param filterPath path for the filter, it should be prefixed with '/", it may contain a wild card at * the end. * @param filterClass servlet class */ public void addFilter(String filterPath, Class filterClass) { context.addFilter(new FilterHolder(filterClass), filterPath, 0); } /** * Start the servlet container.

The container starts on a free port. * * @throws Exception thrown if the container could not start. */ public void start() throws Exception { host = InetAddress.getLocalHost().getHostName(); ServerSocket ss = new ServerSocket(0); port = ss.getLocalPort(); ss.close(); server.getConnectors()[0].setHost(host); server.getConnectors()[0].setPort(port); server.start(); System.out.println("Running embedded servlet container at: http://" + host + ":" + port); } /** * Return the hostname the servlet container is bound to. * * @return the hostname. */ public String getHost() { return host; } /** * Return the port number the servlet container is bound to. * * @return the port number. */ public int getPort() { return port; } /** * Return the full URL (including protocol, host, port, context path, servlet path) for the context path. * * @return URL to the context path. */ public String getContextURL() { return "http://" + host + ":" + port + "/" + contextPath; } /** * Return the full URL (including protocol, host, port, context path, servlet path) for a servlet path. * * @param servletPath the path which will be expanded to a full URL. * @return URL to the servlet. */ public String getServletURL(String servletPath) { String path = servletPath; if (path.endsWith("*")) { path = path.substring(0, path.length() - 1); } return getContextURL() + path; } /** * Stop the servlet container. */ public void stop() { try { server.stop(); } catch (Exception e) { // ignore exception } try { server.destroy(); } catch (Exception e) { // ignore exception } host = null; port = -1; } }





© 2015 - 2025 Weber Informatics LLC | Privacy Policy