You are viewing a plain text version of this content. The canonical link for it is here.
Posted to scm@geronimo.apache.org by dj...@apache.org on 2005/04/07 16:58:25 UTC

svn commit: r160407 - in geronimo/trunk/modules: axis-builder/src/java/org/apache/geronimo/axis/builder/ axis/src/java/org/apache/geronimo/axis/server/ axis/src/test/org/apache/geronimo/axis/ jetty-builder/src/java/org/apache/geronimo/jetty/deployment/ jetty/src/java/org/apache/geronimo/jetty/ jetty/src/test/org/apache/geronimo/jetty/ webservices/src/java/org/apache/geronimo/webservices/

Author: djencks
Date: Thu Apr  7 07:58:22 2005
New Revision: 160407

URL: http://svn.apache.org/viewcvs?view=rev&rev=160407
Log:
JettyClassloader now makes contents of war available as resources.  Use classloader to find wsdl in ws.

Modified:
    geronimo/trunk/modules/axis-builder/src/java/org/apache/geronimo/axis/builder/AxisBuilder.java
    geronimo/trunk/modules/axis-builder/src/java/org/apache/geronimo/axis/builder/AxisServiceBuilder.java
    geronimo/trunk/modules/axis-builder/src/java/org/apache/geronimo/axis/builder/HeavyweightOperationDescBuilder.java
    geronimo/trunk/modules/axis-builder/src/java/org/apache/geronimo/axis/builder/PortInfo.java
    geronimo/trunk/modules/axis-builder/src/java/org/apache/geronimo/axis/builder/WSDescriptorParser.java
    geronimo/trunk/modules/axis/src/java/org/apache/geronimo/axis/server/AxisWebServiceContainer.java
    geronimo/trunk/modules/axis/src/test/org/apache/geronimo/axis/AxisWebServiceContainerTest.java
    geronimo/trunk/modules/jetty-builder/src/java/org/apache/geronimo/jetty/deployment/JettyModuleBuilder.java
    geronimo/trunk/modules/jetty/src/java/org/apache/geronimo/jetty/JettyClassLoader.java
    geronimo/trunk/modules/jetty/src/java/org/apache/geronimo/jetty/JettyWebAppContext.java
    geronimo/trunk/modules/jetty/src/test/org/apache/geronimo/jetty/ClassLoaderTest.java
    geronimo/trunk/modules/webservices/src/java/org/apache/geronimo/webservices/POJOWebServiceServlet.java

Modified: geronimo/trunk/modules/axis-builder/src/java/org/apache/geronimo/axis/builder/AxisBuilder.java
URL: http://svn.apache.org/viewcvs/geronimo/trunk/modules/axis-builder/src/java/org/apache/geronimo/axis/builder/AxisBuilder.java?view=diff&r1=160406&r2=160407
==============================================================================
--- geronimo/trunk/modules/axis-builder/src/java/org/apache/geronimo/axis/builder/AxisBuilder.java (original)
+++ geronimo/trunk/modules/axis-builder/src/java/org/apache/geronimo/axis/builder/AxisBuilder.java Thu Apr  7 07:58:22 2005
@@ -128,14 +128,6 @@
         HandlerInfoChainFactory handlerInfoChainFactory = new HandlerInfoChainFactory(serviceInfo.getHanlderInfos());
         service.setOption(org.apache.axis.Constants.ATTR_HANDLERINFOCHAIN, handlerInfoChainFactory);
 
-        URL wsdlURL = null;
-        try {
-            wsdlURL = new URL(serviceDesc.getWSDLFile());
-        } catch (MalformedURLException e) {
-            throw new DeploymentException("Invalid URL to the webservice's WSDL file", e);
-        }
-
-
         URI location = null;
         try {
             location = new URI(serviceDesc.getEndpointURL());
@@ -144,7 +136,7 @@
         }
 
         classLoader = new ClassLoaderReference(classLoader);
-        AxisWebServiceContainer axisWebServiceContainer = new AxisWebServiceContainer(location, wsdlURL, service, classLoader);
+        AxisWebServiceContainer axisWebServiceContainer = new AxisWebServiceContainer(location, serviceDesc.getWSDLFile(), service, classLoader);
         //targetGBean.setAttribute("webServiceContainer", axisWebServiceContainer);
         try {
             targetGBean.setAttribute("webServiceContainer", new StoredObject(axisWebServiceContainer)); // Hack!

Modified: geronimo/trunk/modules/axis-builder/src/java/org/apache/geronimo/axis/builder/AxisServiceBuilder.java
URL: http://svn.apache.org/viewcvs/geronimo/trunk/modules/axis-builder/src/java/org/apache/geronimo/axis/builder/AxisServiceBuilder.java?view=diff&r1=160406&r2=160407
==============================================================================
--- geronimo/trunk/modules/axis-builder/src/java/org/apache/geronimo/axis/builder/AxisServiceBuilder.java (original)
+++ geronimo/trunk/modules/axis-builder/src/java/org/apache/geronimo/axis/builder/AxisServiceBuilder.java Thu Apr  7 07:58:22 2005
@@ -157,7 +157,7 @@
 
         URL location = getAddressLocation(port);
         serviceDesc.setEndpointURL(location.toExternalForm());
-        serviceDesc.setWSDLFile(portInfo.getWsdlURL().toExternalForm());
+        serviceDesc.setWSDLFile(portInfo.getWsdlLocation());
         Binding binding = port.getBinding();
 
         serviceDesc.setStyle(getStyle(binding));

Modified: geronimo/trunk/modules/axis-builder/src/java/org/apache/geronimo/axis/builder/HeavyweightOperationDescBuilder.java
URL: http://svn.apache.org/viewcvs/geronimo/trunk/modules/axis-builder/src/java/org/apache/geronimo/axis/builder/HeavyweightOperationDescBuilder.java?view=diff&r1=160406&r2=160407
==============================================================================
--- geronimo/trunk/modules/axis-builder/src/java/org/apache/geronimo/axis/builder/HeavyweightOperationDescBuilder.java (original)
+++ geronimo/trunk/modules/axis-builder/src/java/org/apache/geronimo/axis/builder/HeavyweightOperationDescBuilder.java Thu Apr  7 07:58:22 2005
@@ -150,7 +150,7 @@
         built = true;
 
         operationDesc.setName(operationName);
-        
+
         // Set to 'document', 'rpc' or 'wrapped'
         if (wrappedStype) {
             operationDesc.setStyle(Style.WRAPPED);
@@ -368,10 +368,11 @@
                     if (complexTypeMap.containsKey(elementType)) {
                         String javaClassName = (String) publicTypes.get(elementTypeQName);
                         javaElementType = getJavaClass(javaClassName);
-                    } else if (qnameToClassMap.containsKey(elementType)) {
-                        javaElementType = (Class) qnameToClassMap.get(elementType);
                     } else {
-                        throw new DeploymentException("Unknown type: " + elementType + " of name: " + elementName);
+                        javaElementType = (Class) qnameToClassMap.get(elementTypeQName);
+                        if (javaElementType == null) {
+                            throw new DeploymentException("Unknown type: " + elementType + " of name: " + elementName + " and QName: " + elementTypeQName);
+                        }
                     }
                 } else {
                     //anonymous type
@@ -588,7 +589,7 @@
         if (null == operationType) {
             throw new DeploymentException("No global element named " + name + " for operation " + operationName);
         }
-        
+
         // schemaType should be complex using xsd:sequence compositor
         SchemaParticle parametersType = operationType.getContentModel();
         if (SchemaParticle.ELEMENT == parametersType.getParticleType()) {
@@ -615,12 +616,12 @@
                     " is not a sequence for operation " + operationName);
         }
     }
-    
+
     /**
      * Supporting the Document/Literal Wrapped pattern
      *
      * See http://www-106.ibm.com/developerworks/webservices/library/ws-whichwsdl/ for a nice explanation and example
-     * 
+     *
      * wrapped-element tag is used
      * WSDL message with a single part
      * part uses the 'element' attribute to point to an elemement in the types section

Modified: geronimo/trunk/modules/axis-builder/src/java/org/apache/geronimo/axis/builder/PortInfo.java
URL: http://svn.apache.org/viewcvs/geronimo/trunk/modules/axis-builder/src/java/org/apache/geronimo/axis/builder/PortInfo.java?view=diff&r1=160406&r2=160407
==============================================================================
--- geronimo/trunk/modules/axis-builder/src/java/org/apache/geronimo/axis/builder/PortInfo.java (original)
+++ geronimo/trunk/modules/axis-builder/src/java/org/apache/geronimo/axis/builder/PortInfo.java Thu Apr  7 07:58:22 2005
@@ -16,10 +16,9 @@
  */
 package org.apache.geronimo.axis.builder;
 
-import java.net.URL;
-import javax.xml.namespace.QName;
 import javax.wsdl.Definition;
 import javax.wsdl.Port;
+import javax.xml.namespace.QName;
 
 import org.apache.geronimo.xbeans.j2ee.JavaWsdlMappingType;
 import org.apache.geronimo.xbeans.j2ee.PortComponentHandlerType;
@@ -38,9 +37,9 @@
     private final PortComponentHandlerType[] handlers;
     private final Port port;
 
-    private final URL wsdlURL;
+    private final String wsdlLocation;
 
-    public PortInfo(String portName, QName portQName, Definition definition, JavaWsdlMappingType javaWsdlMapping, String seiInterfaceName, PortComponentHandlerType[] handlers, Port port, ServiceEndpointInterfaceMappingType seiMapping, URL wsdlURL) {
+    public PortInfo(String portName, QName portQName, Definition definition, JavaWsdlMappingType javaWsdlMapping, String seiInterfaceName, PortComponentHandlerType[] handlers, Port port, ServiceEndpointInterfaceMappingType seiMapping, String wsdlLocation) {
         this.portName = portName;
         this.portQName = portQName;
         this.definition = definition;
@@ -49,11 +48,11 @@
         this.handlers = handlers;
         this.port = port;
         this.seiMapping = seiMapping;
-        this.wsdlURL = wsdlURL;
+        this.wsdlLocation = wsdlLocation;
     }
 
-    public URL getWsdlURL() {
-        return wsdlURL;
+    public String getWsdlLocation() {
+        return wsdlLocation;
     }
 
     public String getPortName() {

Modified: geronimo/trunk/modules/axis-builder/src/java/org/apache/geronimo/axis/builder/WSDescriptorParser.java
URL: http://svn.apache.org/viewcvs/geronimo/trunk/modules/axis-builder/src/java/org/apache/geronimo/axis/builder/WSDescriptorParser.java?view=diff&r1=160406&r2=160407
==============================================================================
--- geronimo/trunk/modules/axis-builder/src/java/org/apache/geronimo/axis/builder/WSDescriptorParser.java (original)
+++ geronimo/trunk/modules/axis-builder/src/java/org/apache/geronimo/axis/builder/WSDescriptorParser.java Thu Apr  7 07:58:22 2005
@@ -21,7 +21,6 @@
 import java.lang.reflect.Method;
 import java.math.BigDecimal;
 import java.math.BigInteger;
-import java.net.MalformedURLException;
 import java.net.URI;
 import java.net.URISyntaxException;
 import java.net.URL;
@@ -66,7 +65,6 @@
 import javax.xml.rpc.holders.StringHolder;
 
 import org.apache.geronimo.common.DeploymentException;
-import org.apache.geronimo.deployment.util.DeploymentUtil;
 import org.apache.geronimo.kernel.ClassLoading;
 import org.apache.geronimo.schema.SchemaConversionUtils;
 import org.apache.geronimo.xbeans.j2ee.ExceptionMappingType;
@@ -167,14 +165,9 @@
 
                 ServiceEndpointInterfaceMappingType seiMapping = (ServiceEndpointInterfaceMappingType) seiMappings.get(seiInterfaceName);
 
-                URL wsdlURL = null;
-                try {
-                    wsdlURL = DeploymentUtil.createJarURL(moduleFile, webserviceDescription.getWsdlFile().getStringValue().trim());
-                } catch (MalformedURLException e) {
-                    throw new DeploymentException("Invalid WSDL URL: " + webserviceDescription.getWsdlFile().getStringValue().trim(), e);
-                }
+                String wsdlLocation = webserviceDescription.getWsdlFile().getStringValue().trim();
 
-                PortInfo portInfo = new PortInfo(portComponentName, portQName, definition, javaWsdlMapping, seiInterfaceName, handlers, port, seiMapping, wsdlURL);
+                PortInfo portInfo = new PortInfo(portComponentName, portQName, definition, javaWsdlMapping, seiInterfaceName, handlers, port, seiMapping, wsdlLocation);
 
                 if (portMap.put(linkName, portInfo) != null) {
                     throw new DeploymentException("Ambiguous description of port associated with j2ee component " + linkName);

Modified: geronimo/trunk/modules/axis/src/java/org/apache/geronimo/axis/server/AxisWebServiceContainer.java
URL: http://svn.apache.org/viewcvs/geronimo/trunk/modules/axis/src/java/org/apache/geronimo/axis/server/AxisWebServiceContainer.java?view=diff&r1=160406&r2=160407
==============================================================================
--- geronimo/trunk/modules/axis/src/java/org/apache/geronimo/axis/server/AxisWebServiceContainer.java (original)
+++ geronimo/trunk/modules/axis/src/java/org/apache/geronimo/axis/server/AxisWebServiceContainer.java Thu Apr  7 07:58:22 2005
@@ -19,10 +19,8 @@
 import java.io.InputStream;
 import java.io.OutputStream;
 import java.net.URI;
-import java.net.URL;
 import java.util.Iterator;
 import java.util.Map;
-
 import javax.servlet.http.HttpServletResponse;
 import javax.wsdl.Definition;
 import javax.wsdl.Port;
@@ -30,6 +28,7 @@
 import javax.wsdl.extensions.ExtensibilityElement;
 import javax.wsdl.extensions.soap.SOAPAddress;
 import javax.wsdl.factory.WSDLFactory;
+import javax.wsdl.xml.WSDLLocator;
 import javax.wsdl.xml.WSDLReader;
 import javax.wsdl.xml.WSDLWriter;
 import javax.xml.soap.SOAPException;
@@ -49,30 +48,31 @@
 import org.apache.commons.logging.LogFactory;
 import org.apache.geronimo.webservices.WebServiceContainer;
 import org.w3c.dom.Element;
+import org.xml.sax.InputSource;
 
 /**
  * @version $Rev$ $Date$
  */
 public class AxisWebServiceContainer implements WebServiceContainer {
-    public static final String REQUEST = AxisWebServiceContainer.class.getName()+"@Request";
-    public static final String RESPONSE = AxisWebServiceContainer.class.getName()+"@Response";
+    public static final String REQUEST = AxisWebServiceContainer.class.getName() + "@Request";
+    public static final String RESPONSE = AxisWebServiceContainer.class.getName() + "@Response";
 
     private static Log log = LogFactory.getLog(AxisWebServiceContainer.class);
 
     public static final String XSD_NS = "http://www.w3.org/2001/XMLSchema";
 
     private final URI location;
-    private final URL wsdlURL;
+    private final String wsdlLocation;
     private final SOAPService service;
-    
+
     private final ClassLoader classLoader;
-    private final Byte wsdlMutext = new Byte((byte)0);
+    private final Byte wsdlMutext = new Byte((byte) 0);
     private transient Definition definition;
     private transient WSDLWriter wsdlWriter;
 
-    public AxisWebServiceContainer(URI location, URL wsdlURL, SOAPService service, ClassLoader classLoader) {
+    public AxisWebServiceContainer(URI location, String wsdlURL, SOAPService service, ClassLoader classLoader) {
         this.location = location;
-        this.wsdlURL = wsdlURL;
+        this.wsdlLocation = wsdlURL;
         this.service = service;
         this.classLoader = classLoader;
     }
@@ -82,7 +82,7 @@
         req.setAttribute(MESSAGE_CONTEXT, context);
 
         context.setClassLoader(classLoader);
-        
+
         Message responseMessage = null;
 
         String contentType = req.getHeader(HTTPConstants.HEADER_CONTENT_TYPE);
@@ -120,7 +120,7 @@
 
             Thread.currentThread().setContextClassLoader(classLoader);
             service.invoke(context);
-            
+
             responseMessage = context.getResponseMessage();
         } catch (AxisFault fault) {
             responseMessage = handleFault(fault, res, context);
@@ -196,17 +196,17 @@
         }
         return responseMessage;
     }
-    
+
     public void getWsdl(Request request, Response response) throws Exception {
-        
+
         // Avoid concurrent modification of the WSDL dom.
-        synchronized(wsdlMutext) {
-            
-            // Read in the the WSDL in once. 
-            if( definition == null ) {
+        synchronized (wsdlMutext) {
+
+            // Read in the the WSDL in once.
+            if (definition == null) {
                 initWSDLDom();
             }
-            
+
             // Update all the service port soap address elements.
             Map services = definition.getServices();
             for (Iterator iter1 = services.values().iterator(); iter1.hasNext();) {
@@ -216,14 +216,13 @@
                     Port port = (Port) iter2.next();
                     for (Iterator iter3 = port.getExtensibilityElements().iterator(); iter3.hasNext();) {
                         ExtensibilityElement element = (ExtensibilityElement) iter3.next();
-                        if (element instanceof SOAPAddress ) {
-                            SOAPAddress soapAddress = (SOAPAddress)element;
-                            URI realLocation = request.getURI();                            
+                        if (element instanceof SOAPAddress) {
+                            SOAPAddress soapAddress = (SOAPAddress) element;
+                            URI realLocation = request.getURI();
                             // We replace the host and port here.
-                            URI updated = new URI(
-                                    realLocation.getScheme(),
-                                    realLocation.getUserInfo(), 
-                                    realLocation.getHost(), 
+                            URI updated = new URI(realLocation.getScheme(),
+                                    realLocation.getUserInfo(),
+                                    realLocation.getHost(),
                                     realLocation.getPort(),
                                     realLocation.getPath(), // Humm is this right?
                                     null,
@@ -233,11 +232,11 @@
                     }
                 }
             }
-            
+
             // Dump the WSDL dom to the output stream
             OutputStream out = response.getOutputStream();
             wsdlWriter.writeWSDL(definition, out);
-            out.close();
+//            out.close();
         }
     }
 
@@ -248,14 +247,59 @@
         WSDLFactory wsdlFactory = WSDLFactory.newInstance();
         wsdlWriter = wsdlFactory.newWSDLWriter();
         WSDLReader wsdlReader = wsdlFactory.newWSDLReader();
-        definition = wsdlReader.readWSDL(wsdlURL.toExternalForm());
+        ResourceWSDLLocator wsdlLocator = new ResourceWSDLLocator(wsdlLocation, Thread.currentThread().getContextClassLoader(), classLoader);
+        definition = wsdlReader.readWSDL(wsdlLocator);
     }
 
     public URI getLocation() {
         return location;
     }
 
-    public URL getWsdlURL() {
-        return wsdlURL;
+    private static class ResourceWSDLLocator implements WSDLLocator {
+
+        private final String wsdlLocation;
+        private final ClassLoader classLoader;
+        private final ClassLoader classLoader2;
+
+        private String latestImportURI;
+
+        public ResourceWSDLLocator(String wsdlLocation, ClassLoader classLoader, ClassLoader classLoader2) {
+            this.wsdlLocation = wsdlLocation;
+            this.classLoader = classLoader;
+            this.classLoader2 = classLoader2;
+        }
+
+        public InputSource getBaseInputSource() {
+            InputStream wsdlInputStream = classLoader.getResourceAsStream(wsdlLocation);
+            if (wsdlInputStream == null) {
+                wsdlInputStream = classLoader2.getResourceAsStream(wsdlLocation);
+                if (wsdlInputStream == null) {
+                    throw new IllegalStateException("wsdl not found in classloader at " + wsdlLocation);
+                }
+            }
+            return new InputSource(wsdlInputStream);
+        }
+
+        public String getBaseURI() {
+            return wsdlLocation;
+        }
+
+        public InputSource getImportInputSource(String parentLocation, String relativeLocation) {
+            URI parentURI = URI.create(parentLocation);
+            latestImportURI = parentURI.resolve(relativeLocation).toString();
+            InputStream importInputStream = classLoader.getResourceAsStream(latestImportURI);
+            if (importInputStream == null) {
+                throw new IllegalStateException("wsdl not found in classloader at " + latestImportURI);
+            }
+            InputSource inputSource = new InputSource(importInputStream);
+            inputSource.setSystemId(getLatestImportURI());
+            return inputSource;
+        }
+
+        public String getLatestImportURI() {
+            return latestImportURI;
+        }
     }
+
+
 }

Modified: geronimo/trunk/modules/axis/src/test/org/apache/geronimo/axis/AxisWebServiceContainerTest.java
URL: http://svn.apache.org/viewcvs/geronimo/trunk/modules/axis/src/test/org/apache/geronimo/axis/AxisWebServiceContainerTest.java?view=diff&r1=160406&r2=160407
==============================================================================
--- geronimo/trunk/modules/axis/src/test/org/apache/geronimo/axis/AxisWebServiceContainerTest.java (original)
+++ geronimo/trunk/modules/axis/src/test/org/apache/geronimo/axis/AxisWebServiceContainerTest.java Thu Apr  7 07:58:22 2005
@@ -1,12 +1,12 @@
 /*
  * Copyright 2001-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.
@@ -15,13 +15,9 @@
  */
 package org.apache.geronimo.axis;
 
-import java.io.ByteArrayOutputStream;
 import java.io.InputStream;
-import java.io.OutputStream;
 import java.net.URI;
-import java.net.URL;
 import java.util.HashMap;
-
 import javax.xml.namespace.QName;
 
 import org.apache.axis.constants.Style;
@@ -34,15 +30,15 @@
 import org.apache.axis.handlers.soap.SOAPService;
 import org.apache.axis.providers.java.RPCProvider;
 import org.apache.geronimo.axis.server.AxisWebServiceContainer;
-import org.apache.geronimo.axis.server.ReadOnlyServiceDesc;
 import org.apache.geronimo.axis.server.POJOProvider;
+import org.apache.geronimo.axis.server.ReadOnlyServiceDesc;
 import org.apache.geronimo.axis.testData.echosample.EchoBean;
 import org.apache.geronimo.webservices.WebServiceContainer;
 
 //import org.openejb.deployment.OpenEJBModuleBuilder;
 
 /**
- * 
+ *
  * @version $Rev: $ $Date: $
  */
 public class AxisWebServiceContainerTest extends AbstractTestCase {
@@ -90,23 +86,15 @@
 
         RPCProvider provider = new POJOProvider();
         SOAPService service = new SOAPService(null, provider, null);
-        service.setServiceDescription(serviceDesc);
+        service.setServiceDescription(sd);
         service.setOption("className","org.apache.geronimo.axis.testData.echosample.EchoBean");
-        URL wsdlURL = cl.getResource("echo.wsdl");
+        String wsdlURL = "echo.wsdl";
         URI location = new URI(serviceDesc.getEndpointURL());
 
-        AxisWebServiceContainer axisWebServiceContainer =
+        AxisWebServiceContainer continaer =
             new AxisWebServiceContainer(location, wsdlURL, service, cl);
 
-        AxisWebServiceContainer continaer =
-            new AxisWebServiceContainer(
-                null,
-                null,
-                service,
-                Thread.currentThread().getContextClassLoader());
         InputStream in = cl.getResourceAsStream("echoString-req.txt");
-
-        OutputStream outputStream = new ByteArrayOutputStream();
 
         AxisRequest req =
             new AxisRequest(

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=160406&r2=160407
==============================================================================
--- 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 Thu Apr  7 07:58:22 2005
@@ -720,6 +720,12 @@
         getWebClassPath(earContext, webModule);
         URI[] webClassPath = webModule.getWebClasspath();
         URI baseUri = earContext.getBaseDir().toURI();
+        URL baseUrl = null;
+        try {
+            baseUrl = baseUri.resolve(webModule.getTargetPathURI()).toURL();
+        } catch (MalformedURLException e) {
+            throw new DeploymentException("Invalid module location: " + webModule.getTargetPathURI() + ", baseUri: " + baseUri);
+        }
         URL[] webClassPathURLs = new URL[webClassPath.length];
         for (int i = 0; i < webClassPath.length; i++) {
             URI path = baseUri.resolve(webClassPath[i]);
@@ -730,7 +736,7 @@
             }
         }
 
-        ClassLoader webClassLoader = new JettyClassLoader(webClassPathURLs, cl, contextPriorityClassLoader);
+        ClassLoader webClassLoader = new JettyClassLoader(webClassPathURLs, baseUrl, cl, contextPriorityClassLoader);
         return webClassLoader;
     }
 

Modified: geronimo/trunk/modules/jetty/src/java/org/apache/geronimo/jetty/JettyClassLoader.java
URL: http://svn.apache.org/viewcvs/geronimo/trunk/modules/jetty/src/java/org/apache/geronimo/jetty/JettyClassLoader.java?view=diff&r1=160406&r2=160407
==============================================================================
--- geronimo/trunk/modules/jetty/src/java/org/apache/geronimo/jetty/JettyClassLoader.java (original)
+++ geronimo/trunk/modules/jetty/src/java/org/apache/geronimo/jetty/JettyClassLoader.java Thu Apr  7 07:58:22 2005
@@ -25,13 +25,23 @@
 public class JettyClassLoader extends URLClassLoader {
     private final boolean contextPriorityClassLoader;
     private final ClassLoader parent;
+    private final ClassLoader resourceClassLoader;
 
-    public JettyClassLoader(URL[] urls, ClassLoader parent, boolean contextPriorityClassLoader) {
+    public JettyClassLoader(URL[] urls, URL resourceURL, ClassLoader parent, boolean contextPriorityClassLoader) {
         super(urls, parent);
 
         if (parent == null) {
             throw new IllegalArgumentException("Parent class loader is null");
         }
+        URL[] resourceURLS;
+        if (resourceURL != null) {
+            resourceURLS = new URL[urls.length + 1];
+            System.arraycopy(urls, 0, resourceURLS, 0, urls.length);
+            resourceURLS[resourceURLS.length - 1] = resourceURL;
+        } else {
+            resourceURLS = urls;
+        }
+        resourceClassLoader = new ResourceClassLoader(resourceURLS, parent);
 
         // hold on to the parent so we don't have to go throught the security check each time
         this.parent = parent;
@@ -69,23 +79,34 @@
     }
 
     public URL getResource(String name) {
-        if (!contextPriorityClassLoader ||
-                name.startsWith("java/") ||
-                name.startsWith("javax/") ||
-                name.startsWith("org/apache/geronimo/") ||
-                name.startsWith("org/mortbay/") ||
-                name.startsWith("org/xml/") ||
-                name.startsWith("org/w3c/")) {
-            return super.getResource(name);
-        }
+        return resourceClassLoader.getResource(name);
+    }
 
-        // try to load the resource from this class loader
-        URL url = findResource(name);
-        if (url != null) {
-            return url;
+    private class ResourceClassLoader extends URLClassLoader {
+
+        public ResourceClassLoader(URL[] urls, ClassLoader classLoader) {
+            super(urls, classLoader);
         }
 
-        // that didn't work... try the parent
-        return parent.getResource(name);
+        public URL getResource(String name) {
+            if (!contextPriorityClassLoader ||
+                    name.startsWith("java/") ||
+                    name.startsWith("javax/") ||
+                    name.startsWith("org/apache/geronimo/") ||
+                    name.startsWith("org/mortbay/") ||
+                    name.startsWith("org/xml/") ||
+                    name.startsWith("org/w3c/")) {
+                return super.getResource(name);
+            }
+
+            // try to load the resource from this class loader
+            URL url = findResource(name);
+            if (url != null) {
+                return url;
+            }
+
+            // that didn't work... try the parent
+            return parent.getResource(name);
+        }
     }
 }

Modified: geronimo/trunk/modules/jetty/src/java/org/apache/geronimo/jetty/JettyWebAppContext.java
URL: http://svn.apache.org/viewcvs/geronimo/trunk/modules/jetty/src/java/org/apache/geronimo/jetty/JettyWebAppContext.java?view=diff&r1=160406&r2=160407
==============================================================================
--- geronimo/trunk/modules/jetty/src/java/org/apache/geronimo/jetty/JettyWebAppContext.java (original)
+++ geronimo/trunk/modules/jetty/src/java/org/apache/geronimo/jetty/JettyWebAppContext.java Thu Apr  7 07:58:22 2005
@@ -188,6 +188,7 @@
 
         URI root = URI.create(configurationBaseUrl.toString());
         webAppRoot = root.resolve(uri);
+        URL webAppRootURL = webAppRoot.toURL();
 
         URL[] urls = new URL[webClassPath.length];
         for (int i = 0; i < webClassPath.length; i++) {
@@ -195,7 +196,7 @@
             classPathEntry = root.resolve(classPathEntry);
             urls[i] = classPathEntry.toURL();
         }
-        this.webClassLoader = new JettyClassLoader(urls, classLoader, contextPriorityClassLoader);
+        this.webClassLoader = new JettyClassLoader(urls, webAppRootURL, classLoader, contextPriorityClassLoader);
         setClassLoader(this.webClassLoader);
 
         handler = new WebApplicationHandler();
@@ -479,7 +480,7 @@
 
 
     public static final GBeanInfo GBEAN_INFO;
-                                                              
+
     static {
         GBeanInfoBuilder infoBuilder = new GBeanInfoBuilder("Jetty WebApplication Context", JettyWebAppContext.class, NameFactory.WEB_MODULE);
         infoBuilder.addAttribute("deploymentDescriptor", String.class, true);

Modified: geronimo/trunk/modules/jetty/src/test/org/apache/geronimo/jetty/ClassLoaderTest.java
URL: http://svn.apache.org/viewcvs/geronimo/trunk/modules/jetty/src/test/org/apache/geronimo/jetty/ClassLoaderTest.java?view=diff&r1=160406&r2=160407
==============================================================================
--- geronimo/trunk/modules/jetty/src/test/org/apache/geronimo/jetty/ClassLoaderTest.java (original)
+++ geronimo/trunk/modules/jetty/src/test/org/apache/geronimo/jetty/ClassLoaderTest.java Thu Apr  7 07:58:22 2005
@@ -48,7 +48,7 @@
      * parent ClassLoader.  This should work.
      */
     public void testFalseNonexistantJavaxClass() {
-        cl = new JettyClassLoader(urls, getClass().getClassLoader(), false);
+        cl = new JettyClassLoader(urls, null, getClass().getClassLoader(), false);
         try {
             cl.loadClass("javax.foo.Foo");
         } catch(ClassNotFoundException e) {
@@ -61,7 +61,7 @@
      * parent ClassLoader.  This should work.
      */
     public void testTrueNonexistantJavaxClass() {
-        cl = new JettyClassLoader(urls, getClass().getClassLoader(), true);
+        cl = new JettyClassLoader(urls, null, getClass().getClassLoader(), true);
         try {
             cl.loadClass("javax.foo.Foo");
         } catch(ClassNotFoundException e) {
@@ -75,7 +75,7 @@
      * This should always load the parent's copy.
      */
     public void testFalseExistantJavaxClass() {
-        cl = new JettyClassLoader(urls, getClass().getClassLoader(), false);
+        cl = new JettyClassLoader(urls, null, getClass().getClassLoader(), false);
         try {
             Class cls = cl.loadClass("javax.servlet.Servlet");
             assertTrue("Loaded wrong class first; expected to find parent CL's copy of javax.servlet.Servlet",cls.getDeclaredMethods().length > 0);
@@ -90,7 +90,7 @@
      * This should always load the parent's copy.
      */
     public void testTrueExistantJavaxClass() {
-        cl = new JettyClassLoader(urls, getClass().getClassLoader(), true);
+        cl = new JettyClassLoader(urls, null, getClass().getClassLoader(), true);
         try {
             Class cls = cl.loadClass("javax.servlet.Servlet");
             assertTrue("Loaded wrong class first; expected to find parent CL's copy of javax.servlet.Servlet",cls.getDeclaredMethods().length > 0);
@@ -107,7 +107,7 @@
      * copy when the contextPriorityClassLoader is set to true.
      */
     public void testFalseExistantNonJavaxClass() {
-        cl = new JettyClassLoader(urls, getClass().getClassLoader(), false);
+        cl = new JettyClassLoader(urls, null, getClass().getClassLoader(), false);
         try {
             Class cls = cl.loadClass("mx4j.MBeanDescription");
             assertTrue("Should not have overriden parent CL definition of class mx4j.MBeanDescription", cls.getDeclaredMethods().length > 0);
@@ -124,7 +124,7 @@
      * the contextPriorityClassLoader is set to true (as here).
      */
     public void testTrueExistantNonJavaxClass() {
-        cl = new JettyClassLoader(urls, getClass().getClassLoader(), true);
+        cl = new JettyClassLoader(urls, null, getClass().getClassLoader(), true);
         try {
             Class cls = cl.loadClass("mx4j.MBeanDescription");
             assertTrue("Should be able to override a class that is not in java.*, javax.*, etc.", cls.getDeclaredMethods().length == 0);
@@ -138,7 +138,7 @@
      * parent ClassLoader.  This should work.
      */
     public void testFalseNonexistantJavaxResource() {
-        cl = new JettyClassLoader(urls, getClass().getClassLoader(), false);
+        cl = new JettyClassLoader(urls, null, getClass().getClassLoader(), false);
         URL url = cl.getResource("javax/foo/Foo.class");
         if(url == null) {
             fail("Should be able to load a javax.* class that is not defined by my parent CL");
@@ -151,7 +151,7 @@
      * parent ClassLoader.  This should work.
      */
     public void testTrueNonexistantJavaxResource() {
-        cl = new JettyClassLoader(urls, getClass().getClassLoader(), true);
+        cl = new JettyClassLoader(urls, null, getClass().getClassLoader(), true);
         URL url = cl.getResource("javax/foo/Foo.class");
         if(url == null) {
             fail("Should be able to load a javax.* class that is not defined by my parent CL");
@@ -165,7 +165,7 @@
      * This should always load the parent's copy.
      */
     public void testFalseExistantJavaxResource() {
-        cl = new JettyClassLoader(urls, getClass().getClassLoader(), false);
+        cl = new JettyClassLoader(urls, null, getClass().getClassLoader(), false);
         URL url = cl.getResource("javax/servlet/Servlet.class");
         if(url == null) {
             fail("Problem with test; expecting to have javax.servlet.* on the ClassPath");
@@ -179,7 +179,7 @@
      * This should always load the parent's copy.
      */
     public void testTrueExistantJavaxResource() {
-        cl = new JettyClassLoader(urls, getClass().getClassLoader(), true);
+        cl = new JettyClassLoader(urls, null, getClass().getClassLoader(), true);
         URL url = cl.getResource("javax/servlet/Servlet.class");
         if(url == null) {
             fail("Problem with test; expecting to have javax.servlet.* on the ClassPath");
@@ -195,7 +195,7 @@
      * copy when the contextPriorityClassLoader is set to true.
      */
     public void testFalseExistantNonJavaxResource() {
-        cl = new JettyClassLoader(urls, getClass().getClassLoader(), false);
+        cl = new JettyClassLoader(urls, null, getClass().getClassLoader(), false);
         URL url = cl.getResource("mx4j/MBeanDescription.class");
         if(url == null) {
             fail("Problem with test; expecting to have mx4j.* on the ClassPath");
@@ -211,7 +211,7 @@
      * the contextPriorityClassLoader is set to true (as here).
      */
     public void testTrueExistantNonJavaxResource() {
-        cl = new JettyClassLoader(urls, getClass().getClassLoader(), true);
+        cl = new JettyClassLoader(urls, null, getClass().getClassLoader(), true);
         URL url = cl.getResource("mx4j/MBeanDescription.class");
         if(url == null) {
             fail("Problem with test; expecting to have mx4j.* on the ClassPath");

Modified: geronimo/trunk/modules/webservices/src/java/org/apache/geronimo/webservices/POJOWebServiceServlet.java
URL: http://svn.apache.org/viewcvs/geronimo/trunk/modules/webservices/src/java/org/apache/geronimo/webservices/POJOWebServiceServlet.java?view=diff&r1=160406&r2=160407
==============================================================================
--- geronimo/trunk/modules/webservices/src/java/org/apache/geronimo/webservices/POJOWebServiceServlet.java (original)
+++ geronimo/trunk/modules/webservices/src/java/org/apache/geronimo/webservices/POJOWebServiceServlet.java Thu Apr  7 07:58:22 2005
@@ -17,19 +17,13 @@
 package org.apache.geronimo.webservices;
 
 import java.io.IOException;
-import java.security.Principal;
 import javax.servlet.Servlet;
 import javax.servlet.ServletConfig;
 import javax.servlet.ServletContext;
 import javax.servlet.ServletException;
 import javax.servlet.ServletRequest;
 import javax.servlet.ServletResponse;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpSession;
-import javax.xml.rpc.ServiceException;
-import javax.xml.rpc.handler.MessageContext;
 import javax.xml.rpc.server.ServiceLifecycle;
-import javax.xml.rpc.server.ServletEndpointContext;
 
 /**
  * Delegates requests to a WebServiceContainer which is presumably for a POJO WebService