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 2006/10/15 22:40:09 UTC

svn commit: r464274 [1/2] - in /geronimo/server/trunk: configs/axis-deployer/src/plan/ modules/geronimo-axis-builder/src/main/java/org/apache/geronimo/axis/builder/ modules/geronimo-axis-builder/src/test/java/org/apache/geronimo/axis/builder/ modules/g...

Author: djencks
Date: Sun Oct 15 13:40:04 2006
New Revision: 464274

URL: http://svn.apache.org/viewvc?view=rev&rev=464274
Log:
GERONIMO-2492 first steps, make the WebServiceBuilder a little more flexible

Added:
    geronimo/server/trunk/modules/geronimo-tomcat-builder/src/test/java/org/apache/geronimo/tomcat/app/HelloWorld.java   (with props)
    geronimo/server/trunk/modules/geronimo-tomcat-builder/src/test/java/org/apache/geronimo/tomcat/app/HelloWorldWS.java   (with props)
    geronimo/server/trunk/modules/geronimo-tomcat-builder/src/test/java/org/apache/geronimo/tomcat/deployment/MockWebServiceBuilder.java   (with props)
    geronimo/server/trunk/modules/geronimo-webservices/src/main/java/org/apache/geronimo/webservices/SerializableWebServiceContainerFactoryGBean.java   (with props)
    geronimo/server/trunk/modules/geronimo-webservices/src/main/java/org/apache/geronimo/webservices/WebServiceContainerFactory.java   (with props)
Modified:
    geronimo/server/trunk/configs/axis-deployer/src/plan/plan.xml
    geronimo/server/trunk/modules/geronimo-axis-builder/src/main/java/org/apache/geronimo/axis/builder/AxisBuilder.java
    geronimo/server/trunk/modules/geronimo-axis-builder/src/main/java/org/apache/geronimo/axis/builder/SchemaInfoBuilder.java
    geronimo/server/trunk/modules/geronimo-axis-builder/src/test/java/org/apache/geronimo/axis/builder/ServiceReferenceTest.java
    geronimo/server/trunk/modules/geronimo-j2ee-builder/src/main/java/org/apache/geronimo/j2ee/deployment/EJBModule.java
    geronimo/server/trunk/modules/geronimo-j2ee-builder/src/main/java/org/apache/geronimo/j2ee/deployment/UnavailableWebServiceBuilder.java
    geronimo/server/trunk/modules/geronimo-j2ee-builder/src/main/java/org/apache/geronimo/j2ee/deployment/WebServiceBuilder.java
    geronimo/server/trunk/modules/geronimo-j2ee-builder/src/test/java/org/apache/geronimo/j2ee/deployment/EARConfigBuilder13NakedTest.java
    geronimo/server/trunk/modules/geronimo-j2ee-builder/src/test/java/org/apache/geronimo/j2ee/deployment/EARConfigBuilder13Test.java
    geronimo/server/trunk/modules/geronimo-j2ee-builder/src/test/java/org/apache/geronimo/j2ee/deployment/EARConfigBuilder14AltDDTest.java
    geronimo/server/trunk/modules/geronimo-j2ee-builder/src/test/java/org/apache/geronimo/j2ee/deployment/EARConfigBuilder14AltDDUnpackedTest.java
    geronimo/server/trunk/modules/geronimo-j2ee-builder/src/test/java/org/apache/geronimo/j2ee/deployment/EARConfigBuilder14NakedTest.java
    geronimo/server/trunk/modules/geronimo-j2ee-builder/src/test/java/org/apache/geronimo/j2ee/deployment/EARConfigBuilder14NakedUnpackedTest.java
    geronimo/server/trunk/modules/geronimo-j2ee-builder/src/test/java/org/apache/geronimo/j2ee/deployment/EARConfigBuilder14Test.java
    geronimo/server/trunk/modules/geronimo-j2ee-builder/src/test/java/org/apache/geronimo/j2ee/deployment/EARConfigBuilder14UnpackedTest.java
    geronimo/server/trunk/modules/geronimo-j2ee-builder/src/test/java/org/apache/geronimo/j2ee/deployment/MockEJBConfigBuilder.java
    geronimo/server/trunk/modules/geronimo-jetty-builder/src/main/java/org/apache/geronimo/jetty/deployment/JettyModuleBuilder.java
    geronimo/server/trunk/modules/geronimo-jetty/src/main/java/org/apache/geronimo/jetty/JettyPOJOWebServiceHolder.java
    geronimo/server/trunk/modules/geronimo-kernel/src/main/java/org/apache/geronimo/gbean/runtime/GBeanAttribute.java
    geronimo/server/trunk/modules/geronimo-tomcat-builder/src/main/java/org/apache/geronimo/tomcat/deployment/TomcatModuleBuilder.java
    geronimo/server/trunk/modules/geronimo-tomcat-builder/src/test/java/org/apache/geronimo/tomcat/deployment/TomcatModuleBuilderTest.java
    geronimo/server/trunk/modules/geronimo-tomcat-builder/src/test/resources/deployables/war5/WEB-INF/web.xml
    geronimo/server/trunk/modules/geronimo-tomcat/src/main/java/org/apache/geronimo/tomcat/GeronimoStandardContext.java
    geronimo/server/trunk/modules/geronimo-tomcat/src/main/java/org/apache/geronimo/tomcat/TomcatWebAppContext.java

Modified: geronimo/server/trunk/configs/axis-deployer/src/plan/plan.xml
URL: http://svn.apache.org/viewvc/geronimo/server/trunk/configs/axis-deployer/src/plan/plan.xml?view=diff&rev=464274&r1=464273&r2=464274
==============================================================================
--- geronimo/server/trunk/configs/axis-deployer/src/plan/plan.xml (original)
+++ geronimo/server/trunk/configs/axis-deployer/src/plan/plan.xml Sun Oct 15 13:40:04 2006
@@ -17,7 +17,19 @@
 
 <module xmlns="http://geronimo.apache.org/xml/ns/deployment-${geronimoSchemaVersion}">
 
-    <gbean name="WebServiceBuilder" class="org.apache.geronimo.axis.builder.AxisBuilder"/>
+    <gbean name="WebServiceBuilder" class="org.apache.geronimo.axis.builder.AxisBuilder">
+        <xml-attribute name="defaultEnvironment">
+            <environment xmlns="http://geronimo.apache.org/xml/ns/deployment-1.2">
+                <dependencies>
+                    <dependency>
+                        <groupId>org.apache.geronimo.modules</groupId>
+                        <artifactId>geronimo-axis</artifactId>
+                        <type>jar</type>
+                    </dependency>
+                </dependencies>
+            </environment>
+        </xml-attribute>
+    </gbean>
 
     <gbean name="AxisServiceRefBuilder" class="org.apache.geronimo.axis.builder.AxisServiceRefBuilder">
         <attribute name="eeNamespaces">http://java.sun.com/xml/ns/j2ee</attribute>

Modified: geronimo/server/trunk/modules/geronimo-axis-builder/src/main/java/org/apache/geronimo/axis/builder/AxisBuilder.java
URL: http://svn.apache.org/viewvc/geronimo/server/trunk/modules/geronimo-axis-builder/src/main/java/org/apache/geronimo/axis/builder/AxisBuilder.java?view=diff&rev=464274&r1=464273&r2=464274
==============================================================================
--- geronimo/server/trunk/modules/geronimo-axis-builder/src/main/java/org/apache/geronimo/axis/builder/AxisBuilder.java (original)
+++ geronimo/server/trunk/modules/geronimo-axis-builder/src/main/java/org/apache/geronimo/axis/builder/AxisBuilder.java Sun Oct 15 13:40:04 2006
@@ -60,6 +60,7 @@
 import org.apache.geronimo.gbean.GBeanData;
 import org.apache.geronimo.gbean.GBeanInfo;
 import org.apache.geronimo.gbean.GBeanInfoBuilder;
+import org.apache.geronimo.gbean.AbstractName;
 import org.apache.geronimo.j2ee.deployment.Module;
 import org.apache.geronimo.j2ee.deployment.WebServiceBuilder;
 import org.apache.geronimo.j2ee.deployment.HandlerInfoInfo;
@@ -73,6 +74,11 @@
 import org.apache.geronimo.xbeans.j2ee.ServiceEndpointInterfaceMappingType;
 import org.apache.geronimo.xbeans.j2ee.ServiceEndpointMethodMappingType;
 import org.apache.geronimo.deployment.util.DeploymentUtil;
+import org.apache.geronimo.deployment.DeploymentContext;
+import org.apache.geronimo.deployment.service.EnvironmentBuilder;
+import org.apache.geronimo.webservices.SerializableWebServiceContainerFactoryGBean;
+import org.apache.geronimo.kernel.GBeanAlreadyExistsException;
+import org.apache.geronimo.kernel.repository.Environment;
 
 /**
  * @version $Rev$ $Date$
@@ -81,13 +87,26 @@
 
     private static final SOAPConstants SOAP_VERSION = SOAPConstants.SOAP11_CONSTANTS;
 
+    private final Environment defaultEnvironment;
 
-    public Map findWebServices(JarFile moduleFile, boolean isEJB, Map servletLocations) throws DeploymentException {
+    public AxisBuilder() {
+        defaultEnvironment = null;
+    }
+
+    public AxisBuilder(Environment defaultEnvironment) {
+        this.defaultEnvironment = defaultEnvironment;
+    }
+
+
+    public Map findWebServices(JarFile moduleFile, boolean isEJB, Map servletLocations, Environment environment) throws DeploymentException {
         final String path = isEJB ? "META-INF/webservices.xml" : "WEB-INF/webservices.xml";
         try {
             URL wsDDUrl = DeploymentUtil.createJarURL(moduleFile, path);
             Map result = WSDescriptorParser.parseWebServiceDescriptor(wsDDUrl, moduleFile, isEJB, servletLocations);
             if (result != null) {
+                if (defaultEnvironment != null) {
+                    EnvironmentBuilder.mergeEnvironments(environment, defaultEnvironment);
+                }
                 return result;
             }
         } catch (MalformedURLException e) {
@@ -96,17 +115,12 @@
         return Collections.EMPTY_MAP;
     }
 
-    public void configurePOJO(GBeanData targetGBean, JarFile moduleFile, Object portInfoObject, String seiClassName, ClassLoader classLoader) throws DeploymentException {
+    public void configurePOJO(GBeanData targetGBean, Module module, Object portInfoObject, String seiClassName, DeploymentContext context) throws DeploymentException {
+        ClassLoader cl = context.getClassLoader();
         PortInfo portInfo = (PortInfo) portInfoObject;
-        ServiceInfo serviceInfo = AxisServiceBuilder.createServiceInfo(portInfo, classLoader);
+        ServiceInfo serviceInfo = AxisServiceBuilder.createServiceInfo(portInfo, cl);
         JavaServiceDesc serviceDesc = serviceInfo.getServiceDesc();
 
-        try {
-            classLoader.loadClass(seiClassName);
-        } catch (ClassNotFoundException e) {
-            throw new DeploymentException("Unable to load servlet class for pojo webservice: " + seiClassName, e);
-        }
-
         targetGBean.setAttribute("pojoClassName", seiClassName);
         RPCProvider provider = new POJOProvider();
 
@@ -131,8 +145,16 @@
 
         }
 
-        AxisWebServiceContainer axisWebServiceContainer = new AxisWebServiceContainer(location, wsdlURI, service, serviceInfo.getWsdlMap(), classLoader);
-        targetGBean.setAttribute("webServiceContainer", axisWebServiceContainer);
+        AxisWebServiceContainer axisWebServiceContainer = new AxisWebServiceContainer(location, wsdlURI, service, serviceInfo.getWsdlMap(), cl);
+        AbstractName webServiceContainerFactoryName = context.getNaming().createChildName(targetGBean.getAbstractName(), "webServiceContainer", NameFactory.GERONIMO_SERVICE);
+        GBeanData webServiceContainerFactoryGBean = new GBeanData(webServiceContainerFactoryName, SerializableWebServiceContainerFactoryGBean.GBEAN_INFO);
+        webServiceContainerFactoryGBean.setAttribute("webServiceContainer", axisWebServiceContainer);
+        try {
+            context.addGBean(webServiceContainerFactoryGBean);
+        } catch (GBeanAlreadyExistsException e) {
+            throw new DeploymentException("Could not add webServiceContainerFactoryGBean", e);
+        }
+        targetGBean.setReferencePattern("WebServiceContainerFactory", webServiceContainerFactoryName);
     }
 
     public void configureEJB(GBeanData targetGBean, JarFile moduleFile, Object portInfoObject, ClassLoader classLoader) throws DeploymentException {
@@ -176,41 +198,6 @@
         return new AxisServiceReference(serviceInterface.getName(), seiPortNameToFactoryMap, seiClassNameToFactoryMap);
     }
 
-/*
-    public Object createServiceInterfaceProxy(Class serviceInterface, Map seiPortNameToFactoryMap, Map seiClassNameToFactoryMap, DeploymentContext deploymentContext, Module module, ClassLoader classLoader) throws DeploymentException {
-
-        Callback callback = new ServiceMethodInterceptor(seiPortNameToFactoryMap);
-        Callback[] methodInterceptors = new Callback[]{SerializableNoOp.INSTANCE, callback};
-
-        Enhancer enhancer = new Enhancer();
-        enhancer.setClassLoader(classLoader);
-        enhancer.setSuperclass(ServiceImpl.class);
-        enhancer.setInterfaces(new Class[]{serviceInterface});
-        enhancer.setCallbackFilter(new NoOverrideCallbackFilter(Service.class));
-        enhancer.setCallbackTypes(new Class[]{NoOp.class, MethodInterceptor.class});
-        enhancer.setUseFactory(false);
-        ByteArrayRetrievingGeneratorStrategy strategy = new ByteArrayRetrievingGeneratorStrategy();
-        enhancer.setStrategy(strategy);
-        enhancer.setUseCache(false);
-        Class serviceClass = enhancer.createClass();
-
-        try {
-            module.addClass(serviceClass.getName(), strategy.getClassBytes(), deploymentContext);
-        } catch (IOException e) {
-            throw new DeploymentException("Could not write out class bytes", e);
-        } catch (URISyntaxException e) {
-            throw new DeploymentException("Could not constuct URI for location of enhanced class", e);
-        }
-        Enhancer.registerCallbacks(serviceClass, methodInterceptors);
-        FastConstructor constructor = FastClass.create(serviceClass).getConstructor(SERVICE_CONSTRUCTOR_TYPES);
-        try {
-            return constructor.newInstance(new Object[]{seiPortNameToFactoryMap, seiClassNameToFactoryMap});
-        } catch (InvocationTargetException e) {
-            throw new DeploymentException("Could not construct service instance", e.getTargetException());
-        }
-    }
-*/
-
     public void buildSEIFactoryMap(SchemaInfoBuilder schemaInfoBuilder, GerServiceRefType serviceRefType, JavaWsdlMappingType mapping, List handlerInfos, QName serviceQName, SOAPConstants soapVersion, Map seiPortNameToFactoryMap, Map seiClassNameToFactoryMap, ClassLoader classLoader) throws DeploymentException {
         Map exceptionMap = WSDescriptorParser.getExceptionMap(mapping);
 
@@ -477,58 +464,20 @@
         return handlerInfos;
     }
 
-/*
-    public Class enhanceServiceEndpointInterface(Class serviceEndpointInterface, DeploymentContext deploymentContext, Module module, ClassLoader classLoader) throws DeploymentException {
-        Enhancer enhancer = new Enhancer();
-        enhancer.setClassLoader(classLoader);
-        enhancer.setSuperclass(GenericServiceEndpointWrapper.class);
-        enhancer.setInterfaces(new Class[]{serviceEndpointInterface});
-        enhancer.setCallbackFilter(new NoOverrideCallbackFilter(GenericServiceEndpointWrapper.class));
-        enhancer.setCallbackTypes(new Class[]{NoOp.class, MethodInterceptor.class});
-        enhancer.setUseFactory(false);
-        ByteArrayRetrievingGeneratorStrategy strategy = new ByteArrayRetrievingGeneratorStrategy();
-        enhancer.setStrategy(strategy);
-        enhancer.setUseCache(false);
-        Class serviceEndpointClass = enhancer.createClass();
-
-        try {
-            module.addClass(serviceEndpointClass.getName(), strategy.getClassBytes(), deploymentContext);
-        } catch (IOException e) {
-            throw new DeploymentException("Could not write out class bytes", e);
-        } catch (URISyntaxException e) {
-            throw new DeploymentException("Could not constuct URI for location of enhanced class", e);
-        }
-        return serviceEndpointClass;
-    }
-*/
-
     public OperationInfo buildOperationInfoLightweight(Method method, BindingOperation bindingOperation, Style defaultStyle, SOAPConstants soapVersion) throws DeploymentException {
         LightweightOperationDescBuilder operationDescBuilder = new LightweightOperationDescBuilder(bindingOperation, method);
         return operationDescBuilder.buildOperationInfo(soapVersion);
     }
 
-/*
-    private static class ByteArrayRetrievingGeneratorStrategy extends DefaultGeneratorStrategy {
-
-        private byte[] classBytes;
-
-        public byte[] transform(byte[] b) {
-            classBytes = b;
-            return b;
-        }
-
-        public byte[] getClassBytes() {
-            return classBytes;
-        }
-    }
-*/
-
 
     public static final GBeanInfo GBEAN_INFO;
 
     static {
         GBeanInfoBuilder infoBuilder = GBeanInfoBuilder.createStatic(AxisBuilder.class, NameFactory.MODULE_BUILDER);
         infoBuilder.addInterface(WebServiceBuilder.class);
+        infoBuilder.addAttribute("defaultEnvironment", Environment.class, true, true);
+
+        infoBuilder.setConstructor(new String[] {"defaultEnvironment"});
 
         GBEAN_INFO = infoBuilder.getBeanInfo();
     }

Modified: geronimo/server/trunk/modules/geronimo-axis-builder/src/main/java/org/apache/geronimo/axis/builder/SchemaInfoBuilder.java
URL: http://svn.apache.org/viewvc/geronimo/server/trunk/modules/geronimo-axis-builder/src/main/java/org/apache/geronimo/axis/builder/SchemaInfoBuilder.java?view=diff&rev=464274&r1=464273&r2=464274
==============================================================================
--- geronimo/server/trunk/modules/geronimo-axis-builder/src/main/java/org/apache/geronimo/axis/builder/SchemaInfoBuilder.java (original)
+++ geronimo/server/trunk/modules/geronimo-axis-builder/src/main/java/org/apache/geronimo/axis/builder/SchemaInfoBuilder.java Sun Oct 15 13:40:04 2006
@@ -179,7 +179,7 @@
      * Find all the complex types in the previously constructed schema analysis.
      * Put them in a map from complex type QName to schema fragment.
      *
-     * @return
+     * @return map of complexType QName to schema fragment
      */
     public Map getComplexTypesInWsdl() {
         return complexTypeMap;
@@ -223,7 +223,7 @@
      * <p/>
      * WSDL 1.1 spec: 2.6 "The name attribute provides a unique name among all ports defined within in the enclosing WSDL document."
      *
-     * @return
+     * @return Map of port QName to javax.wsdl.Port for that QName.
      */
 
     public Map getPortMap() {
@@ -385,7 +385,7 @@
      * builds a map of SchemaTypeKey containing jaxrpc-style fake QName and context info to xmlbeans SchemaType object.
      *
      * @param schemaTypeSystem
-     * @return
+     * @return Map of SchemaTypeKey to xmlbeans SchemaType object.
      */
     private Map buildSchemaTypeKeyToSchemaTypeMap(SchemaTypeSystem schemaTypeSystem) {
         Map qnameMap = new HashMap();
@@ -412,7 +412,7 @@
             elementNamespace = key.getqName().getNamespaceURI();
         }
         String elementQNameLocalName;
-        SchemaTypeKey elementKey = null;
+        SchemaTypeKey elementKey;
         if (key == null) {
             //top level. rule 2.a,
             elementQNameLocalName = elementName.getLocalPart();
@@ -515,7 +515,7 @@
 
     public Definition readWsdl(JarFile moduleFile, URI wsdlURI) throws DeploymentException {
         Definition definition;
-        WSDLFactory wsdlFactory = null;
+        WSDLFactory wsdlFactory;
         try {
             wsdlFactory = WSDLFactory.newInstance();
         } catch (WSDLException e) {
@@ -617,7 +617,7 @@
                 systemId = systemId.substring(PROJECT_URL_PREFIX.length());
             }
             URI location = ((URI) uris.peek()).resolve(systemId);
-            InputStream wsdlInputStream = null;
+            InputStream wsdlInputStream;
             try {
                 ZipEntry entry = moduleFile.getEntry(location.toString());
                 wsdlInputStream = moduleFile.getInputStream(entry);
@@ -634,6 +634,7 @@
 
     class JarWSDLLocator implements WSDLLocator {
 
+        private final List streams = new ArrayList();
         private final URI wsdlURI;
         private URI latestImportURI;
 
@@ -642,7 +643,7 @@
         }
 
         public InputSource getBaseInputSource() {
-            InputStream wsdlInputStream = null;
+            InputStream wsdlInputStream;
             try {
                 ZipEntry entry = moduleFile.getEntry(wsdlURI.toString());
                 wsdlInputStream = moduleFile.getInputStream(entry);
@@ -650,6 +651,7 @@
                 wsdlMap.put(wsdlURI, definition);
                 wsdlInputStream.close();
                 wsdlInputStream = moduleFile.getInputStream(entry);
+                streams.add(wsdlInputStream);
             } catch (Exception e) {
                 throw new RuntimeException("Could not open stream to wsdl file", e);
             }
@@ -663,7 +665,7 @@
         public InputSource getImportInputSource(String parentLocation, String relativeLocation) {
             URI parentURI = URI.create(parentLocation);
             latestImportURI = parentURI.resolve(relativeLocation);
-            InputStream importInputStream = null;
+            InputStream importInputStream;
             try {
                 ZipEntry entry = moduleFile.getEntry(latestImportURI.toString());
                 importInputStream = moduleFile.getInputStream(entry);
@@ -676,6 +678,7 @@
                     //probably was a schema rather than wsdl.  If there are real problems they will show up later.
                 }
                 importInputStream = moduleFile.getInputStream(entry);
+                streams.add(importInputStream);
             } catch (Exception e) {
                 throw new RuntimeException("Could not open stream to import file", e);
             }
@@ -686,6 +689,18 @@
 
         public String getLatestImportURI() {
             return latestImportURI.toString();
+        }
+
+        public void close() {
+            for (Iterator iterator = streams.iterator(); iterator.hasNext();) {
+                InputStream inputStream = (InputStream) iterator.next();
+                try {
+                    inputStream.close();
+                } catch (IOException e) {
+                    //ignore
+                }
+            }
+            streams.clear();
         }
     }
 }

Modified: geronimo/server/trunk/modules/geronimo-axis-builder/src/test/java/org/apache/geronimo/axis/builder/ServiceReferenceTest.java
URL: http://svn.apache.org/viewvc/geronimo/server/trunk/modules/geronimo-axis-builder/src/test/java/org/apache/geronimo/axis/builder/ServiceReferenceTest.java?view=diff&rev=464274&r1=464273&r2=464274
==============================================================================
--- geronimo/server/trunk/modules/geronimo-axis-builder/src/test/java/org/apache/geronimo/axis/builder/ServiceReferenceTest.java (original)
+++ geronimo/server/trunk/modules/geronimo-axis-builder/src/test/java/org/apache/geronimo/axis/builder/ServiceReferenceTest.java Sun Oct 15 13:40:04 2006
@@ -118,7 +118,7 @@
 
         File moduleLocation = new File(tmpbasedir, "ejb");
         moduleLocation.mkdirs();
-        module = new EJBModule(true, moduleName, environment, new UnpackedJarFile(moduleLocation), "ejb", null, null, null);
+        module = new EJBModule(true, moduleName, environment, new UnpackedJarFile(moduleLocation), "ejb", null, null, null, null);
 
         runExternalWSTest = System.getProperty("geronimo.run.external.webservicetest", "false").equals("true");
     }
@@ -165,7 +165,7 @@
 */
 
     public void testBuildOperationInfo() throws Exception {
-        AxisBuilder builder = new AxisBuilder();
+        AxisBuilder builder = new AxisBuilder(null);
         OperationInfo operationInfo = buildOperationInfoForMockOperation(builder);
         assertNotNull(operationInfo);
     }
@@ -175,7 +175,7 @@
         SchemaInfoBuilder schemaInfoBuilder = new SchemaInfoBuilder(null, definition);
         JavaWsdlMappingType mapping = buildLightweightMappingType();
         QName serviceQName = new QName(NAMESPACE, "MockService");
-        AxisBuilder builder = new AxisBuilder();
+        AxisBuilder builder = new AxisBuilder(null);
         Object reference = builder.createService(MockService.class, schemaInfoBuilder, mapping, serviceQName, SOAPConstants.SOAP11_CONSTANTS, handlerInfos, gerServiceRefType, module, isolatedCl);
         assertNotNull(reference);
         assertTrue(reference instanceof AxisServiceReference);
@@ -197,7 +197,7 @@
         JavaWsdlMappingDocument mappingDocument = JavaWsdlMappingDocument.Factory.parse(jaxrpcMapping);
         JavaWsdlMappingType mapping = mappingDocument.getJavaWsdlMapping();
         QName serviceQName = new QName("http://www.Monson-Haefel.com/jwsbook/BookQuote", "BookQuoteService");
-        AxisBuilder builder = new AxisBuilder();
+        AxisBuilder builder = new AxisBuilder(null);
         Object reference = builder.createService(BookQuoteService.class, schemaInfoBuilder, mapping, serviceQName, SOAPConstants.SOAP11_CONSTANTS, handlerInfos, gerServiceRefType, module, isolatedCl);
         assertNotNull(reference);
         assertTrue(reference instanceof AxisServiceReference);
@@ -219,7 +219,7 @@
         JavaWsdlMappingDocument mappingDocument = JavaWsdlMappingDocument.Factory.parse(jaxrpcMapping);
         JavaWsdlMappingType mapping = mappingDocument.getJavaWsdlMapping();
         QName serviceQName = new QName("http://tempuri.org/4s4c/1/3/wsdl/def/interopLab", "interopLab");
-        AxisBuilder builder = new AxisBuilder();
+        AxisBuilder builder = new AxisBuilder(null);
         Object proxy = builder.createService(InteropLab.class, schemaInfoBuilder, mapping, serviceQName, SOAPConstants.SOAP11_CONSTANTS, handlerInfos, gerServiceRefType, module, isolatedCl);
         assertNotNull(proxy);
         assertTrue(proxy instanceof InteropLab);

Modified: geronimo/server/trunk/modules/geronimo-j2ee-builder/src/main/java/org/apache/geronimo/j2ee/deployment/EJBModule.java
URL: http://svn.apache.org/viewvc/geronimo/server/trunk/modules/geronimo-j2ee-builder/src/main/java/org/apache/geronimo/j2ee/deployment/EJBModule.java?view=diff&rev=464274&r1=464273&r2=464274
==============================================================================
--- geronimo/server/trunk/modules/geronimo-j2ee-builder/src/main/java/org/apache/geronimo/j2ee/deployment/EJBModule.java (original)
+++ geronimo/server/trunk/modules/geronimo-j2ee-builder/src/main/java/org/apache/geronimo/j2ee/deployment/EJBModule.java Sun Oct 15 13:40:04 2006
@@ -20,6 +20,7 @@
 import java.net.URI;
 import java.net.URISyntaxException;
 import java.util.jar.JarFile;
+import java.util.Map;
 
 import org.apache.geronimo.deployment.DeploymentContext;
 import org.apache.geronimo.gbean.AbstractName;
@@ -32,9 +33,11 @@
  */
 public class EJBModule extends Module {
     private AbstractName moduleCmpEngineName;
+    private final Map portMap;
 
-    public EJBModule(boolean standAlone, AbstractName moduleName, Environment environment, JarFile moduleFile, String targetPath, XmlObject specDD, XmlObject vendorDD, String originalSpecDD) {
+    public EJBModule(boolean standAlone, AbstractName moduleName, Environment environment, JarFile moduleFile, String targetPath, XmlObject specDD, XmlObject vendorDD, String originalSpecDD, Map portMap) {
         super(standAlone, moduleName, environment, moduleFile, targetPath, specDD, vendorDD, originalSpecDD, null);
+        this.portMap = portMap;
     }
 
     public ConfigurationModuleType getType() {
@@ -51,6 +54,10 @@
 
     public void setModuleCmpEngineName(AbstractName moduleCmpEngineName) {
         this.moduleCmpEngineName = moduleCmpEngineName;
+    }
+
+    public Map getPortMap() {
+        return portMap;
     }
 }
 

Modified: geronimo/server/trunk/modules/geronimo-j2ee-builder/src/main/java/org/apache/geronimo/j2ee/deployment/UnavailableWebServiceBuilder.java
URL: http://svn.apache.org/viewvc/geronimo/server/trunk/modules/geronimo-j2ee-builder/src/main/java/org/apache/geronimo/j2ee/deployment/UnavailableWebServiceBuilder.java?view=diff&rev=464274&r1=464273&r2=464274
==============================================================================
--- geronimo/server/trunk/modules/geronimo-j2ee-builder/src/main/java/org/apache/geronimo/j2ee/deployment/UnavailableWebServiceBuilder.java (original)
+++ geronimo/server/trunk/modules/geronimo-j2ee-builder/src/main/java/org/apache/geronimo/j2ee/deployment/UnavailableWebServiceBuilder.java Sun Oct 15 13:40:04 2006
@@ -25,17 +25,19 @@
 import org.apache.geronimo.gbean.GBeanInfo;
 import org.apache.geronimo.gbean.GBeanInfoBuilder;
 import org.apache.geronimo.j2ee.j2eeobjectnames.NameFactory;
+import org.apache.geronimo.deployment.DeploymentContext;
+import org.apache.geronimo.kernel.repository.Environment;
 
 /**
  * @version $Rev$ $Date$
  */
 public class UnavailableWebServiceBuilder implements WebServiceBuilder {
 
-    public Map findWebServices(JarFile moduleFile, boolean isEJB, Map correctedPortLocations) throws DeploymentException {
+    public Map findWebServices(JarFile moduleFile, boolean isEJB, Map correctedPortLocations, Environment environment) throws DeploymentException {
         return  Collections.EMPTY_MAP;
     }
 
-    public void configurePOJO(GBeanData targetGBean, JarFile moduleFile, Object portInfo, String seiClassName, ClassLoader classLoader) throws DeploymentException {
+    public void configurePOJO(GBeanData targetGBean, Module module, Object portInfo, String seiClassName, DeploymentContext context) throws DeploymentException {
         throw new DeploymentException("Web services are not available in this configuration");
     }
 

Modified: geronimo/server/trunk/modules/geronimo-j2ee-builder/src/main/java/org/apache/geronimo/j2ee/deployment/WebServiceBuilder.java
URL: http://svn.apache.org/viewvc/geronimo/server/trunk/modules/geronimo-j2ee-builder/src/main/java/org/apache/geronimo/j2ee/deployment/WebServiceBuilder.java?view=diff&rev=464274&r1=464273&r2=464274
==============================================================================
--- geronimo/server/trunk/modules/geronimo-j2ee-builder/src/main/java/org/apache/geronimo/j2ee/deployment/WebServiceBuilder.java (original)
+++ geronimo/server/trunk/modules/geronimo-j2ee-builder/src/main/java/org/apache/geronimo/j2ee/deployment/WebServiceBuilder.java Sun Oct 15 13:40:04 2006
@@ -18,9 +18,12 @@
 
 import org.apache.geronimo.common.DeploymentException;
 import org.apache.geronimo.gbean.GBeanData;
+import org.apache.geronimo.deployment.DeploymentContext;
+import org.apache.geronimo.kernel.repository.Environment;
+import org.apache.xmlbeans.XmlObject;
+
 import java.util.jar.JarFile;
 import java.util.Map;
-import java.net.URL;
 
 /**
  * @version $Rev$ $Date$
@@ -33,25 +36,27 @@
     * @param moduleFile J2EE module
     * @param isEJB is this an EJB archive?
     * @param correctedPortLocations mapping between port locations and paths.
+    * @param environment
     * @return Mapping of servlet names to port information, or an
     * empty map if no web services found.  Port information is opaque
     * to all except the WebServiceBuilder itself.
     * @throws DeploymentException if error encountered while introspecting the module.
     */
-   Map findWebServices(JarFile moduleFile, boolean isEJB, Map correctedPortLocations) throws DeploymentException;
-    
+   Map findWebServices(JarFile moduleFile, boolean isEJB, Map correctedPortLocations, Environment environment) throws DeploymentException;
+
     //obviously these need the deployment descriptors, but I'm not sure in what form yet.
     /**
      * configure the supplied GBeanData to implement the POJO web service described in the deployment descriptor.
      * The GBeanData will be for a ServletHolder like gbean that is adapted to holding a ws stack that talks to a
      * POJO web service.  The web deployer is responsible for filling in the standard servlet info such as init params.
      * @param targetGBean
-     * @param moduleFile
+     * @param module
      * @param portInfo
      * @param seiClassName
+     * @param context
      * @throws DeploymentException
      */
-    void configurePOJO(GBeanData targetGBean, JarFile moduleFile, Object portInfo, String seiClassName, ClassLoader classLoader) throws DeploymentException;
+    void configurePOJO(GBeanData targetGBean, Module module, Object portInfo, String seiClassName, DeploymentContext context) throws DeploymentException;
 
     /**
      * configure the supplied EJBContainer gbeandata to implement the ejb web service described in the deployment descriptor

Modified: geronimo/server/trunk/modules/geronimo-j2ee-builder/src/test/java/org/apache/geronimo/j2ee/deployment/EARConfigBuilder13NakedTest.java
URL: http://svn.apache.org/viewvc/geronimo/server/trunk/modules/geronimo-j2ee-builder/src/test/java/org/apache/geronimo/j2ee/deployment/EARConfigBuilder13NakedTest.java?view=diff&rev=464274&r1=464273&r2=464274
==============================================================================
--- geronimo/server/trunk/modules/geronimo-j2ee-builder/src/test/java/org/apache/geronimo/j2ee/deployment/EARConfigBuilder13NakedTest.java (original)
+++ geronimo/server/trunk/modules/geronimo-j2ee-builder/src/test/java/org/apache/geronimo/j2ee/deployment/EARConfigBuilder13NakedTest.java Sun Oct 15 13:40:04 2006
@@ -33,7 +33,7 @@
         super.setUp();
         
         earFile = DeploymentUtil.createJarFile(resolveFile("target/test-ear-j2ee_1.3-naked.ear"));
-        ejbConfigBuilder.ejbModule = new EJBModule(false, ejbModuleName, null, null, "test-ejb-jar.jar", null, null, null);
+        ejbConfigBuilder.ejbModule = new EJBModule(false, ejbModuleName, null, null, "test-ejb-jar.jar", null, null, null, portMap);
         webConfigBuilder.contextRoot = contextRoot;
         webConfigBuilder.webModule = new WebModule(false, webModuleName, null, null, "test-war.war", null, null, null, contextRoot, portMap, WEB_NAMESPACE);
         connectorConfigBuilder.connectorModule = new ConnectorModule(false, raModuleName, null, null, "test-rar.rar", null, null, null);

Modified: geronimo/server/trunk/modules/geronimo-j2ee-builder/src/test/java/org/apache/geronimo/j2ee/deployment/EARConfigBuilder13Test.java
URL: http://svn.apache.org/viewvc/geronimo/server/trunk/modules/geronimo-j2ee-builder/src/test/java/org/apache/geronimo/j2ee/deployment/EARConfigBuilder13Test.java?view=diff&rev=464274&r1=464273&r2=464274
==============================================================================
--- geronimo/server/trunk/modules/geronimo-j2ee-builder/src/test/java/org/apache/geronimo/j2ee/deployment/EARConfigBuilder13Test.java (original)
+++ geronimo/server/trunk/modules/geronimo-j2ee-builder/src/test/java/org/apache/geronimo/j2ee/deployment/EARConfigBuilder13Test.java Sun Oct 15 13:40:04 2006
@@ -33,7 +33,7 @@
         super.setUp();
         
         earFile = DeploymentUtil.createJarFile(resolveFile("target/test-ear-j2ee_1.3.ear"));
-        ejbConfigBuilder.ejbModule = new EJBModule(false, ejbModuleName, null, null, "test-ejb-jar.jar", null, null, null);
+        ejbConfigBuilder.ejbModule = new EJBModule(false, ejbModuleName, null, null, "test-ejb-jar.jar", null, null, null, portMap);
         webConfigBuilder.contextRoot = contextRoot;
         webConfigBuilder.webModule = new WebModule(false, webModuleName, null, null, "test-war.war", null, null, null, contextRoot, portMap, WEB_NAMESPACE);
         connectorConfigBuilder.connectorModule = new ConnectorModule(false, raModuleName, null, null, "test-rar.rar", null, null, null);

Modified: geronimo/server/trunk/modules/geronimo-j2ee-builder/src/test/java/org/apache/geronimo/j2ee/deployment/EARConfigBuilder14AltDDTest.java
URL: http://svn.apache.org/viewvc/geronimo/server/trunk/modules/geronimo-j2ee-builder/src/test/java/org/apache/geronimo/j2ee/deployment/EARConfigBuilder14AltDDTest.java?view=diff&rev=464274&r1=464273&r2=464274
==============================================================================
--- geronimo/server/trunk/modules/geronimo-j2ee-builder/src/test/java/org/apache/geronimo/j2ee/deployment/EARConfigBuilder14AltDDTest.java (original)
+++ geronimo/server/trunk/modules/geronimo-j2ee-builder/src/test/java/org/apache/geronimo/j2ee/deployment/EARConfigBuilder14AltDDTest.java Sun Oct 15 13:40:04 2006
@@ -31,7 +31,7 @@
 {
     protected void setUp() throws Exception {
         earFile = DeploymentUtil.createJarFile(resolveFile("target/test-ear-j2ee_1.4.ear"));
-        ejbConfigBuilder.ejbModule = new EJBModule(false, ejbModuleName, null, null, "ejb.jar/", null, null, null);
+        ejbConfigBuilder.ejbModule = new EJBModule(false, ejbModuleName, null, null, "ejb.jar/", null, null, null, portMap);
         webConfigBuilder.contextRoot = contextRoot;
         webConfigBuilder.webModule = new WebModule(false, webModuleName, null, null, "war.war/", null, null, null, contextRoot, portMap, WEB_NAMESPACE);
         connectorConfigBuilder.connectorModule = new ConnectorModule(false, raModuleName, null, null, "rar.rar", null, null, null);

Modified: geronimo/server/trunk/modules/geronimo-j2ee-builder/src/test/java/org/apache/geronimo/j2ee/deployment/EARConfigBuilder14AltDDUnpackedTest.java
URL: http://svn.apache.org/viewvc/geronimo/server/trunk/modules/geronimo-j2ee-builder/src/test/java/org/apache/geronimo/j2ee/deployment/EARConfigBuilder14AltDDUnpackedTest.java?view=diff&rev=464274&r1=464273&r2=464274
==============================================================================
--- geronimo/server/trunk/modules/geronimo-j2ee-builder/src/test/java/org/apache/geronimo/j2ee/deployment/EARConfigBuilder14AltDDUnpackedTest.java (original)
+++ geronimo/server/trunk/modules/geronimo-j2ee-builder/src/test/java/org/apache/geronimo/j2ee/deployment/EARConfigBuilder14AltDDUnpackedTest.java Sun Oct 15 13:40:04 2006
@@ -31,7 +31,7 @@
 {
     protected void setUp() throws Exception {
         earFile = DeploymentUtil.createJarFile(resolveFile("target/test-ear-j2ee_1.4-unpacked.ear"));
-        ejbConfigBuilder.ejbModule = new EJBModule(false, ejbModuleName, null, null, "ejb.jar/", null, null, null);
+        ejbConfigBuilder.ejbModule = new EJBModule(false, ejbModuleName, null, null, "ejb.jar/", null, null, null, portMap);
         webConfigBuilder.contextRoot = contextRoot;
         webConfigBuilder.webModule = new WebModule(false, webModuleName, null, null, "war.war/", null, null, null, contextRoot, portMap, WEB_NAMESPACE);
         connectorConfigBuilder.connectorModule = new ConnectorModule(false, raModuleName, null, null, "rar.rar/", null, null, null);

Modified: geronimo/server/trunk/modules/geronimo-j2ee-builder/src/test/java/org/apache/geronimo/j2ee/deployment/EARConfigBuilder14NakedTest.java
URL: http://svn.apache.org/viewvc/geronimo/server/trunk/modules/geronimo-j2ee-builder/src/test/java/org/apache/geronimo/j2ee/deployment/EARConfigBuilder14NakedTest.java?view=diff&rev=464274&r1=464273&r2=464274
==============================================================================
--- geronimo/server/trunk/modules/geronimo-j2ee-builder/src/test/java/org/apache/geronimo/j2ee/deployment/EARConfigBuilder14NakedTest.java (original)
+++ geronimo/server/trunk/modules/geronimo-j2ee-builder/src/test/java/org/apache/geronimo/j2ee/deployment/EARConfigBuilder14NakedTest.java Sun Oct 15 13:40:04 2006
@@ -33,7 +33,7 @@
         super.setUp();
         
         earFile = DeploymentUtil.createJarFile(resolveFile("target/test-ear-j2ee_1.4-naked.ear"));
-        ejbConfigBuilder.ejbModule = new EJBModule(false, ejbModuleName, null, null, "test-ejb-jar.jar", null, null, null);
+        ejbConfigBuilder.ejbModule = new EJBModule(false, ejbModuleName, null, null, "test-ejb-jar.jar", null, null, null, portMap);
         webConfigBuilder.contextRoot = contextRoot;
         webConfigBuilder.webModule = new WebModule(false, webModuleName, null, null, "test-war.war", null, null, null, contextRoot, portMap, WEB_NAMESPACE);
         connectorConfigBuilder.connectorModule = new ConnectorModule(false, raModuleName, null, null, "test-rar.rar", null, null, null);

Modified: geronimo/server/trunk/modules/geronimo-j2ee-builder/src/test/java/org/apache/geronimo/j2ee/deployment/EARConfigBuilder14NakedUnpackedTest.java
URL: http://svn.apache.org/viewvc/geronimo/server/trunk/modules/geronimo-j2ee-builder/src/test/java/org/apache/geronimo/j2ee/deployment/EARConfigBuilder14NakedUnpackedTest.java?view=diff&rev=464274&r1=464273&r2=464274
==============================================================================
--- geronimo/server/trunk/modules/geronimo-j2ee-builder/src/test/java/org/apache/geronimo/j2ee/deployment/EARConfigBuilder14NakedUnpackedTest.java (original)
+++ geronimo/server/trunk/modules/geronimo-j2ee-builder/src/test/java/org/apache/geronimo/j2ee/deployment/EARConfigBuilder14NakedUnpackedTest.java Sun Oct 15 13:40:04 2006
@@ -33,7 +33,7 @@
         super.setUp();
         
         earFile = DeploymentUtil.createJarFile(resolveFile("target/test-ear-j2ee_1.4-naked-unpacked.ear"));
-        ejbConfigBuilder.ejbModule = new EJBModule(false, ejbModuleName, null, null, "ejb.jar/", null, null, null);
+        ejbConfigBuilder.ejbModule = new EJBModule(false, ejbModuleName, null, null, "ejb.jar/", null, null, null, portMap);
         webConfigBuilder.contextRoot = contextRoot;
         webConfigBuilder.webModule = new WebModule(false, webModuleName, null, null, "war.war/", null, null, null, contextRoot, portMap, WEB_NAMESPACE);
         connectorConfigBuilder.connectorModule = new ConnectorModule(false, raModuleName, null, null, "rar.rar/", null, null, null);

Modified: geronimo/server/trunk/modules/geronimo-j2ee-builder/src/test/java/org/apache/geronimo/j2ee/deployment/EARConfigBuilder14Test.java
URL: http://svn.apache.org/viewvc/geronimo/server/trunk/modules/geronimo-j2ee-builder/src/test/java/org/apache/geronimo/j2ee/deployment/EARConfigBuilder14Test.java?view=diff&rev=464274&r1=464273&r2=464274
==============================================================================
--- geronimo/server/trunk/modules/geronimo-j2ee-builder/src/test/java/org/apache/geronimo/j2ee/deployment/EARConfigBuilder14Test.java (original)
+++ geronimo/server/trunk/modules/geronimo-j2ee-builder/src/test/java/org/apache/geronimo/j2ee/deployment/EARConfigBuilder14Test.java Sun Oct 15 13:40:04 2006
@@ -33,7 +33,7 @@
         super.setUp();
         
         earFile = DeploymentUtil.createJarFile(resolveFile("target/test-ear-j2ee_1.4.ear"));
-        ejbConfigBuilder.ejbModule = new EJBModule(false, ejbModuleName, null, null, "ejb.jar", null, null, null);
+        ejbConfigBuilder.ejbModule = new EJBModule(false, ejbModuleName, null, null, "ejb.jar", null, null, null, portMap);
         webConfigBuilder.contextRoot = contextRoot;
         webConfigBuilder.webModule = new WebModule(false, webModuleName, null, null, "war.war", null, null, null, contextRoot, portMap, WEB_NAMESPACE);
         connectorConfigBuilder.connectorModule = new ConnectorModule(false, raModuleName, null, null, "rar.rar", null, null, null);

Modified: geronimo/server/trunk/modules/geronimo-j2ee-builder/src/test/java/org/apache/geronimo/j2ee/deployment/EARConfigBuilder14UnpackedTest.java
URL: http://svn.apache.org/viewvc/geronimo/server/trunk/modules/geronimo-j2ee-builder/src/test/java/org/apache/geronimo/j2ee/deployment/EARConfigBuilder14UnpackedTest.java?view=diff&rev=464274&r1=464273&r2=464274
==============================================================================
--- geronimo/server/trunk/modules/geronimo-j2ee-builder/src/test/java/org/apache/geronimo/j2ee/deployment/EARConfigBuilder14UnpackedTest.java (original)
+++ geronimo/server/trunk/modules/geronimo-j2ee-builder/src/test/java/org/apache/geronimo/j2ee/deployment/EARConfigBuilder14UnpackedTest.java Sun Oct 15 13:40:04 2006
@@ -33,7 +33,7 @@
         super.setUp();
         
         earFile = DeploymentUtil.createJarFile(resolveFile("target/test-ear-j2ee_1.4-unpacked.ear"));
-        ejbConfigBuilder.ejbModule = new EJBModule(false, ejbModuleName, null, null, "ejb.jar/", null, null, null);
+        ejbConfigBuilder.ejbModule = new EJBModule(false, ejbModuleName, null, null, "ejb.jar/", null, null, null, portMap);
         webConfigBuilder.contextRoot = contextRoot;
         webConfigBuilder.webModule = new WebModule(false, webModuleName, null, null, "war.war/", null, null, null, contextRoot, portMap, WEB_NAMESPACE);
         connectorConfigBuilder.connectorModule = new ConnectorModule(false, raModuleName, null, null, "rar.rar/", null, null, null);

Modified: geronimo/server/trunk/modules/geronimo-j2ee-builder/src/test/java/org/apache/geronimo/j2ee/deployment/MockEJBConfigBuilder.java
URL: http://svn.apache.org/viewvc/geronimo/server/trunk/modules/geronimo-j2ee-builder/src/test/java/org/apache/geronimo/j2ee/deployment/MockEJBConfigBuilder.java?view=diff&rev=464274&r1=464273&r2=464274
==============================================================================
--- geronimo/server/trunk/modules/geronimo-j2ee-builder/src/test/java/org/apache/geronimo/j2ee/deployment/MockEJBConfigBuilder.java (original)
+++ geronimo/server/trunk/modules/geronimo-j2ee-builder/src/test/java/org/apache/geronimo/j2ee/deployment/MockEJBConfigBuilder.java Sun Oct 15 13:40:04 2006
@@ -22,18 +22,14 @@
 import junit.framework.Assert;
 import org.apache.geronimo.common.DeploymentException;
 import org.apache.geronimo.gbean.AbstractName;
-import org.apache.geronimo.gbean.AbstractNameQuery;
 import org.apache.geronimo.j2ee.j2eeobjectnames.NameFactory;
-import org.apache.geronimo.kernel.config.Configuration;
 import org.apache.geronimo.kernel.config.ConfigurationStore;
 import org.apache.geronimo.kernel.repository.Artifact;
 import org.apache.geronimo.kernel.repository.Environment;
 import org.apache.geronimo.kernel.Naming;
 import org.apache.geronimo.deployment.ModuleIDBuilder;
 
-import javax.naming.Reference;
 import java.io.File;
-import java.net.URI;
 import java.net.URL;
 import java.util.jar.JarFile;
 import java.util.Collection;
@@ -50,12 +46,12 @@
     public Module createModule(File plan, JarFile moduleFile, Naming naming, ModuleIDBuilder idBuilder) throws DeploymentException {
         AbstractName earName = naming.createRootName(new Artifact("test", "test-ejb-jar", "", "jar"), NameFactory.NULL, NameFactory.J2EE_APPLICATION) ;
         AbstractName moduleName = naming.createChildName(earName, "ejb-jar", NameFactory.EJB_MODULE);
-        return new EJBModule(true, moduleName, null, moduleFile, "ejb.jar", null, null, null);
+        return new EJBModule(true, moduleName, null, moduleFile, "ejb.jar", null, null, null, null);
     }
 
     public Module createModule(Object plan, JarFile moduleFile, String targetPath, URL specDDUrl, Environment environment, Object moduleContextInfo, AbstractName earName, Naming naming, ModuleIDBuilder idBuilder) throws DeploymentException {
         AbstractName moduleName = naming.createChildName(earName, "ejb-jar", NameFactory.EJB_MODULE);
-        return new EJBModule(false, moduleName, null, moduleFile, targetPath, null, null, null);
+        return new EJBModule(false, moduleName, null, moduleFile, targetPath, null, null, null, null);
     }
 
     public void installModule(JarFile earFile, EARContext earContext, Module ejbModule, Collection configurationStores, ConfigurationStore targetConfigurationStore, Collection repository) {

Modified: geronimo/server/trunk/modules/geronimo-jetty-builder/src/main/java/org/apache/geronimo/jetty/deployment/JettyModuleBuilder.java
URL: http://svn.apache.org/viewvc/geronimo/server/trunk/modules/geronimo-jetty-builder/src/main/java/org/apache/geronimo/jetty/deployment/JettyModuleBuilder.java?view=diff&rev=464274&r1=464273&r2=464274
==============================================================================
--- geronimo/server/trunk/modules/geronimo-jetty-builder/src/main/java/org/apache/geronimo/jetty/deployment/JettyModuleBuilder.java (original)
+++ geronimo/server/trunk/modules/geronimo-jetty-builder/src/main/java/org/apache/geronimo/jetty/deployment/JettyModuleBuilder.java Sun Oct 15 13:40:04 2006
@@ -244,7 +244,8 @@
 
         Map servletNameToPathMap = buildServletNameToPathMap(webApp, contextRoot);
 
-        Map portMap = getWebServiceBuilder().findWebServices(moduleFile, false, servletNameToPathMap);        AbstractName moduleName;
+        Map portMap = getWebServiceBuilder().findWebServices(moduleFile, false, servletNameToPathMap, environment);
+        AbstractName moduleName;
         if (earName == null) {
             earName = naming.createRootName(environment.getConfigId(), NameFactory.NULL, NameFactory.J2EE_APPLICATION);
             moduleName = naming.createChildName(earName, environment.getConfigId().toString(), NameFactory.WEB_MODULE);
@@ -323,7 +324,6 @@
 
     public void addGBeans(EARContext earContext, Module module, ClassLoader cl, Collection repository) throws DeploymentException {
         EARContext moduleContext = module.getEarContext();
-        ClassLoader moduleClassLoader = moduleContext.getClassLoader();
         AbstractName moduleName = moduleContext.getModuleName();
         WebModule webModule = (WebModule) module;
 
@@ -479,7 +479,7 @@
             Map portMap = webModule.getPortMap();
 
             ServletType[] servletTypes = webApp.getServletArray();
-            addServlets(moduleName, webModule.getModuleFile(), servletTypes, servletMappings, securityRoles, rolePermissions, portMap, moduleClassLoader, moduleContext);
+            addServlets(moduleName, webModule, servletTypes, servletMappings, securityRoles, rolePermissions, portMap, moduleContext);
 
             if (jettyWebApp.isSetSecurityRealmName()) {
                 configureSecurityRealm(earContext, webApp, jettyWebApp, webModuleData, securityRoles, rolePermissions);
@@ -843,24 +843,23 @@
      * Adds the provided servlets, taking into account the load-on-startup ordering.
      *
      * @param webModuleName   an <code>ObjectName</code> value
-     * @param moduleFile      a <code>JarFile</code> value
+     * @param module          a <code>WebModule</code> value
      * @param servletTypes    a <code>ServletType[]</code> value, contains the <code>servlet</code> entries from <code>web.xml</code>.
      * @param servletMappings a <code>Map</code> value
      * @param securityRoles   a <code>Set</code> value
      * @param rolePermissions a <code>Map</code> value
      * @param portMap         a <code>Map</code> value
-     * @param webClassLoader  a <code>ClassLoader</code> value
-     * @param earContext      an <code>EARContext</code> value
+     * @param moduleContext
      * @throws DeploymentException if an error occurs
      */
     private void addServlets(AbstractName webModuleName,
-            JarFile moduleFile,
+            WebModule module,
             ServletType[] servletTypes,
             Map servletMappings,
             Set securityRoles,
-            Map rolePermissions, Map portMap,
-            ClassLoader webClassLoader,
-            EARContext earContext) throws DeploymentException {
+            Map rolePermissions,
+            Map portMap,
+            EARContext moduleContext) throws DeploymentException {
 
         // this TreeSet will order the ServletTypes based on whether
         // they have a load-on-startup element and what its value is
@@ -883,7 +882,7 @@
         AbstractName previousServlet = null;
         for (Iterator servlets = loadOrder.iterator(); servlets.hasNext();) {
             ServletType servletType = (ServletType) servlets.next();
-            previousServlet = addServlet(webModuleName, moduleFile, previousServlet, servletType, servletMappings, securityRoles, rolePermissions, portMap, webClassLoader, earContext);
+            previousServlet = addServlet(webModuleName, module, previousServlet, servletType, servletMappings, securityRoles, rolePermissions, portMap, moduleContext);
         }
 
         // JACC v1.0 secion B.19
@@ -892,31 +891,37 @@
 
     /**
      * @param webModuleName
-     * @param moduleFile
+     * @param module
      * @param previousServlet
      * @param servletType
      * @param servletMappings
      * @param securityRoles
      * @param rolePermissions
      * @param portMap
-     * @param webClassLoader
-     * @param earContext
+     * @param moduleContext
      * @return AbstractName of servlet gbean added
      * @throws DeploymentException
      */
     private AbstractName addServlet(AbstractName webModuleName,
-            JarFile moduleFile,
+            WebModule module,
             AbstractName previousServlet,
             ServletType servletType,
             Map servletMappings,
             Set securityRoles,
-            Map rolePermissions, Map portMap,
-            ClassLoader webClassLoader,
-            EARContext earContext) throws DeploymentException {
+            Map rolePermissions,
+            Map portMap,
+            EARContext moduleContext) throws DeploymentException {
+        ClassLoader webClassLoader = moduleContext.getClassLoader();
         String servletName = servletType.getServletName().getStringValue().trim();
-        AbstractName servletAbstractName = earContext.getNaming().createChildName(webModuleName, servletName, NameFactory.SERVLET);
+        AbstractName servletAbstractName = moduleContext.getNaming().createChildName(webModuleName, servletName, NameFactory.SERVLET);
         GBeanData servletData;
         Map initParams = new HashMap();
+        Class baseServletClass;
+        try {
+            baseServletClass = webClassLoader.loadClass(Servlet.class.getName());
+        } catch (ClassNotFoundException e) {
+            throw new DeploymentException("Could not load javax.servlet.Servlet in web classloader", e); // TODO identify web app in message
+        }
         if (servletType.isSetServletClass()) {
             String servletClassName = servletType.getServletClass().getStringValue().trim();
             Class servletClass;
@@ -925,12 +930,6 @@
             } catch (ClassNotFoundException e) {
                 throw new DeploymentException("Could not load servlet class " + servletClassName, e); // TODO identify web app in message
             }
-            Class baseServletClass;
-            try {
-                baseServletClass = webClassLoader.loadClass(Servlet.class.getName());
-            } catch (ClassNotFoundException e) {
-                throw new DeploymentException("Could not load javax.servlet.Servlet in web classloader", e); // TODO identify web app in message
-            }
             if (baseServletClass.isAssignableFrom(servletClass)) {
                 servletData = new GBeanData(servletAbstractName, JettyServletHolder.GBEAN_INFO);
                 servletData.setAttribute("servletClass", servletClassName);
@@ -939,10 +938,10 @@
                 servletData.setAbstractName(servletAbstractName);
                 //let the web service builder deal with configuring the gbean with the web service stack
                 Object portInfo = portMap.get(servletName);
-                if (portInfo == null) {
-                    throw new DeploymentException("No web service deployment info for servlet name " + servletName); // TODO identify web app in message
-                }
-                getWebServiceBuilder().configurePOJO(servletData, moduleFile, portInfo, servletClassName, webClassLoader);
+//                if (portInfo == null) {
+//                    throw new DeploymentException("No web service deployment info for servlet name " + servletName); // TODO identify web app in message
+//                }
+                getWebServiceBuilder().configurePOJO(servletData, module, portInfo, servletClassName, moduleContext);
             }
         } else if (servletType.isSetJspFile()) {
             servletData = new GBeanData(servletAbstractName, JettyServletHolder.GBEAN_INFO);
@@ -986,7 +985,7 @@
         processRoleRefPermissions(servletType, securityRoles, rolePermissions);
 
         try {
-            earContext.addGBean(servletData);
+            moduleContext.addGBean(servletData);
         } catch (GBeanAlreadyExistsException e) {
             throw new DeploymentException("Could not add servlet gbean to context", e); // TODO identify web app in message
         }

Modified: geronimo/server/trunk/modules/geronimo-jetty/src/main/java/org/apache/geronimo/jetty/JettyPOJOWebServiceHolder.java
URL: http://svn.apache.org/viewvc/geronimo/server/trunk/modules/geronimo-jetty/src/main/java/org/apache/geronimo/jetty/JettyPOJOWebServiceHolder.java?view=diff&rev=464274&r1=464273&r2=464274
==============================================================================
--- geronimo/server/trunk/modules/geronimo-jetty/src/main/java/org/apache/geronimo/jetty/JettyPOJOWebServiceHolder.java (original)
+++ geronimo/server/trunk/modules/geronimo-jetty/src/main/java/org/apache/geronimo/jetty/JettyPOJOWebServiceHolder.java Sun Oct 15 13:40:04 2006
@@ -34,6 +34,7 @@
 import org.apache.geronimo.webservices.POJOWebServiceServlet;
 import org.apache.geronimo.webservices.WebServiceContainer;
 import org.apache.geronimo.webservices.WebServiceContainerInvoker;
+import org.apache.geronimo.webservices.WebServiceContainerFactory;
 import org.mortbay.jetty.servlet.ServletHolder;
 import org.mortbay.jetty.servlet.ServletHttpRequest;
 
@@ -60,7 +61,7 @@
                                      Map initParams,
                                      Integer loadOnStartup,
                                      Set servletMappings,
-                                     WebServiceContainer webServiceContainer,
+                                     WebServiceContainerFactory webServiceContainerFactory,
                                      ServletHolder previous,    //dependency for startup ordering
                                      JettyServletRegistration context) throws Exception {
         super(context == null ? null : context.getServletHandler(), servletName, POJOWebServiceServlet.class.getName(), null);
@@ -68,7 +69,7 @@
 
         this.pojoClassName = pojoClassName;
         this.context = context;
-        this.webServiceContainer = webServiceContainer;
+        this.webServiceContainer = webServiceContainerFactory == null? null: webServiceContainerFactory.getWebServiceContainer();
         if (context != null) {
             putAll(initParams);
             if (loadOnStartup != null) {
@@ -147,7 +148,7 @@
         infoBuilder.addAttribute("initParams", Map.class, true);
         infoBuilder.addAttribute("loadOnStartup", Integer.class, true);
         infoBuilder.addAttribute("servletMappings", Set.class, true);
-        infoBuilder.addAttribute("webServiceContainer", WebServiceContainer.class, true);
+        infoBuilder.addReference("WebServiceContainerFactory", WebServiceContainerFactory.class);
         infoBuilder.addReference("Previous", ServletHolder.class, NameFactory.SERVLET);
         infoBuilder.addReference("JettyServletRegistration", JettyServletRegistration.class);
 
@@ -156,7 +157,7 @@
                                                 "initParams",
                                                 "loadOnStartup",
                                                 "servletMappings",
-                                                "webServiceContainer",
+                                                "WebServiceContainerFactory",
                                                 "Previous",
                                                 "JettyServletRegistration"});
 

Modified: geronimo/server/trunk/modules/geronimo-kernel/src/main/java/org/apache/geronimo/gbean/runtime/GBeanAttribute.java
URL: http://svn.apache.org/viewvc/geronimo/server/trunk/modules/geronimo-kernel/src/main/java/org/apache/geronimo/gbean/runtime/GBeanAttribute.java?view=diff&rev=464274&r1=464273&r2=464274
==============================================================================
--- geronimo/server/trunk/modules/geronimo-kernel/src/main/java/org/apache/geronimo/gbean/runtime/GBeanAttribute.java (original)
+++ geronimo/server/trunk/modules/geronimo-kernel/src/main/java/org/apache/geronimo/gbean/runtime/GBeanAttribute.java Sun Oct 15 13:40:04 2006
@@ -195,7 +195,8 @@
         if (gbeanInstance == null || attributeInfo == null) {
             throw new IllegalArgumentException("null param(s) supplied");
         }
-        if (!attributeInfo.isReadable() && !attributeInfo.isWritable() && !attributeInfo.isPersistent() && !isConstructorArg) {
+        if (!attributeInfo.isReadable() && !attributeInfo.isWritable() && !attributeInfo.isPersistent() && !isConstructorArg)
+        {
             throw new InvalidConfigurationException("An attribute must be readable, writable, persistent or a constructor arg: " +
                     " name=" + attributeInfo.getName() + " targetClass=" + gbeanInstance.getType().getName());
         }
@@ -236,7 +237,11 @@
                     Method getterMethod = gbeanInstance.getType().getMethod(getterName, null);
 
                     if (!getterMethod.getReturnType().equals(type)) {
-                        throw new InvalidConfigurationException("Getter method of wrong type: " + getterMethod.getReturnType() + " expected " +getDescription());
+                        if (getterMethod.getReturnType().getName().equals(type.getName())) {
+                            throw new InvalidConfigurationException("Getter return type in wrong classloader: type: " + type + " wanted in classloader: " + type.getClassLoader() + " actual: " + getterMethod.getReturnType().getClassLoader());
+                        } else {
+                            throw new InvalidConfigurationException("Getter method of wrong type: " + getterMethod.getReturnType() + " expected " + getDescription());
+                        }
                     }
                     if (AbstractGBeanReference.NO_PROXY) {
                         getInvoker = new ReflectionMethodInvoker(getterMethod);
@@ -244,7 +249,7 @@
                         getInvoker = new FastMethodInvoker(getterMethod);
                     }
                 } catch (NoSuchMethodException e) {
-                    throw new InvalidConfigurationException("Getter method not found " +getDescription());
+                    throw new InvalidConfigurationException("Getter method not found " + getDescription());
                 }
             } else {
                 getInvoker = null;
@@ -255,7 +260,7 @@
             if (attributeInfo.getSetterName() != null) {
                 try {
                     String setterName = attributeInfo.getSetterName();
-                    Method setterMethod = gbeanInstance.getType().getMethod(setterName, new Class[] {type});
+                    Method setterMethod = gbeanInstance.getType().getMethod(setterName, new Class[]{type});
                     if (AbstractGBeanReference.NO_PROXY) {
                         setInvoker = new ReflectionMethodInvoker(setterMethod);
                     } else {

Modified: geronimo/server/trunk/modules/geronimo-tomcat-builder/src/main/java/org/apache/geronimo/tomcat/deployment/TomcatModuleBuilder.java
URL: http://svn.apache.org/viewvc/geronimo/server/trunk/modules/geronimo-tomcat-builder/src/main/java/org/apache/geronimo/tomcat/deployment/TomcatModuleBuilder.java?view=diff&rev=464274&r1=464273&r2=464274
==============================================================================
--- geronimo/server/trunk/modules/geronimo-tomcat-builder/src/main/java/org/apache/geronimo/tomcat/deployment/TomcatModuleBuilder.java (original)
+++ geronimo/server/trunk/modules/geronimo-tomcat-builder/src/main/java/org/apache/geronimo/tomcat/deployment/TomcatModuleBuilder.java Sun Oct 15 13:40:04 2006
@@ -32,6 +32,8 @@
 import java.util.Set;
 import java.util.jar.JarFile;
 
+import javax.servlet.Servlet;
+
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 import org.apache.geronimo.common.DeploymentException;
@@ -47,6 +49,7 @@
 import org.apache.geronimo.gbean.GBeanInfo;
 import org.apache.geronimo.gbean.GBeanInfoBuilder;
 import org.apache.geronimo.gbean.SingleElementCollection;
+import org.apache.geronimo.gbean.ReferencePatterns;
 import org.apache.geronimo.j2ee.deployment.EARContext;
 import org.apache.geronimo.j2ee.deployment.Module;
 import org.apache.geronimo.j2ee.deployment.ModuleBuilder;
@@ -73,7 +76,6 @@
 import org.apache.geronimo.tomcat.util.SecurityHolder;
 import org.apache.geronimo.web.deployment.AbstractWebModuleBuilder;
 import org.apache.geronimo.web.deployment.GenericToSpecificPlanConverter;
-import org.apache.geronimo.webservices.WebServiceContainer;
 import org.apache.geronimo.xbeans.geronimo.web.tomcat.TomcatWebAppDocument;
 import org.apache.geronimo.xbeans.geronimo.web.tomcat.TomcatWebAppType;
 import org.apache.geronimo.xbeans.geronimo.web.tomcat.config.GerTomcatDocument;
@@ -178,7 +180,7 @@
 
         Map servletNameToPathMap = buildServletNameToPathMap(webApp, contextRoot);
 
-        Map portMap = getWebServiceBuilder().findWebServices(moduleFile, false, servletNameToPathMap);
+        Map portMap = getWebServiceBuilder().findWebServices(moduleFile, false, servletNameToPathMap, environment);
         AbstractName moduleName;
         if (earName == null) {
             earName = naming.createRootName(environment.getConfigId(), NameFactory.NULL, NameFactory.J2EE_APPLICATION);
@@ -260,7 +262,7 @@
 
     public void addGBeans(EARContext earContext, Module module, ClassLoader cl, Collection repository) throws DeploymentException {
         EARContext moduleContext = module.getEarContext();
-        ClassLoader moduleClassLoader = moduleContext.getClassLoader();
+        ClassLoader webClassLoader = moduleContext.getClassLoader();
         AbstractName moduleName = moduleContext.getModuleName();
         WebModule webModule = (WebModule) module;
 
@@ -346,27 +348,41 @@
             //Handle the role permissions and webservices on the servlets.
             ServletType[] servletTypes = webApp.getServletArray();
             Map webServices = new HashMap();
+            Class baseServletClass;
+            try {
+                baseServletClass = webClassLoader.loadClass(Servlet.class.getName());
+            } catch (ClassNotFoundException e) {
+                throw new DeploymentException("Could not load javax.servlet.Servlet in web classloader", e); // TODO identify web app in message
+            }
             for (int i = 0; i < servletTypes.length; i++) {
                 ServletType servletType = servletTypes[i];
 
                 //Handle the Role Ref Permissions
                 processRoleRefPermissions(servletType, securityRoles, rolePermissions);
 
-                //Do we have webservices configured?
-                if (portMap != null) {
-                    //Check if the Servlet is a Webservice
+                if (servletType.isSetServletClass()) {
                     String servletName = servletType.getServletName().getStringValue().trim();
-                    if (portMap.containsKey(servletName)) {
-                        //Yes, this servlet is a web service so let the web service builder
-                        // deal with configuring the web service stack
-                        String servletClassName = servletType.getServletClass().getStringValue().trim();
+                    String servletClassName = servletType.getServletClass().getStringValue().trim();
+                    Class servletClass;
+                    try {
+                        servletClass = webClassLoader.loadClass(servletClassName);
+                    } catch (ClassNotFoundException e) {
+                        throw new DeploymentException("Could not load servlet class " + servletClassName, e); // TODO identify web app in message
+                    }
+                    if (!baseServletClass.isAssignableFrom(servletClass)) {
+                        //fake servletData
+                        AbstractName servletAbstractName = moduleContext.getNaming().createChildName(moduleName, servletName, NameFactory.SERVLET);
+                        GBeanData servletData = new GBeanData();
+                        servletData.setAbstractName(servletAbstractName);
+                        //let the web service builder deal with configuring the gbean with the web service stack
+                        //Here we just extract the factory reference
                         Object portInfo = portMap.get(servletName);
-                        if (portInfo == null) {
-                            throw new DeploymentException("No web service deployment info for servlet name " + servletName + " in web app " + module.getName());
-                        }
-
-                        WebServiceContainer wsContainer = configurePOJO(webModule.getModuleFile(), portInfo, servletClassName, moduleClassLoader);
-                        webServices.put(servletName, wsContainer);
+                        getWebServiceBuilder().configurePOJO(servletData, module, portInfo, servletClassName, moduleContext);
+                        ReferencePatterns patterns = servletData.getReferencePatterns("WebServiceContainerFactory");
+                        AbstractName wsContainerFactoryName = patterns.getAbstractName();
+                        webServices.put(servletName, wsContainerFactoryName);
+                        //force all the factories to start before the web app that needs them.
+                        webModuleData.addDependency(wsContainerFactoryName);
                     }
                 }
             }
@@ -426,16 +442,6 @@
 
     public String getSchemaNamespace() {
         return TOMCAT_NAMESPACE;
-    }
-
-    public WebServiceContainer configurePOJO(JarFile moduleFile, Object portInfoObject, String seiClassName, ClassLoader classLoader) throws DeploymentException, IOException {
-        //the reason to configure a gbeandata rather than just fetch the WebServiceContainer is that fetching the WSContainer ties us to that
-        //ws implementation.  By configuring a servlet gbean, you can provide a different servlet for each combination of
-        //web container and ws implementation while assuming almost nothing about their relationship.
-
-        GBeanData fakeData = new GBeanData();
-        getWebServiceBuilder().configurePOJO(fakeData, moduleFile, portInfoObject, seiClassName, classLoader);
-        return (WebServiceContainer) fakeData.getAttribute("webServiceContainer");
     }
 
 

Added: geronimo/server/trunk/modules/geronimo-tomcat-builder/src/test/java/org/apache/geronimo/tomcat/app/HelloWorld.java
URL: http://svn.apache.org/viewvc/geronimo/server/trunk/modules/geronimo-tomcat-builder/src/test/java/org/apache/geronimo/tomcat/app/HelloWorld.java?view=auto&rev=464274
==============================================================================
--- geronimo/server/trunk/modules/geronimo-tomcat-builder/src/test/java/org/apache/geronimo/tomcat/app/HelloWorld.java (added)
+++ geronimo/server/trunk/modules/geronimo-tomcat-builder/src/test/java/org/apache/geronimo/tomcat/app/HelloWorld.java Sun Oct 15 13:40:04 2006
@@ -0,0 +1,28 @@
+/*
+ * 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.geronimo.tomcat.app;
+
+/**
+ * @version $Rev:$ $Date:$
+ */
+public interface HelloWorld {
+    String hi(String name);
+}

Propchange: geronimo/server/trunk/modules/geronimo-tomcat-builder/src/test/java/org/apache/geronimo/tomcat/app/HelloWorld.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: geronimo/server/trunk/modules/geronimo-tomcat-builder/src/test/java/org/apache/geronimo/tomcat/app/HelloWorld.java
------------------------------------------------------------------------------
    svn:keywords = Date Revision

Propchange: geronimo/server/trunk/modules/geronimo-tomcat-builder/src/test/java/org/apache/geronimo/tomcat/app/HelloWorld.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Added: geronimo/server/trunk/modules/geronimo-tomcat-builder/src/test/java/org/apache/geronimo/tomcat/app/HelloWorldWS.java
URL: http://svn.apache.org/viewvc/geronimo/server/trunk/modules/geronimo-tomcat-builder/src/test/java/org/apache/geronimo/tomcat/app/HelloWorldWS.java?view=auto&rev=464274
==============================================================================
--- geronimo/server/trunk/modules/geronimo-tomcat-builder/src/test/java/org/apache/geronimo/tomcat/app/HelloWorldWS.java (added)
+++ geronimo/server/trunk/modules/geronimo-tomcat-builder/src/test/java/org/apache/geronimo/tomcat/app/HelloWorldWS.java Sun Oct 15 13:40:04 2006
@@ -0,0 +1,31 @@
+/*
+ * 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.geronimo.tomcat.app;
+
+/**
+ * @version $Rev:$ $Date:$
+ */
+public class HelloWorldWS implements HelloWorld {
+
+    public String hi(String name) {
+        return "hi " + name;
+    }
+}

Propchange: geronimo/server/trunk/modules/geronimo-tomcat-builder/src/test/java/org/apache/geronimo/tomcat/app/HelloWorldWS.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: geronimo/server/trunk/modules/geronimo-tomcat-builder/src/test/java/org/apache/geronimo/tomcat/app/HelloWorldWS.java
------------------------------------------------------------------------------
    svn:keywords = Date Revision

Propchange: geronimo/server/trunk/modules/geronimo-tomcat-builder/src/test/java/org/apache/geronimo/tomcat/app/HelloWorldWS.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Added: geronimo/server/trunk/modules/geronimo-tomcat-builder/src/test/java/org/apache/geronimo/tomcat/deployment/MockWebServiceBuilder.java
URL: http://svn.apache.org/viewvc/geronimo/server/trunk/modules/geronimo-tomcat-builder/src/test/java/org/apache/geronimo/tomcat/deployment/MockWebServiceBuilder.java?view=auto&rev=464274
==============================================================================
--- geronimo/server/trunk/modules/geronimo-tomcat-builder/src/test/java/org/apache/geronimo/tomcat/deployment/MockWebServiceBuilder.java (added)
+++ geronimo/server/trunk/modules/geronimo-tomcat-builder/src/test/java/org/apache/geronimo/tomcat/deployment/MockWebServiceBuilder.java Sun Oct 15 13:40:04 2006
@@ -0,0 +1,59 @@
+/*
+ * 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.geronimo.tomcat.deployment;
+
+import java.util.Map;
+import java.util.Collections;
+import java.util.jar.JarFile;
+
+import org.apache.geronimo.j2ee.deployment.WebServiceBuilder;
+import org.apache.geronimo.j2ee.deployment.Module;
+import org.apache.geronimo.j2ee.j2eeobjectnames.NameFactory;
+import org.apache.geronimo.kernel.repository.Environment;
+import org.apache.geronimo.kernel.GBeanAlreadyExistsException;
+import org.apache.geronimo.common.DeploymentException;
+import org.apache.geronimo.gbean.GBeanData;
+import org.apache.geronimo.gbean.AbstractName;
+import org.apache.geronimo.deployment.DeploymentContext;
+import org.apache.geronimo.webservices.SerializableWebServiceContainerFactoryGBean;
+
+/**
+ * @version $Rev:$ $Date:$
+ */
+public class MockWebServiceBuilder implements WebServiceBuilder {
+    public Map findWebServices(JarFile moduleFile, boolean isEJB, Map correctedPortLocations, Environment environment) throws DeploymentException {
+        return Collections.EMPTY_MAP;
+    }
+
+    public void configurePOJO(GBeanData targetGBean, Module module, Object portInfo, String seiClassName, DeploymentContext context) throws DeploymentException {
+        AbstractName webServiceContainerFactoryName = context.getNaming().createChildName(targetGBean.getAbstractName(), "webServiceContainer", NameFactory.GERONIMO_SERVICE);
+        GBeanData webServiceContainerFactoryGBean = new GBeanData(webServiceContainerFactoryName, SerializableWebServiceContainerFactoryGBean.GBEAN_INFO);
+        try {
+            context.addGBean(webServiceContainerFactoryGBean);
+        } catch (GBeanAlreadyExistsException e) {
+            throw new DeploymentException("Could not add webServiceContainerFactoryGBean", e);
+        }
+        targetGBean.setReferencePattern("WebServiceContainerFactory", webServiceContainerFactoryName);
+    }
+
+    public void configureEJB(GBeanData targetGBean, JarFile moduleFile, Object portInfo, ClassLoader classLoader) throws DeploymentException {
+    }
+}

Propchange: geronimo/server/trunk/modules/geronimo-tomcat-builder/src/test/java/org/apache/geronimo/tomcat/deployment/MockWebServiceBuilder.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: geronimo/server/trunk/modules/geronimo-tomcat-builder/src/test/java/org/apache/geronimo/tomcat/deployment/MockWebServiceBuilder.java
------------------------------------------------------------------------------
    svn:keywords = Date Revision

Propchange: geronimo/server/trunk/modules/geronimo-tomcat-builder/src/test/java/org/apache/geronimo/tomcat/deployment/MockWebServiceBuilder.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Modified: geronimo/server/trunk/modules/geronimo-tomcat-builder/src/test/java/org/apache/geronimo/tomcat/deployment/TomcatModuleBuilderTest.java
URL: http://svn.apache.org/viewvc/geronimo/server/trunk/modules/geronimo-tomcat-builder/src/test/java/org/apache/geronimo/tomcat/deployment/TomcatModuleBuilderTest.java?view=diff&rev=464274&r1=464273&r2=464274
==============================================================================
--- geronimo/server/trunk/modules/geronimo-tomcat-builder/src/test/java/org/apache/geronimo/tomcat/deployment/TomcatModuleBuilderTest.java (original)
+++ geronimo/server/trunk/modules/geronimo-tomcat-builder/src/test/java/org/apache/geronimo/tomcat/deployment/TomcatModuleBuilderTest.java Sun Oct 15 13:40:04 2006
@@ -287,7 +287,7 @@
         engine.setReferencePattern("RealmGBean", realm.getAbstractName());
         engine.setReferencePattern("Hosts", host.getAbstractName());
 
-        WebServiceBuilder webServiceBuilder = new UnavailableWebServiceBuilder();
+        WebServiceBuilder webServiceBuilder = new MockWebServiceBuilder();
 
         GBeanData containerData = bootstrap.addGBean("TomcatContainer", TomcatContainer.GBEAN_INFO);
         containerData.setAttribute("catalinaHome", new File(BASEDIR, "target/var/catalina").toString());

Modified: geronimo/server/trunk/modules/geronimo-tomcat-builder/src/test/resources/deployables/war5/WEB-INF/web.xml
URL: http://svn.apache.org/viewvc/geronimo/server/trunk/modules/geronimo-tomcat-builder/src/test/resources/deployables/war5/WEB-INF/web.xml?view=diff&rev=464274&r1=464273&r2=464274
==============================================================================
--- geronimo/server/trunk/modules/geronimo-tomcat-builder/src/test/resources/deployables/war5/WEB-INF/web.xml (original)
+++ geronimo/server/trunk/modules/geronimo-tomcat-builder/src/test/resources/deployables/war5/WEB-INF/web.xml Sun Oct 15 13:40:04 2006
@@ -8,7 +8,7 @@
 
     <servlet>
         <servlet-name>HelloWorldServlet</servlet-name>
-        <servlet-class>org.apache.geronimo.ws.HelloWorldWS</servlet-class>
+        <servlet-class>org.apache.geronimo.tomcat.app.HelloWorldWS</servlet-class>
     </servlet>
 
     <servlet-mapping>

Modified: geronimo/server/trunk/modules/geronimo-tomcat/src/main/java/org/apache/geronimo/tomcat/GeronimoStandardContext.java
URL: http://svn.apache.org/viewvc/geronimo/server/trunk/modules/geronimo-tomcat/src/main/java/org/apache/geronimo/tomcat/GeronimoStandardContext.java?view=diff&rev=464274&r1=464273&r2=464274
==============================================================================
--- geronimo/server/trunk/modules/geronimo-tomcat/src/main/java/org/apache/geronimo/tomcat/GeronimoStandardContext.java (original)
+++ geronimo/server/trunk/modules/geronimo-tomcat/src/main/java/org/apache/geronimo/tomcat/GeronimoStandardContext.java Sun Oct 15 13:40:04 2006
@@ -21,6 +21,7 @@
 import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
+
 import javax.naming.NamingException;
 import javax.security.auth.Subject;
 import javax.security.jacc.PolicyContext;
@@ -70,10 +71,10 @@
     private Map webServiceMap = null;
 
     private boolean pipelineInitialized;
-    
+
     private BeforeAfter beforeAfter = null;
     private int contextCount = 0;
-    
+
     public void setContextProperties(TomcatContext ctx) throws DeploymentException {
         //try to make sure this mbean properties match those of the TomcatWebAppContext
         if (ctx instanceof TomcatWebAppContext) {
@@ -91,11 +92,11 @@
         } catch (NamingException ne) {
             log.error(ne);
         }
-        
+
         int index = 0;
-        BeforeAfter interceptor = new InstanceContextBeforeAfter(null, index++, 
-                ctx.getUnshareableResources(), 
-                ctx.getApplicationManagedSecurityResources(), 
+        BeforeAfter interceptor = new InstanceContextBeforeAfter(null, index++,
+                ctx.getUnshareableResources(),
+                ctx.getApplicationManagedSecurityResources(),
                 ctx.getTrackedConnectionAssociator());
 
         // Set ComponentContext BeforeAfter
@@ -124,13 +125,13 @@
                 interceptor = new PolicyContextBeforeAfter(interceptor, index++, index++, securityHolder.getPolicyContextID());
             }
         }
-        
+
         //Set the BeforeAfters as a valve
         GeronimoBeforeAfterValve geronimoBAValve = new GeronimoBeforeAfterValve(interceptor, index);
         addValve(geronimoBAValve);
         beforeAfter = interceptor;
         contextCount = index;
-        
+
         //Not clear if user defined valves should be involved in init processing.  Probably not since
         //request and response are null.
 
@@ -149,7 +150,7 @@
         CatalinaCluster cluster = ctx.getCluster();
         if (cluster != null)
             this.setCluster(cluster);
-        
+
         Manager manager = ctx.getManager();
         if (manager != null)
             this.setManager(manager);
@@ -160,7 +161,7 @@
         this.setCrossContext(ctx.isCrossContext());
 
         this.setCookies(!ctx.isDisableCookies());
-        
+
         //Set the Dispatch listener
         this.addInstanceListener("org.apache.geronimo.tomcat.listener.DispatchListener");
     }
@@ -172,7 +173,7 @@
                 valve.invoke(null, null);
                 //Install the DefaultSubjectValve after the authentication valve so the default subject is supplied
                 //only if no real subject is authenticated.
-                
+
                 Valve defaultSubjectValve = new DefaultSubjectValve(defaultSubject);
                 addValve(defaultSubjectValve);
             } catch (IOException e) {
@@ -244,7 +245,7 @@
 
     public synchronized void setLoader(final Loader delegate) {
         Loader loader = new Loader() {
-            
+
             public void backgroundProcess() {
                 delegate.backgroundProcess();
             }
@@ -305,7 +306,7 @@
                 delegate.removePropertyChangeListener(listener);
             }
         };
-        
+
         super.setLoader(loader);
     }
 

Modified: geronimo/server/trunk/modules/geronimo-tomcat/src/main/java/org/apache/geronimo/tomcat/TomcatWebAppContext.java
URL: http://svn.apache.org/viewvc/geronimo/server/trunk/modules/geronimo-tomcat/src/main/java/org/apache/geronimo/tomcat/TomcatWebAppContext.java?view=diff&rev=464274&r1=464273&r2=464274
==============================================================================
--- geronimo/server/trunk/modules/geronimo-tomcat/src/main/java/org/apache/geronimo/tomcat/TomcatWebAppContext.java (original)
+++ geronimo/server/trunk/modules/geronimo-tomcat/src/main/java/org/apache/geronimo/tomcat/TomcatWebAppContext.java Sun Oct 15 13:40:04 2006
@@ -17,6 +17,23 @@
 
 package org.apache.geronimo.tomcat;
 
+import java.net.MalformedURLException;
+import java.net.URI;
+import java.net.URL;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.Hashtable;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
+import javax.management.MalformedObjectNameException;
+import javax.management.ObjectName;
+import javax.naming.directory.DirContext;
+import javax.transaction.TransactionManager;
+import javax.transaction.UserTransaction;
+
 import org.apache.catalina.Context;
 import org.apache.catalina.Manager;
 import org.apache.catalina.Realm;
@@ -25,6 +42,8 @@
 import org.apache.catalina.core.StandardContext;
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
+import org.apache.geronimo.connector.outbound.connectiontracking.TrackedConnectionAssociator;
+import org.apache.geronimo.gbean.AbstractName;
 import org.apache.geronimo.gbean.GBeanInfo;
 import org.apache.geronimo.gbean.GBeanInfoBuilder;
 import org.apache.geronimo.gbean.GBeanLifecycle;
@@ -34,32 +53,16 @@
 import org.apache.geronimo.kernel.ObjectNameUtil;
 import org.apache.geronimo.management.J2EEApplication;
 import org.apache.geronimo.management.J2EEServer;
-import org.apache.geronimo.management.geronimo.WebModule;
-import org.apache.geronimo.management.geronimo.WebContainer;
 import org.apache.geronimo.management.geronimo.WebConnector;
-import org.apache.geronimo.security.jacc.RoleDesignateSource;
+import org.apache.geronimo.management.geronimo.WebContainer;
+import org.apache.geronimo.management.geronimo.WebModule;
 import org.apache.geronimo.tomcat.cluster.CatalinaClusterGBean;
 import org.apache.geronimo.tomcat.util.SecurityHolder;
-import org.apache.geronimo.connector.outbound.connectiontracking.TrackedConnectionAssociator;
 import org.apache.geronimo.transaction.GeronimoUserTransaction;
+import org.apache.geronimo.webservices.WebServiceContainer;
+import org.apache.geronimo.webservices.WebServiceContainerFactory;
 import org.apache.naming.resources.DirContextURLStreamHandler;
 
-import javax.management.ObjectName;
-import javax.management.MalformedObjectNameException;
-import javax.naming.directory.DirContext;
-import javax.transaction.TransactionManager;
-import javax.transaction.UserTransaction;
-
-import java.net.URI;
-import java.net.URL;
-import java.net.MalformedURLException;
-import java.util.ArrayList;
-import java.util.Hashtable;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-import java.util.HashMap;
-
 /**
  * Wrapper for a WebApplicationContext that sets up its J2EE environment.
  *
@@ -218,7 +221,7 @@
 
         this.disableCookies = disableCookies;
 
-        this.webServices = webServices;
+        this.webServices = createWebServices(webServices, kernel);
 
         this.classLoader = classLoader;
 
@@ -230,6 +233,21 @@
 
     }
 
+    private Map createWebServices(Map webServiceFactoryMap, Kernel kernel) throws Exception {
+        Map webServices = new HashMap();
+        if (webServiceFactoryMap != null) {
+            for (Iterator iterator = webServiceFactoryMap.entrySet().iterator(); iterator.hasNext();) {
+                Map.Entry entry = (Map.Entry) iterator.next();
+                String servletName = (String) entry.getKey();
+                AbstractName factoryName = (AbstractName) entry.getValue();
+                WebServiceContainerFactory webServiceContainerFactory = (WebServiceContainerFactory) kernel.getGBean(factoryName);
+                WebServiceContainer webServiceContainer = webServiceContainerFactory.getWebServiceContainer();
+                webServices.put(servletName, webServiceContainer);
+            }
+        }
+        return webServices;
+    }
+
     public String getObjectName() {
         return objectName;
     }
@@ -449,7 +467,7 @@
     public void doStop() throws Exception {
         container.removeContext(this);
         DirContextURLStreamHandler.unbind(classLoader);
- 
+
         // No more logging will occur for this ClassLoader. Inform the LogFactory to avoid a memory leak.
 //        LogFactory.release(classLoader);