Modified: geronimo/trunk/modules/jetty-builder/src/java/org/apache/geronimo/jetty/deployment/JettyModuleBuilder.java URL: http://svn.apache.org/viewcvs/geronimo/trunk/modules/jetty-builder/src/java/org/apache/geronimo/jetty/deployment/JettyModuleBuilder.java?view=diff&r1=154622&r2=154623 ============================================================================== --- geronimo/trunk/modules/jetty-builder/src/java/org/apache/geronimo/jetty/deployment/JettyModuleBuilder.java (original) +++ geronimo/trunk/modules/jetty-builder/src/java/org/apache/geronimo/jetty/deployment/JettyModuleBuilder.java Sun Feb 20 20:43:02 2005 @@ -58,6 +58,7 @@ import org.apache.geronimo.j2ee.deployment.Module; import org.apache.geronimo.j2ee.deployment.ModuleBuilder; import org.apache.geronimo.j2ee.deployment.WebModule; +import org.apache.geronimo.j2ee.deployment.WebServiceBuilder; import org.apache.geronimo.j2ee.j2eeobjectnames.J2eeContext; import org.apache.geronimo.j2ee.j2eeobjectnames.J2eeContextImpl; import org.apache.geronimo.j2ee.j2eeobjectnames.NameFactory; @@ -67,6 +68,7 @@ import org.apache.geronimo.jetty.JettyServletHolder; import org.apache.geronimo.jetty.JettyWebAppContext; import org.apache.geronimo.kernel.Kernel; +import org.apache.geronimo.kernel.GBeanNotFoundException; import org.apache.geronimo.kernel.repository.Repository; import org.apache.geronimo.naming.deployment.ENCConfigBuilder; import org.apache.geronimo.naming.deployment.GBeanResourceEnvironmentBuilder; @@ -102,6 +104,9 @@ import org.apache.geronimo.xbeans.j2ee.WebAppType; import org.apache.geronimo.xbeans.j2ee.WebResourceCollectionType; import org.apache.geronimo.xbeans.j2ee.WelcomeFileListType; +import org.apache.geronimo.xbeans.j2ee.WebservicesDocument; +import org.apache.geronimo.axis.builder.WSDescriptorParser; +import org.apache.geronimo.axis.builder.PortInfo; import org.apache.xmlbeans.XmlException; import org.apache.xmlbeans.XmlObject; import org.mortbay.http.BasicAuthenticator; @@ -119,6 +124,9 @@ private final ObjectName defaultServlets; private final ObjectName defaultFilters; private final ObjectName defaultFilterMappings; + private final ObjectName pojoWebServiceTemplate; + + private final WebServiceBuilder webServiceBuilder; private final List defaultWelcomeFiles; private final Integer defaultSessionTimeoutSeconds; @@ -133,6 +141,8 @@ ObjectName defaultServlets, ObjectName defaultFilters, ObjectName defaultFilterMappings, + ObjectName pojoWebServiceTemplate, + WebServiceBuilder webServiceBuilder, Repository repository, Kernel kernel) { this.defaultParentId = defaultParentId; @@ -141,6 +151,8 @@ this.defaultServlets = defaultServlets; this.defaultFilters = defaultFilters; this.defaultFilterMappings = defaultFilterMappings; + this.pojoWebServiceTemplate = pojoWebServiceTemplate; + this.webServiceBuilder = webServiceBuilder; this.repository = repository; this.kernel = kernel; @@ -188,6 +200,15 @@ } check(webApp); + //look for a webservices dd + Map portMap = Collections.EMPTY_MAP; + try { + URL wsDDUrl = DeploymentUtil.createJarURL(moduleFile, "WEB-INF/webservices.xml"); + portMap = WSDescriptorParser.parseWebServiceDescriptor(wsDDUrl, moduleFile, false); + } catch (MalformedURLException e) { + //no descriptor + } + // parse vendor dd JettyWebAppType jettyWebApp = getJettyWebApp(plan, moduleFile, standAlone, targetPath, webApp); @@ -210,7 +231,7 @@ parentId = defaultParentId; } - WebModule module = new WebModule(standAlone, configId, parentId, moduleFile, targetPath, webApp, jettyWebApp, specDD); + WebModule module = new WebModule(standAlone, configId, parentId, moduleFile, targetPath, webApp, jettyWebApp, specDD, portMap); module.setContextRoot(jettyWebApp.getContextRoot()); return module; } @@ -673,10 +694,11 @@ //set up servlet gbeans. ServletType[] servletTypes = webApp.getServletArray(); + Map portMap = ((WebModule)module).getPortMap(); for (int i = 0; i < servletTypes.length; i++) { ServletType servletType = servletTypes[i]; - addServlet(webModuleName, servletType, servletMappings, securityRoles, webClassLoader, moduleJ2eeContext, earContext); + addServlet(webModuleName, servletType, servletMappings, securityRoles, portMap, webClassLoader, moduleJ2eeContext, earContext); } } catch (DeploymentException de) { throw de; @@ -704,7 +726,13 @@ return webClassLoader; } - private void addServlet(ObjectName webModuleName, ServletType servletType, Map servletMappings, Set securityRoles, ClassLoader webClassLoader, J2eeContext moduleJ2eeContext, EARContext earContext) throws MalformedObjectNameException, DeploymentException { + private void addServlet(ObjectName webModuleName, + ServletType servletType, + Map servletMappings, + Set securityRoles, + Map portMap, ClassLoader webClassLoader, + J2eeContext moduleJ2eeContext, + EARContext earContext) throws MalformedObjectNameException, DeploymentException { String servletName = servletType.getServletName().getStringValue().trim(); ObjectName servletObjectName = NameFactory.getWebComponentName(null, null, null, null, servletName, NameFactory.SERVLET, moduleJ2eeContext); GBeanData servletData; @@ -726,9 +754,18 @@ servletData = new GBeanData(servletObjectName, JettyServletHolder.GBEAN_INFO); servletData.setAttribute("servletClass", servletClassName); } else { -// servletData = webServiceBuilder.buildServletGBean(); - System.out.println("NOT DEPLOYING WEB SERVICE CLASS " + servletClassName); - return; + try { + servletData = kernel.getGBeanData(pojoWebServiceTemplate); + } catch (GBeanNotFoundException e) { + throw new DeploymentException("No POJO web service template gbean found at object name: " + pojoWebServiceTemplate, e); + } + servletData.setName(servletObjectName); + //let the web service builder deal with configuring the gbean with the web service stack + PortInfo portInfo = (PortInfo) portMap.get(servletName); + if (portInfo == null) { + throw new DeploymentException("No web service deployment info for servlet name " + servletName); + } + webServiceBuilder.configurePOJO(servletData, portInfo, servletClassName); } } else if (servletType.isSetJspFile()) { servletData = new GBeanData(servletObjectName, JettyServletHolder.GBEAN_INFO); @@ -1070,6 +1107,8 @@ infoBuilder.addAttribute("defaultServlets", ObjectName.class, true); infoBuilder.addAttribute("defaultFilters", ObjectName.class, true); infoBuilder.addAttribute("defaultFilterMappings", ObjectName.class, true); + infoBuilder.addAttribute("pojoWebServiceTemplate", ObjectName.class, true); + infoBuilder.addReference("WebServiceBuilder", WebServiceBuilder.class); infoBuilder.addReference("Repository", Repository.class); infoBuilder.addAttribute("kernel", Kernel.class, false); infoBuilder.addInterface(ModuleBuilder.class); @@ -1082,6 +1121,8 @@ "defaultServlets", "defaultFilters", "defaultFilterMappings", + "pojoWebServiceTemplate", + "WebServiceBuilder", "Repository", "kernel"}); GBEAN_INFO = infoBuilder.getBeanInfo();
Modified: geronimo/trunk/modules/jetty-builder/src/test/org/apache/geronimo/jetty/deployment/JettyModuleBuilderTest.java URL: http://svn.apache.org/viewcvs/geronimo/trunk/modules/jetty-builder/src/test/org/apache/geronimo/jetty/deployment/JettyModuleBuilderTest.java?view=diff&r1=154622&r2=154623 ============================================================================== --- geronimo/trunk/modules/jetty-builder/src/test/org/apache/geronimo/jetty/deployment/JettyModuleBuilderTest.java (original) +++ geronimo/trunk/modules/jetty-builder/src/test/org/apache/geronimo/jetty/deployment/JettyModuleBuilderTest.java Sun Feb 20 20:43:02 2005 @@ -47,6 +47,7 @@ import org.apache.geronimo.j2ee.deployment.RefContext; import org.apache.geronimo.j2ee.deployment.ResourceReferenceBuilder; import org.apache.geronimo.j2ee.deployment.ServiceReferenceBuilder; +import org.apache.geronimo.j2ee.deployment.WebServiceBuilder; import org.apache.geronimo.j2ee.j2eeobjectnames.J2eeContext; import org.apache.geronimo.j2ee.j2eeobjectnames.J2eeContextImpl; import org.apache.geronimo.j2ee.j2eeobjectnames.NameFactory; @@ -226,10 +227,12 @@ kernel.startGBean(baseConfig.getName()); ObjectName defaultServlets = ObjectName.getInstance("test:name=test,type=none,*"); + ObjectName pojoWebServiceTemplate = null; + WebServiceBuilder webServiceBuilder = null; //install the policy configuration factory SecurityServiceImpl securityService = new SecurityServiceImpl(null, "org.apache.geronimo.security.jacc.GeronimoPolicyConfigurationFactory", null); - builder = new JettyModuleBuilder(new URI("null"), new Integer(1800), Collections.EMPTY_LIST, containerName, defaultServlets, null, null, null, kernel); + builder = new JettyModuleBuilder(new URI("null"), new Integer(1800), Collections.EMPTY_LIST, containerName, defaultServlets, null, null, pojoWebServiceTemplate, webServiceBuilder, null, kernel); container = new GBeanData(containerName, JettyContainerImpl.GBEAN_INFO); Modified: geronimo/trunk/modules/jetty-builder/src/test/org/apache/geronimo/jetty/deployment/PlanParsingTest.java URL: http://svn.apache.org/viewcvs/geronimo/trunk/modules/jetty-builder/src/test/org/apache/geronimo/jetty/deployment/PlanParsingTest.java?view=diff&r1=154622&r2=154623 ============================================================================== --- geronimo/trunk/modules/jetty-builder/src/test/org/apache/geronimo/jetty/deployment/PlanParsingTest.java (original) +++ geronimo/trunk/modules/jetty-builder/src/test/org/apache/geronimo/jetty/deployment/PlanParsingTest.java Sun Feb 20 20:43:02 2005 @@ -9,12 +9,15 @@ import org.apache.geronimo.xbeans.geronimo.jetty.JettyWebAppDocument; import org.apache.geronimo.xbeans.geronimo.jetty.JettyWebAppType; import org.apache.geronimo.xbeans.geronimo.naming.GerResourceRefType; +import org.apache.geronimo.j2ee.deployment.WebServiceBuilder; /** */ public class PlanParsingTest extends TestCase { ObjectName jettyContainerObjectName = JMXUtil.getObjectName("test:type=JettyContainer"); - private JettyModuleBuilder builder = new JettyModuleBuilder(null, new Integer(1800), null, jettyContainerObjectName, null, null, null, null, null); + ObjectName pojoWebServiceTemplate = null; + WebServiceBuilder webServiceBuilder = null; + private JettyModuleBuilder builder = new JettyModuleBuilder(null, new Integer(1800), null, jettyContainerObjectName, null, null, null, pojoWebServiceTemplate, webServiceBuilder, null, null); private File basedir = new File(System.getProperty("basedir", ".")); public void testResourceRef() throws Exception { Added: geronimo/trunk/modules/jetty/src/java/org/apache/geronimo/jetty/JettyAxisPOJOWebService.java URL: http://svn.apache.org/viewcvs/geronimo/trunk/modules/jetty/src/java/org/apache/geronimo/jetty/JettyAxisPOJOWebService.java?view=auto&rev=154623 ============================================================================== --- geronimo/trunk/modules/jetty/src/java/org/apache/geronimo/jetty/JettyAxisPOJOWebService.java (added) +++ geronimo/trunk/modules/jetty/src/java/org/apache/geronimo/jetty/JettyAxisPOJOWebService.java Sun Feb 20 20:43:02 2005 @@ -0,0 +1,150 @@ +/** + * + * Copyright 2004 The Apache Software Foundation + * + * 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. + */ +package org.apache.geronimo.jetty; + +import java.io.IOException; +import java.io.InputStream; +import java.io.OutputStream; +import java.util.Map; +import java.util.Set; +import java.util.Collections; +import javax.security.jacc.PolicyContext; +import javax.servlet.ServletException; +import javax.servlet.ServletRequest; +import javax.servlet.ServletResponse; +import javax.servlet.UnavailableException; +import javax.servlet.Servlet; +import javax.servlet.ServletConfig; + +import org.apache.geronimo.gbean.GBeanInfo; +import org.apache.geronimo.gbean.GBeanInfoBuilder; +import org.apache.geronimo.j2ee.j2eeobjectnames.NameFactory; +import org.mortbay.jetty.servlet.ServletHolder; +import org.mortbay.jetty.servlet.ServletHttpRequest; + + +/** + * This is intended to hold the web service stack for an axis POJO web service. + * It is starting life as a copy of JettyServletHolder. + * + * @version $Rev: 154436 $ $Date: 2005-02-19 10:22:02 -0800 (Sat, 19 Feb 2005) $ + */ +public class JettyAxisPOJOWebService extends ServletHolder { + + //todo consider interface instead of this constructor for endpoint use. + public JettyAxisPOJOWebService() { + + } + + public JettyAxisPOJOWebService(String servletName, + Map initParams, + Integer loadOnStartup, + Set servletMappings, + Map webRoleRefPermissions, + JettyServletRegistration context) throws Exception { + super(context == null? null: context.getServletHandler(), servletName, DummyServlet.class.getName(), null); + //context will be null only for use as "default servlet info holder" in deployer. + + if (context != null) { + putAll(initParams); + if (loadOnStartup != null) { + setInitOrder(loadOnStartup.intValue()); + } + //this now starts the servlet in the appropriate context + context.registerServletHolder(this, servletName, servletMappings, webRoleRefPermissions == null? Collections.EMPTY_MAP: webRoleRefPermissions); +// start(); + } + } + + //todo how do we stop/destroy the servlet? + //todo is start called twice??? + + public String getServletName() { + return getName(); + } + + /** + * Service a request with this servlet. Set the ThreadLocal to hold the + * current JettyServletHolder. + */ + public void handle(ServletRequest request, ServletResponse response) + throws ServletException, UnavailableException, IOException { + + JettyServletHolder.currentServletHolder.set(this); + PolicyContext.setHandlerData(ServletHttpRequest.unwrap(request)); + + super.handle(request, response); + } + + public static class DummyServlet implements Servlet { + + public void init(ServletConfig config) throws ServletException { + + } + + public ServletConfig getServletConfig() { + return null; + } + + public void service(ServletRequest req, ServletResponse res) throws ServletException, IOException { + //just for fun, copy input into output + InputStream in = req.getInputStream(); + OutputStream out = res.getOutputStream(); + byte[] buf = new byte[1024]; + int i; + while ((i = in.read(buf)) > 0) { + out.write(buf, 0, i); + } + } + + public String getServletInfo() { + return null; + } + + public void destroy() { + + } + } + + public static final GBeanInfo GBEAN_INFO; + + static { + GBeanInfoBuilder infoBuilder = new GBeanInfoBuilder(JettyAxisPOJOWebService.class, NameFactory.SERVLET_WEB_SERVICE_TEMPLATE); + //todo replace with interface + infoBuilder.addInterface(ServletHolder.class); + + infoBuilder.addAttribute("servletName", String.class, true); + infoBuilder.addAttribute("initParams", Map.class, true); + infoBuilder.addAttribute("loadOnStartup", Integer.class, true); + infoBuilder.addAttribute("servletMappings", Set.class, true); + infoBuilder.addAttribute("webRoleRefPermissions", Map.class, true); + infoBuilder.addReference("JettyServletRegistration", JettyServletRegistration.class); + + infoBuilder.setConstructor(new String[] {"servletName", + "initParams", + "loadOnStartup", + "servletMappings", + "webRoleRefPermissions", + "JettyServletRegistration"}); + + GBEAN_INFO = infoBuilder.getBeanInfo(); + } + + public static GBeanInfo getGBeanInfo() { + return GBEAN_INFO; + } +} Modified: geronimo/trunk/modules/jetty/src/java/org/apache/geronimo/jetty/JettyServletHolder.java URL: http://svn.apache.org/viewcvs/geronimo/trunk/modules/jetty/src/java/org/apache/geronimo/jetty/JettyServletHolder.java?view=diff&r1=154622&r2=154623 ============================================================================== --- geronimo/trunk/modules/jetty/src/java/org/apache/geronimo/jetty/JettyServletHolder.java (original) +++ geronimo/trunk/modules/jetty/src/java/org/apache/geronimo/jetty/JettyServletHolder.java Sun Feb 20 20:43:02 2005 @@ -44,7 +44,7 @@ * @see org.apache.geronimo.jetty.JAASJettyRealm#isUserInRole(java.security.Principal, java.lang.String) */ public class JettyServletHolder extends ServletHolder { - private static final ThreadLocal currentServletHolder = new ThreadLocal(); + static final ThreadLocal currentServletHolder = new ThreadLocal(); //todo consider interface instead of this constructor for endpoint use. public JettyServletHolder() { Modified: geronimo/trunk/modules/tomcat/src/java/org/apache/geronimo/tomcat/deployment/TomcatModuleBuilder.java URL: http://svn.apache.org/viewcvs/geronimo/trunk/modules/tomcat/src/java/org/apache/geronimo/tomcat/deployment/TomcatModuleBuilder.java?view=diff&r1=154622&r2=154623 ============================================================================== --- geronimo/trunk/modules/tomcat/src/java/org/apache/geronimo/tomcat/deployment/TomcatModuleBuilder.java (original) +++ geronimo/trunk/modules/tomcat/src/java/org/apache/geronimo/tomcat/deployment/TomcatModuleBuilder.java Sun Feb 20 20:43:02 2005 @@ -181,8 +181,9 @@ // webapp to Jetty- or TomcatModuleBuilder based on parentId. log.warn("Assigning defaultParentId [" + defaultParentId + "] to webapp [" + configId + "]"); parentId = defaultParentId; + Map portMap = null; - WebModule module = new WebModule(false, configId, parentId, moduleFile, "war", webApp, jettyWebApp, specDD); + WebModule module = new WebModule(false, configId, parentId, moduleFile, "war", webApp, jettyWebApp, specDD, portMap); module.setContextRoot(jettyWebApp.getContextRoot()); return module;