Author: dims Date: Thu Mar 6 07:45:18 2008 New Revision: 634314 URL: http://svn.apache.org/viewvc?rev=634314&view=rev Log: copy some stuff over from muse for prototyping a new explicit deploy service for programatically adding new web services
Added: webservices/axis2/trunk/java/modules/osgi/src/org/apache/axis2/extensions/osgi/core/ webservices/axis2/trunk/java/modules/osgi/src/org/apache/axis2/extensions/osgi/core/SOAPProvider.java webservices/axis2/trunk/java/modules/osgi/src/org/apache/axis2/extensions/osgi/core/web/ webservices/axis2/trunk/java/modules/osgi/src/org/apache/axis2/extensions/osgi/core/web/ServletDescriptor.java webservices/axis2/trunk/java/modules/osgi/src/org/apache/axis2/extensions/osgi/core/web/WebApp.java webservices/axis2/trunk/java/modules/osgi/src/org/apache/axis2/extensions/osgi/core/web/WebAppDescriptor.java Added: webservices/axis2/trunk/java/modules/osgi/src/org/apache/axis2/extensions/osgi/core/SOAPProvider.java URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/osgi/src/org/apache/axis2/extensions/osgi/core/SOAPProvider.java?rev=634314&view=auto ============================================================================== --- webservices/axis2/trunk/java/modules/osgi/src/org/apache/axis2/extensions/osgi/core/SOAPProvider.java (added) +++ webservices/axis2/trunk/java/modules/osgi/src/org/apache/axis2/extensions/osgi/core/SOAPProvider.java Thu Mar 6 07:45:18 2008 @@ -0,0 +1,151 @@ +/* + * 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.extensions.osgi.core; + +import org.apache.axis2.extensions.osgi.core.web.WebApp; +import org.osgi.framework.Bundle; + +/** + * SOAPProvider is an interface for generic SOAP functionality. + * Use this interface to register SOAPProvider services with the OSGi + * runtime using the <code>BundleContext.registerService()</code> methods. + */ + +public interface SOAPProvider { + + /** + * The name of the SOAPProvider implementation. Use this as the key when constructing + * the service's properties for registration with the OSGi runtime. + */ + public static final String PROVIDER_NAME = "Name"; + + /** + * The major version of the SOAPProvider implementation. Use this as the key when constructing + * the service's properties for registration with the OSGi runtime. + */ + public static final String PROVIDER_MAJOR_VERSION = "MajorVersion"; + + /** + * The minor version of the SOAPProvider implementation. Use this as the key when constructing + * the service's properties for registration with the OSGi runtime. + */ + public static final String PROVIDER_MINOR_VERSION = "MinorVersion"; + + /** + * Getter method for the implementation's provider name. This name should be the same + * as the one used during the registration of the SOAPProvider service + * + * @return the Provider Name + */ + public String getProviderName(); + + /** + * Getter method for the implementation's version. This name should be constructed + * from the major and minor versions used during registration of the SOAPProvider service. + * + * @return the Provider Version + */ + public String getProviderVersion(); + + public Object getProviderEngine(); + + public Object getProviderDeployer(); + + public Object getProviderDeployer(WebApp webApp); + + /** + * Deploys an Object as a WebService using the implementation's default binding type. + * The service is deployed into the provider's default application context. + * + * @param srvName the display name of the service + * @param srvClass the class or interface that should be exposed. Specifying an interface + * allows only the desired methods of the service object to be published. + * @param srvObject the actual implementation + * @throws Exception + */ + public void deployService(String srvName, Class srvClass, Object srvObject, String handlerChain) throws Exception; + + /** + * Deploys an Object as a WebService using a specified binding type + * The service is deployed into the provider's default application context. + * + * @param srvName the display name of the service + * @param bindingType the name of the desired binding type + * @param srvClass the class or interface that should be exposed. Specifying an interface + * allows only the desired methods of the service object to be published. + * @param srvObject the actual implementation + * @throws Exception + */ + public void deployService(String srvName, String bindingType, Class srvClass, Object srvObject, String handlerChain) throws Exception; + + /** + * Deploys an Object as a WebService using the provider's default binding type. + * The service is deployed into the specified <code>WebApp</code> context + * + * @param WebApp the target web application context + * @param srvName the display name of the service + * @param srvClass the class or interface that should be exposed. Specifying an interface + * allows only the desired methods of the service object to be published. + * @param srvObject the actual implementation + * @throws Exception + */ + public void deployService(WebApp webApp, String srvName, Class srvClass, Object srvObject, String handlerChain) throws Exception; + + /** + * Deploys an Object as a WebService using a specified binding type + * The service is deployed into the specified <code>WebApp</code> context + * + * @param WebApp the target web application context + * @param srvName the display name of the service + * @param bindingType the name of the desired binding type + * @param srvClass the class or interface that should be exposed. Specifying an interface + * allows only the desired methods of the service object to be published. + * @param srvObject the actual implementation + * @throws Exception + */ + public void deployService(WebApp webApp, String srvName, String bindingType, Class srvClass, Object srvObject, String handlerChain) throws Exception; + + public void undeployService(String srvName, Class srvClass) throws Exception; + + public void undeployService(WebApp webApp, String srvName, Class srvClass) throws Exception; + + /** + * Gets a web application from the provider for the given context path. + * + * @param contextPath the context path of the desired WebApp + * @param create if <code>true</code>, create the WebApp if it does not exits. + * @return return the WebApp + * @throws Exception + */ + public WebApp getWebApp(String contextPath, boolean create) throws Exception; + + /** + * Gets a web application from the provider for the given context path, using + * the provided bundle as the location for the engine's configuration information + * + * @param contextPath the context path of the desired WebApp + * @param create if <code>true</code>, create the WebApp if it does not exits. + * @return return the WebApp + * @throws Exception + */ + public WebApp getWebApp(Bundle bundle, String contextPath, boolean create) throws Exception; + +} Added: webservices/axis2/trunk/java/modules/osgi/src/org/apache/axis2/extensions/osgi/core/web/ServletDescriptor.java URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/osgi/src/org/apache/axis2/extensions/osgi/core/web/ServletDescriptor.java?rev=634314&view=auto ============================================================================== --- webservices/axis2/trunk/java/modules/osgi/src/org/apache/axis2/extensions/osgi/core/web/ServletDescriptor.java (added) +++ webservices/axis2/trunk/java/modules/osgi/src/org/apache/axis2/extensions/osgi/core/web/ServletDescriptor.java Thu Mar 6 07:45:18 2008 @@ -0,0 +1,66 @@ +/* + * 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.extensions.osgi.core.web; + +import javax.servlet.http.HttpServlet; +import java.util.Hashtable; + +/** + * + * ServletDescriptor a utility class for describing Servlets to be deployed into a WebApp + */ + +public class ServletDescriptor { + protected Hashtable initParameters; + + protected HttpServlet servlet; + + protected String subContext; + + public ServletDescriptor(String subContext, HttpServlet servlet) { + this.subContext = subContext; + this.servlet = servlet; + } + + public Hashtable getInitParameters() { + return initParameters; + } + + public void setInitParameters(Hashtable initParameters) { + this.initParameters = initParameters; + } + + public HttpServlet getServlet() { + return servlet; + } + + public void setServlet(HttpServlet servlet) { + this.servlet = servlet; + } + + public String getSubContext() { + return subContext; + } + + public void setSubContext(String subContext) { + this.subContext = subContext; + } +} Added: webservices/axis2/trunk/java/modules/osgi/src/org/apache/axis2/extensions/osgi/core/web/WebApp.java URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/osgi/src/org/apache/axis2/extensions/osgi/core/web/WebApp.java?rev=634314&view=auto ============================================================================== --- webservices/axis2/trunk/java/modules/osgi/src/org/apache/axis2/extensions/osgi/core/web/WebApp.java (added) +++ webservices/axis2/trunk/java/modules/osgi/src/org/apache/axis2/extensions/osgi/core/web/WebApp.java Thu Mar 6 07:45:18 2008 @@ -0,0 +1,136 @@ +/* + * 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.extensions.osgi.core.web; + +import java.net.URL; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +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; + +/** + * + * 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; + } +} Added: webservices/axis2/trunk/java/modules/osgi/src/org/apache/axis2/extensions/osgi/core/web/WebAppDescriptor.java URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/osgi/src/org/apache/axis2/extensions/osgi/core/web/WebAppDescriptor.java?rev=634314&view=auto ============================================================================== --- webservices/axis2/trunk/java/modules/osgi/src/org/apache/axis2/extensions/osgi/core/web/WebAppDescriptor.java (added) +++ webservices/axis2/trunk/java/modules/osgi/src/org/apache/axis2/extensions/osgi/core/web/WebAppDescriptor.java Thu Mar 6 07:45:18 2008 @@ -0,0 +1,49 @@ +/* + * 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.extensions.osgi.core.web; + +/** + * + * WebAppDescriptor is a utility class for containing the static information + * required by the WebApp class + */ + +public class WebAppDescriptor { + protected String context; + + protected ServletDescriptor[] servlet; + + public String getContext() { + return context; + } + + public void setContext(String context) { + this.context = context; + } + + public ServletDescriptor[] getServlet() { + return servlet; + } + + public void setServlet(ServletDescriptor[] servlet) { + this.servlet = servlet; + } +} --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]