| /* |
| * Licensed to the Apache Software Foundation (ASF) under one |
| * or more contributor license agreements. See the NOTICE file |
| * distributed with this work for additional information |
| * regarding copyright ownership. The ASF licenses this file |
| * to you 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. |
| */ |
| |
| package org.apache.axis2.osgi.core.web; |
| |
| import org.osgi.framework.BundleContext; |
| import org.osgi.framework.BundleException; |
| import org.osgi.framework.ServiceReference; |
| import org.osgi.service.http.HttpContext; |
| import org.osgi.service.http.HttpService; |
| |
| import javax.servlet.http.HttpServletRequest; |
| import javax.servlet.http.HttpServletResponse; |
| import java.net.URL; |
| |
| /** |
| * |
| * WebApp is a utility class for describing a WebApplication to be deployed into an OSGi |
| * HTTP Service implementation. The WebApp implementation extends the OSGi <code>HttpContext</code>. |
| */ |
| public class WebApp implements HttpContext { |
| protected static WebAppDescriptor webAppDescriptor = null; |
| |
| protected HttpService httpService; |
| |
| protected ServiceReference sRef; |
| |
| public WebApp(WebAppDescriptor descriptor) { |
| webAppDescriptor = descriptor; |
| } |
| |
| // Return null and let the HTTP determine the type |
| public String getMimeType(String reqEntry) { |
| return null; |
| } |
| |
| // Get the resource from the jar file, use the class loader to do it |
| public URL getResource(String name) { |
| URL url = getClass().getResource(name); |
| |
| return url; |
| } |
| |
| public boolean handleSecurity(HttpServletRequest request, |
| HttpServletResponse response) throws java.io.IOException { |
| return true; |
| } |
| |
| /** |
| * Starts the WebApp |
| * @param bc the BundleContext of the WebApp host |
| * @throws BundleException |
| */ |
| public void start(BundleContext bc) throws BundleException { |
| if ((sRef = bc.getServiceReference("org.osgi.service.http.HttpService")) == null) |
| throw new BundleException("Failed to get HttpServiceReference"); |
| if ((httpService = (HttpService) bc.getService(sRef)) == null) |
| throw new BundleException("Failed to get HttpService"); |
| try { |
| WebAppDescriptor wad = webAppDescriptor; |
| |
| for (int i = 0; i < wad.servlet.length; i++) { |
| ServletDescriptor servlet = wad.servlet[i]; |
| |
| httpService.registerServlet(wad.context + servlet.subContext, |
| servlet.servlet, servlet.initParameters, this); |
| } |
| } catch (Exception e) { |
| e.printStackTrace(); |
| throw new BundleException("Failed to register servlets"); |
| } |
| } |
| |
| /** |
| * Stops the WebApp |
| * @param bc the BundleContext of the WebApp host |
| * @throws BundleException |
| */ |
| public void stop(BundleContext bc) throws BundleException { |
| try { |
| for (int i = 0; i < webAppDescriptor.servlet.length; i++) { |
| ServletDescriptor servlet = webAppDescriptor.servlet[i]; |
| |
| httpService.unregister(webAppDescriptor.context |
| + servlet.subContext); |
| } |
| bc.ungetService(sRef); |
| httpService = null; |
| webAppDescriptor = null; |
| } catch (Exception e) { |
| throw new BundleException("Failed to unregister resources", e); |
| } |
| } |
| |
| public static WebAppDescriptor getWebAppDescriptor() { |
| return webAppDescriptor; |
| } |
| |
| public static void setWebAppDescriptor(WebAppDescriptor webAppDescriptor) { |
| WebApp.webAppDescriptor = webAppDescriptor; |
| } |
| |
| public HttpService getHttpService() { |
| return httpService; |
| } |
| |
| public void setHttpService(HttpService httpService) { |
| this.httpService = httpService; |
| } |
| |
| public ServiceReference getSRef() { |
| return sRef; |
| } |
| |
| public void setSRef(ServiceReference sRef) { |
| this.sRef = sRef; |
| } |
| } |