| /******************************************************************************* |
| * Copyright (c) 2005, 2016 Cognos Incorporated, IBM Corporation 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: |
| * Cognos Incorporated - initial API and implementation |
| * IBM Corporation - bug fixes and enhancements |
| * Raymond Augé - bug fixes and enhancements |
| *******************************************************************************/ |
| package org.eclipse.equinox.http.servlet.internal.servlet; |
| |
| import java.io.IOException; |
| import javax.servlet.*; |
| import javax.servlet.http.*; |
| import org.eclipse.equinox.http.servlet.internal.Activator; |
| import org.eclipse.equinox.http.servlet.internal.HttpServiceRuntimeImpl; |
| import org.eclipse.equinox.http.servlet.internal.context.DispatchTargets; |
| import org.eclipse.equinox.http.servlet.internal.util.Const; |
| |
| /** |
| * The ProxyServlet is the private side of a Servlet that when registered (and init() called) in a servlet container |
| * will in-turn register and provide an OSGi Http Service implementation. |
| * This class is not meant for extending or even using directly and is purely meant for registering |
| * in a servlet container. |
| */ |
| public class ProxyServlet extends HttpServlet { |
| |
| private static final long serialVersionUID = 4117456123807468871L; |
| private HttpServiceRuntimeImpl httpServiceRuntimeImpl; |
| |
| public void init(ServletConfig config) throws ServletException { |
| super.init(config); |
| |
| Activator.addProxyServlet(this); |
| } |
| |
| public void destroy() { |
| Activator.unregisterHttpService(this); |
| |
| super.destroy(); |
| } |
| |
| public void setHttpServiceRuntimeImpl( |
| HttpServiceRuntimeImpl httpServiceRuntimeImpl) { |
| |
| this.httpServiceRuntimeImpl = httpServiceRuntimeImpl; |
| } |
| |
| public void sessionIdChanged(String oldSessionId) { |
| httpServiceRuntimeImpl.fireSessionIdChanged(oldSessionId); |
| } |
| |
| /** |
| * @see HttpServlet#service(ServletRequest, ServletResponse) |
| */ |
| protected void service( |
| HttpServletRequest request, HttpServletResponse response) |
| throws ServletException, IOException { |
| |
| checkRuntime(); |
| |
| String alias = HttpServletRequestWrapperImpl.getDispatchPathInfo(request); |
| |
| if (alias == null) { |
| alias = Const.SLASH; |
| } |
| |
| DispatchTargets dispatchTargets = httpServiceRuntimeImpl.getDispatchTargets(alias, null); |
| |
| if (dispatchTargets != null) { |
| dispatchTargets.doDispatch( |
| request, response, alias, request.getDispatcherType()); |
| |
| return; |
| } |
| |
| response.sendError( |
| HttpServletResponse.SC_NOT_FOUND, "ProxyServlet: " + alias); //$NON-NLS-1$ |
| } |
| |
| private void checkRuntime() { |
| if (httpServiceRuntimeImpl == null) { |
| throw new IllegalStateException( |
| "Proxy servlet not properly initialized. httpServiceRuntimeImpl is null"); //$NON-NLS-1$ |
| } |
| } |
| |
| } |