You are viewing a plain text version of this content. The canonical link for it is here.
Posted to java-dev@axis.apache.org by ro...@apache.org on 2007/10/12 21:55:02 UTC

svn commit: r584248 [1/4] - in /webservices/axis2/trunk/java/modules: codegen/src/org/apache/axis2/wsdl/codegen/ kernel/conf/ kernel/src/org/apache/axis2/ kernel/src/org/apache/axis2/deployment/ kernel/src/org/apache/axis2/deployment/repository/util/ k...

Author: robinsona
Date: Fri Oct 12 12:53:43 2007
New Revision: 584248

URL: http://svn.apache.org/viewvc?rev=584248&view=rev
Log:
axis2-2968 handle out-of-memory stemming from keeping wsdl4j's wsdl definition around

Added:
    webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/wsdl/util/WSDLDefinitionWrapper.java
    webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/wsdl/util/WSDLWrapperBasicImpl.java
    webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/wsdl/util/WSDLWrapperImpl.java
    webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/wsdl/util/WSDLWrapperReloadImpl.java
    webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/wsdl/util/WSDLWrapperSaveImpl.java
    webservices/axis2/trunk/java/modules/kernel/test-resources/deployment/axis2_a.xml
    webservices/axis2/trunk/java/modules/kernel/test/org/apache/axis2/description/WSDLWrapperTest.java
Modified:
    webservices/axis2/trunk/java/modules/codegen/src/org/apache/axis2/wsdl/codegen/CodeGenerationEngine.java
    webservices/axis2/trunk/java/modules/kernel/conf/axis2.xml
    webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/Constants.java
    webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/deployment/DeploymentEngine.java
    webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/deployment/repository/util/ArchiveReader.java
    webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/description/AxisService.java
    webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/description/WSDL11ToAxisServiceBuilder.java
    webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/description/WSDLToAxisServiceBuilder.java
    webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/util/Counter.java
    webservices/axis2/trunk/java/modules/metadata/src/org/apache/axis2/jaxws/description/builder/DescriptionBuilderComposite.java
    webservices/axis2/trunk/java/modules/metadata/src/org/apache/axis2/jaxws/description/impl/EndpointDescriptionImpl.java
    webservices/axis2/trunk/java/modules/metadata/src/org/apache/axis2/jaxws/util/WSDL4JWrapper.java
    webservices/axis2/trunk/java/modules/metadata/src/org/apache/axis2/jaxws/util/WSDLWrapper.java
    webservices/axis2/trunk/java/modules/metadata/test/org/apache/axis2/jaxws/description/DescriptionTestUtils.java
    webservices/axis2/trunk/java/modules/tool/axis2-eclipse-codegen-plugin/src/main/java/org/apache/axis2/tool/codegen/WSDL2JavaGenerator.java
    webservices/axis2/trunk/java/modules/tool/axis2-idea-plugin/src/main/java/org/apache/axis2/tools/bean/CodegenBean.java

Modified: webservices/axis2/trunk/java/modules/codegen/src/org/apache/axis2/wsdl/codegen/CodeGenerationEngine.java
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/codegen/src/org/apache/axis2/wsdl/codegen/CodeGenerationEngine.java?rev=584248&r1=584247&r2=584248&view=diff
==============================================================================
--- webservices/axis2/trunk/java/modules/codegen/src/org/apache/axis2/wsdl/codegen/CodeGenerationEngine.java (original)
+++ webservices/axis2/trunk/java/modules/codegen/src/org/apache/axis2/wsdl/codegen/CodeGenerationEngine.java Fri Oct 12 12:53:43 2007
@@ -46,6 +46,9 @@
 import javax.xml.parsers.ParserConfigurationException;
 import java.io.File;
 import java.io.IOException;
+import java.net.MalformedURLException;
+import java.net.URL;
+import java.net.URI;
 import java.net.URISyntaxException;
 import java.util.ArrayList;
 import java.util.List;
@@ -293,7 +296,15 @@
         Document doc;
         try {
             doc = XMLUtils.newDocument(uri);
-            return reader.readWSDL(getBaseURI(uri), doc);
+
+            // Set the URI of the base document for the Definition.
+            // This identifies the origin of the Definition
+            // Note that this is the URI of the base document, not the imports.
+            Definition def = reader.readWSDL(getBaseURI(uri), doc);
+            def.setDocumentBaseURI(getURI(uri));
+
+            return def;
+
         } catch (ParserConfigurationException e) {
             throw new WSDLException(WSDLException.PARSER_ERROR,
                                     "Parser Configuration Error",
@@ -350,5 +361,17 @@
         }
         String uriFragment = currentURI.substring(0, currentURI.lastIndexOf("/"));
         return uriFragment + (uriFragment.endsWith("/") ? "" : "/");
+    }
+
+    /**
+     * calculates the URI 
+     * needs improvement
+     *
+     * @param currentURI
+     */
+    private String getURI(String currentURI) throws URISyntaxException, IOException {
+
+        File file = new File(currentURI);
+        return file.getCanonicalFile().toURI().toString();
     }
 }

Modified: webservices/axis2/trunk/java/modules/kernel/conf/axis2.xml
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/kernel/conf/axis2.xml?rev=584248&r1=584247&r2=584248&view=diff
==============================================================================
--- webservices/axis2/trunk/java/modules/kernel/conf/axis2.xml (original)
+++ webservices/axis2/trunk/java/modules/kernel/conf/axis2.xml Fri Oct 12 12:53:43 2007
@@ -31,6 +31,12 @@
     <parameter name="attachmentDIR"></parameter>
     <parameter name="sizeThreshold">4000</parameter-->
 
+    <!--Uncomment if you want to enable the reduction of the in-memory cache of WSDL definitions -->
+    <!--In some server environments, the available memory heap is limited and can fill up under load -->
+    <!--Since in-memory copies of WSDL definitions can be large, some steps can be taken-->
+    <!--to reduce the memory needed for the cached WSDL definitions. -->
+    <!--parameter name="reduceWSDLMemoryCache">true</parameter-->
+                                                       
     <!--This will give out the timout of the configuration contexts, in milliseconds-->
     <parameter name="ConfigContextTimeoutInterval">30000</parameter>
 

Modified: webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/Constants.java
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/Constants.java?rev=584248&r1=584247&r2=584248&view=diff
==============================================================================
--- webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/Constants.java (original)
+++ webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/Constants.java Fri Oct 12 12:53:43 2007
@@ -268,6 +268,9 @@
         public static final String MM7_PART_CID = "MM7PartCID";
 
 
+        public static final String REDUCE_WSDL_MEMORY_CACHE = "reduceWSDLMemoryCache";
+        public static final String REDUCE_WSDL_MEMORY_TYPE  = "reduceWSDLMemoryType";
+
         public static final String HTTP_METHOD_GET = "GET";
         public static final String HTTP_METHOD_DELETE = "DELETE";
         public static final String HTTP_METHOD_PUT = "PUT";

Modified: webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/deployment/DeploymentEngine.java
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/deployment/DeploymentEngine.java?rev=584248&r1=584247&r2=584248&view=diff
==============================================================================
--- webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/deployment/DeploymentEngine.java (original)
+++ webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/deployment/DeploymentEngine.java Fri Oct 12 12:53:43 2007
@@ -338,10 +338,12 @@
                 String wsdlLocation =  "META-INF/service.wsdl";
                 InputStream wsdlStream =
                         serviceClassLoader.getResourceAsStream(wsdlLocation);
+                URL wsdlURL = serviceClassLoader.getResource(metainf + "/service.wsdl");
                 if (wsdlStream == null) {
                     wsdlLocation =  "META-INF/" + serviceName + ".wsdl";
                     wsdlStream = serviceClassLoader
                             .getResourceAsStream(wsdlLocation);
+                    wsdlURL = serviceClassLoader.getResource(wsdlLocation);
                 }
                 if (wsdlStream != null) {
                     WSDL11ToAxisServiceBuilder wsdl2AxisServiceBuilder =
@@ -353,6 +355,9 @@
                         wsdl2AxisServiceBuilder.setCustomResolver(
                                 new AARFileBasedURIResolver(file));
                     }
+                    if (wsdlURL != null) {
+                        wsdl2AxisServiceBuilder.setDocumentBaseUri(wsdlURL.toString());
+                    }
                     axisService = wsdl2AxisServiceBuilder.populateService();
                     axisService.setWsdlFound(true);
                     axisService.setCustomWsdl(true);
@@ -381,10 +386,13 @@
                     String wsdlLocation =  "META-INF/service.wsdl";
                     InputStream wsdlStream =
                             serviceClassLoader.getResourceAsStream(wsdlLocation);
+                    URL wsdlURL = serviceClassLoader.getResource(wsdlLocation);
                     if (wsdlStream == null) {
                         wsdlLocation =  "META-INF/" + serviceName + ".wsdl";
                         wsdlStream = serviceClassLoader
                                 .getResourceAsStream(wsdlLocation);
+                        wsdlURL =
+                                serviceClassLoader.getResource(wsdlLocation);
                     }
                     if (wsdlStream != null) {
                         WSDL11ToAxisServiceBuilder wsdl2AxisServiceBuilder =
@@ -395,6 +403,9 @@
                                         new AARBasedWSDLLocator(wsdlLocation, file, wsdlStream));
                             wsdl2AxisServiceBuilder.setCustomResolver(
                                     new AARFileBasedURIResolver(file));
+                        }
+                        if (wsdlURL != null) {
+                            wsdl2AxisServiceBuilder.setDocumentBaseUri(wsdlURL.toString());
                         }
                         axisService = wsdl2AxisServiceBuilder.populateService();
                         axisService.setWsdlFound(true);

Modified: webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/deployment/repository/util/ArchiveReader.java
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/deployment/repository/util/ArchiveReader.java?rev=584248&r1=584247&r2=584248&view=diff
==============================================================================
--- webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/deployment/repository/util/ArchiveReader.java (original)
+++ webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/deployment/repository/util/ArchiveReader.java Fri Oct 12 12:53:43 2007
@@ -35,7 +35,15 @@
 import org.apache.axis2.deployment.resolver.AARFileBasedURIResolver;
 import org.apache.axis2.deployment.resolver.WarBasedWSDLLocator;
 import org.apache.axis2.deployment.resolver.WarFileBasedURIResolver;
-import org.apache.axis2.description.*;
+import org.apache.axis2.description.AxisModule;
+import org.apache.axis2.description.AxisService;
+import org.apache.axis2.description.AxisServiceGroup;
+import org.apache.axis2.description.WSDL11ToAllAxisServicesBuilder;
+import org.apache.axis2.description.WSDL11ToAxisServiceBuilder;
+import org.apache.axis2.description.WSDL2Constants;
+import org.apache.axis2.description.WSDL20ToAllAxisServicesBuilder;
+import org.apache.axis2.description.WSDL20ToAxisServiceBuilder;
+import org.apache.axis2.description.WSDLToAxisServiceBuilder;
 import org.apache.axis2.engine.AxisConfiguration;
 import org.apache.axis2.i18n.Messages;
 import org.apache.axis2.namespace.Constants;
@@ -52,6 +60,8 @@
 import java.io.FileNotFoundException;
 import java.io.IOException;
 import java.io.InputStream;
+import java.net.MalformedURLException;
+import java.net.URL;
 import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.List;
@@ -212,8 +222,12 @@
                         new AARFileBasedURIResolver(serviceArchiveFile));
                 if (axisServiceBuilder instanceof WSDL11ToAllAxisServicesBuilder) {
 
-                    ((WSDL11ToAllAxisServicesBuilder) axisServiceBuilder).setCustomWSLD4JResolver(
+                    ((WSDL11ToAllAxisServicesBuilder) axisServiceBuilder).setCustomWSDLResolver(
                             new AARBasedWSDLLocator(baseURI, serviceArchiveFile, in));
+
+                    ((WSDL11ToAllAxisServicesBuilder) axisServiceBuilder).setDocumentBaseUri(
+                            serviceArchiveFile.getCanonicalFile().toURI().toString());
+
                 } else if (axisServiceBuilder instanceof WSDL20ToAllAxisServicesBuilder) {
                     // trying to use the jar scheme as the base URI. I think this can be used to handle
                     // wsdl 1.1 as well without using a custom URI resolver. Need to look at it later.
@@ -224,6 +238,11 @@
                 if (serviceArchiveFile != null) {
                     axisServiceBuilder.setBaseUri(
                             serviceArchiveFile.getParentFile().toURI().toString());
+
+                    if (axisServiceBuilder instanceof WSDL11ToAllAxisServicesBuilder) {
+                        ((WSDL11ToAllAxisServicesBuilder) axisServiceBuilder).setDocumentBaseUri(
+                                serviceArchiveFile.getCanonicalFile().toURI().toString());
+                    }
                 }
             }
             if (axisServiceBuilder instanceof WSDL11ToAllAxisServicesBuilder) {
@@ -236,6 +255,11 @@
             if (log.isDebugEnabled()) {
                 log.debug(axisFault);
             }
+        } catch (IOException ioex) {
+            log.info("Trouble processing wsdl file :" + ioex.getMessage());
+            if (log.isDebugEnabled()) {
+                log.debug(ioex);
+            }
         }
         return null;
     }
@@ -326,6 +350,7 @@
                                     equals(documentElementNS.getNamespaceURI())) {
                                 wsdlToAxisServiceBuilder = new WSDL11ToAllAxisServicesBuilder(
                                         new ByteArrayInputStream(out.toByteArray()));
+                                ((WSDL11ToAxisServiceBuilder) wsdlToAxisServiceBuilder).setDocumentBaseUri(entryName);
                             } else {
                                 throw new DeploymentException(Messages.getMessage("invalidWSDLFound"));
                             }
@@ -384,7 +409,7 @@
                     equals(documentElementNS.getNamespaceURI())) {
                 wsdlToAxisServiceBuilder = new WSDL11ToAllAxisServicesBuilder(
                         new ByteArrayInputStream(out.toByteArray()));
-                wsdlToAxisServiceBuilder.setCustomWSLD4JResolver(new WarBasedWSDLLocator(wsdlUrl,
+                wsdlToAxisServiceBuilder.setCustomWSDLResolver(new WarBasedWSDLLocator(wsdlUrl,
                                                                                          loader,
                                                                                          new ByteArrayInputStream(
                                                                                                  out.toByteArray())));
@@ -423,6 +448,8 @@
                             equals(documentElementNS.getNamespaceURI())) {
                         in2 = new FileInputStream(file1);
                         wsdlToAxisServiceBuilder = new WSDL11ToAllAxisServicesBuilder(in2);
+                        ((WSDL11ToAxisServiceBuilder) wsdlToAxisServiceBuilder).setDocumentBaseUri(file1.toURI()
+                                                                                                        .toString());
                     } else {
                         throw new DeploymentException(Messages.getMessage("invalidWSDLFound"));
                     }

Modified: webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/description/AxisService.java
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/description/AxisService.java?rev=584248&r1=584247&r2=584248&view=diff
==============================================================================
--- webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/description/AxisService.java (original)
+++ webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/description/AxisService.java Fri Oct 12 12:53:43 2007
@@ -1626,6 +1626,9 @@
             WSDLReader reader = WSDLFactory.newInstance().newWSDLReader();
             reader.setFeature("javax.wsdl.importDocuments", true);
             Definition wsdlDefinition = reader.readWSDL(getBaseURI(wsdlURL.toString()), doc);
+            if (wsdlDefinition != null) {
+                wsdlDefinition.setDocumentBaseURI(getDocumentURI(wsdlURL.toString()));
+            }
             return createClientSideAxisService(wsdlDefinition, wsdlServiceName, portName, options);
         } catch (IOException e) {
             log.error(e.getMessage(), e);
@@ -1650,6 +1653,15 @@
             }
             String uriFragment = currentURI.substring(0, currentURI.lastIndexOf("/"));
             return uriFragment + (uriFragment.endsWith("/") ? "" : "/");
+        } catch (IOException e) {
+            return null;
+        }
+    }
+
+    private static String getDocumentURI(String currentURI)  {
+        try {
+            File file = new File(currentURI);
+            return file.getCanonicalFile().toURI().toString();
         } catch (IOException e) {
             return null;
         }

Modified: webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/description/WSDL11ToAxisServiceBuilder.java
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/description/WSDL11ToAxisServiceBuilder.java?rev=584248&r1=584247&r2=584248&view=diff
==============================================================================
--- webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/description/WSDL11ToAxisServiceBuilder.java (original)
+++ webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/description/WSDL11ToAxisServiceBuilder.java Fri Oct 12 12:53:43 2007
@@ -31,6 +31,7 @@
 import org.apache.axis2.wsdl.SOAPHeaderMessage;
 import org.apache.axis2.wsdl.WSDLConstants;
 import org.apache.axis2.wsdl.WSDLUtil;
+import org.apache.axis2.wsdl.util.WSDLDefinitionWrapper;
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 import org.apache.neethi.Constants;
@@ -129,8 +130,9 @@
     private static final String BINDING_OPERATION_OUTPUT = "Binding.Operation.Output";
 
     protected Definition wsdl4jDefinition = null;
+    protected String     wsdlBaseDocumentURI = null;
 
-    private WSDLLocator customWSLD4JResolver;
+    private WSDLLocator customWSDLResolver;
 
     public static final String RPC_STYLE = "rpc";
 
@@ -233,31 +235,65 @@
     }
 
     /**
-     * sets a custem WSDL4J locator
+     * @deprecated
+     * @see setCustomWSDLResolver
+     */
+    public void setCustomWSLD4JResolver(WSDLLocator customResolver) {
+        setCustomWSDLResolver(customResolver);
+    }
+
+
+    /**
+     * sets a custom WSDL locator
+     *
+     * @param customWSDLResolver
+     */
+    public void setCustomWSDLResolver(WSDLLocator customResolver) {
+        this.customWSDLResolver = customResolver;
+        setDocumentBaseUri(this.customWSDLResolver.getBaseURI());
+    }
+
+
+    /**
+     * Sets the URI to the base document associated with the WSDL definition.
+     * This identifies the origin of the Definition and allows the 
+     * Definition to be reloaded.  Note that this is the URI of the base
+     * document, not the imports.
+     *
+     * @param baseUri
+     */
+    public void setDocumentBaseUri(String baseUri) {
+        if (wsdl4jDefinition != null) {
+            wsdl4jDefinition.setDocumentBaseURI(baseUri);
+        }
+        wsdlBaseDocumentURI = baseUri;
+    }
+
+    /**
+     * Gets the URI to the base document associated with the WSDL definition.
+     * This identifies the origin of the Definition and allows the 
+     * Definition to be reloaded.  Note that this is the URI of the base
+     * document, not the imports.
      *
-     * @param customWSLD4JResolver
      */
-    public void setCustomWSLD4JResolver(WSDLLocator customWSLD4JResolver) {
-        this.customWSLD4JResolver = customWSLD4JResolver;
+    public String getDocumentBaseUri() {
+        return wsdlBaseDocumentURI;
     }
 
+
+
+
     /**
-     * populates a given service This is the only publicly accessible method in
-     * this class
+     * Populates a given service. 
      *
      * @throws AxisFault
      */
     public AxisService populateService() throws AxisFault {
         try {
             setup();
-            // Setting wsdl4jdefintion to axisService , so if some one want
-            // to play with it he can do that by getting the parameter
-            Parameter wsdlDefinitionParameter = new Parameter();
-            wsdlDefinitionParameter.setName(WSDLConstants.WSDL_4_J_DEFINITION);
-            wsdlDefinitionParameter.setValue(wsdl4jDefinition);
-            axisService.addParameter(wsdlDefinitionParameter);
-            axisService.setWsdlFound(true);
-            axisService.setCustomWsdl(true);
+
+            // NOTE: set the axisService with the Parameter for the WSDL 
+            // Definition after the rest of the work
 
             if (wsdl4jDefinition == null) {
                 return null;
@@ -309,6 +345,26 @@
             populateEndpoints(binding, wsdl4jService, portType);
             processPoliciesInDefintion(wsdl4jDefinition);
             axisService.getPolicyInclude().setPolicyRegistry(registry);
+
+
+            // Setting wsdl4jdefintion to the axisService parameter include list, 
+            // so if someone needs to use the definition directly, 
+            // he can do that by getting the parameter 
+            Parameter wsdlDefinitionParameter = new Parameter();
+            wsdlDefinitionParameter.setName(WSDLConstants.WSDL_4_J_DEFINITION);
+
+            if (!(wsdl4jDefinition instanceof WSDLDefinitionWrapper)) {
+                WSDLDefinitionWrapper wrapper = new WSDLDefinitionWrapper(wsdl4jDefinition);
+                wsdlDefinitionParameter.setValue(wrapper);
+            } else {
+                wsdlDefinitionParameter.setValue(wsdl4jDefinition);
+            }
+
+            axisService.addParameter(wsdlDefinitionParameter);
+            axisService.setWsdlFound(true);
+            axisService.setCustomWsdl(true);
+
+
             return axisService;
 
         } catch (WSDLException e) {
@@ -2071,9 +2127,13 @@
         // switch off the verbose mode for all usecases
         reader.setFeature(JAVAX_WSDL_VERBOSE_MODE_KEY, false);
 
+        Definition def;
         // if the custem resolver is present then use it
-        if (customWSLD4JResolver != null) {
-            return reader.readWSDL(customWSLD4JResolver);
+        if (customWSDLResolver != null) {
+            // make sure the wsdl definition has the URI for the base document set
+            def = reader.readWSDL(customWSDLResolver);
+            def.setDocumentBaseURI(customWSDLResolver.getBaseURI());
+            return def;
         } else {
             Document doc;
             try {
@@ -2089,7 +2149,9 @@
                 throw new WSDLException(WSDLException.INVALID_WSDL, "IO Error",
                                         e);
             }
-            return reader.readWSDL(getBaseUri(), doc);
+            def = reader.readWSDL(getBaseUri(), doc);
+            def.setDocumentBaseURI(getDocumentBaseUri());
+            return def;
         }
     }
 

Modified: webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/description/WSDLToAxisServiceBuilder.java
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/description/WSDLToAxisServiceBuilder.java?rev=584248&r1=584247&r2=584248&view=diff
==============================================================================
--- webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/description/WSDLToAxisServiceBuilder.java (original)
+++ webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/description/WSDLToAxisServiceBuilder.java Fri Oct 12 12:53:43 2007
@@ -194,10 +194,24 @@
         return "ns" + nsCount++;
     }
 
+    /**
+     * Gets the URI associated with the base document
+     * for the WSDL definition.  Note that this URI
+     * is for the base document, not the imports.
+     * 
+     * @return The URI as a String
+     */
     public String getBaseUri() {
         return baseUri;
     }
 
+    /**
+     * Sets the URI associated with the base document
+     * for the WSDL definition.  Note that this URI
+     * is for the base document, not the imports.
+     * 
+     * @param baseUri  The URI as a String
+     */
     public void setBaseUri(String baseUri) {
         this.baseUri = baseUri;
     }

Modified: webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/util/Counter.java
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/util/Counter.java?rev=584248&r1=584247&r2=584248&view=diff
==============================================================================
--- webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/util/Counter.java (original)
+++ webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/util/Counter.java Fri Oct 12 12:53:43 2007
@@ -22,12 +22,32 @@
 import java.lang.reflect.InvocationTargetException;
 import java.lang.reflect.Method;
 
-// Counter uses java.util.concurrent.atomic.AtomicLong if present,
-// else falls back to the backport version
+/**
+ * This class provides a simple zero-based counter with synchronized access.
+ */
 public class Counter {
+
     private long value = 0L;
 
     public synchronized long incrementAndGet() {
         return ++value;
     }
+
+    public synchronized long decrementAndGet() {
+        if (value > 0L) {
+            return --value;
+        }
+        else {
+            return value;
+        }
+    }
+
+    public synchronized void reset() {
+        value = 0L;
+    }
+
+    public synchronized long get() {
+        return value;
+    }
+
 }

Added: webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/wsdl/util/WSDLDefinitionWrapper.java
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/wsdl/util/WSDLDefinitionWrapper.java?rev=584248&view=auto
==============================================================================
--- webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/wsdl/util/WSDLDefinitionWrapper.java (added)
+++ webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/wsdl/util/WSDLDefinitionWrapper.java Fri Oct 12 12:53:43 2007
@@ -0,0 +1,508 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.axis2.wsdl.util;
+
+
+import org.apache.axis2.Constants;
+import org.apache.axis2.engine.AxisConfiguration;
+import org.apache.axis2.description.Parameter;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+
+import javax.wsdl.Binding;
+import javax.wsdl.BindingFault;
+import javax.wsdl.BindingInput;
+import javax.wsdl.BindingOperation;
+import javax.wsdl.BindingOutput;
+import javax.wsdl.Definition;
+import javax.wsdl.Fault;
+import javax.wsdl.Import;
+import javax.wsdl.Input;
+import javax.wsdl.Message;
+import javax.wsdl.Operation;
+import javax.wsdl.Output;
+import javax.wsdl.Part;
+import javax.wsdl.Port;
+import javax.wsdl.PortType;
+import javax.wsdl.Service;
+import javax.wsdl.Types;
+import javax.wsdl.WSDLException;
+import javax.wsdl.extensions.ExtensibilityElement;
+import javax.wsdl.extensions.ExtensionRegistry;
+import javax.wsdl.factory.WSDLFactory;
+import javax.wsdl.xml.WSDLReader;
+import javax.xml.namespace.QName;
+
+import java.io.IOException;
+import java.net.URI;
+import java.net.URL;
+import java.util.Enumeration;
+import java.util.List;
+import java.util.Map;
+
+
+/**
+ * There are cases where a WSDL definition is kept in memory
+ * in case it needs to be accessed during runtime.  In situations where 
+ * there are lots of WSDL definitions or big WSDLs, the memory footprint can be 
+ * huge.
+ *
+ * This class provides support for processing a WSDL4J definition
+ * with a lower memory footprint.  This is useful for certain
+ * environments.
+ *
+ * This class makes the decision on which implementation to use
+ * to reduce memory footprint.  This allows other implementations
+ * to be used for specific environments without adding lots of extra
+ * overhead to every environment.
+ *
+ */
+public class WSDLDefinitionWrapper implements Definition {
+
+    private static final Log log = LogFactory.getLog(WSDLDefinitionWrapper.class);
+    private static final boolean isDebugEnabled = log.isDebugEnabled();
+    private static final String myClassName = "WSDLDefinitionWrapper";
+
+    // javax.wsdl.Definition implements java.io.Serializable
+    static final long serialVersionUID = -2788807375814097409L;
+
+
+    // the setting used to indicate whether the in-memory copy of the 
+    // WSDL definition should be manipulated to reduce memory footprint
+    private boolean reduceWSDLMemoryCache = false;
+
+    // the optional setting used to specify which type of reduction to use
+    private int reduceWSDLMemoryType = 0;
+
+
+
+    // the wrapper implementation to use 
+    private WSDLWrapperImpl wrapperImpl = null;
+
+
+    //-------------------------------------------------------------------------
+    // constructors
+    //-------------------------------------------------------------------------
+
+    /**
+     * Constructor
+     * 
+     * @param def    The WSDL Definition
+     */
+    public WSDLDefinitionWrapper(Definition def) {
+        prepare(def, null);
+    }
+
+
+    /**
+     * Constructor
+     * 
+     * @param def    The WSDL Definition
+     * @param wURL   The URL for the wsdl
+     */
+    public WSDLDefinitionWrapper(Definition def, URL wURL) {
+        prepare(def, wURL);
+    }
+
+
+    /**
+     * Constructor
+     * 
+     * @param def    The WSDL Definition
+     * @param wURL   The URL for the wsdl
+     * @param limitInMemory  The setting indicating whether the in-memory WSDL copy
+     *                       should be manipulated to reduce memory footprint
+     */
+    public WSDLDefinitionWrapper(Definition def, URL wURL, boolean limitInMemory) {
+        reduceWSDLMemoryCache = limitInMemory;
+        prepare(def, wURL);
+    }
+
+
+    /**
+     * Constructor
+     * 
+     * @param def    The WSDL Definition
+     * @param wURL   The URL for the wsdl
+     * @param limitType  The setting indicating which reduction technique
+     *                   to use 
+     */
+    public WSDLDefinitionWrapper(Definition def, URL wURL, int limitType) {
+        reduceWSDLMemoryCache = true;
+        reduceWSDLMemoryType = limitType;
+        prepare(def, wURL);
+    }
+
+
+    /**
+     * Constructor
+     * 
+     * @param def    The WSDL Definition
+     * @param wURL   The URL for the wsdl
+     * @param axisCfg  The AxisConfiguration object, to be used to get configuration settings  
+     */
+    public WSDLDefinitionWrapper(Definition def, URL wURL, AxisConfiguration axisCfg) {
+
+        // determine what the setting for the memory optimization is
+        Parameter param = axisCfg.getParameter(Constants.Configuration.REDUCE_WSDL_MEMORY_CACHE);
+                
+        reduceWSDLMemoryCache = 
+                param != null && ((String) param.getValue()).equalsIgnoreCase("true");
+
+
+        param = axisCfg.getParameter(Constants.Configuration.REDUCE_WSDL_MEMORY_TYPE);
+                
+        if (param != null) {
+            String value = (String) param.getValue();
+
+            if (value != null) {
+                Integer i = new Integer(value);
+                reduceWSDLMemoryType = i.intValue(); 
+            }
+        }
+
+        prepare(def, wURL);
+    }
+
+
+
+    /**
+     * Initialize the wsdl definition wrapper
+     * 
+     * @param def    The WSDL4J definition
+     * @param wURL   The URL where the WSDL is obtained
+     */
+    private void prepare(Definition def, URL wURL) {
+        
+        if (reduceWSDLMemoryCache) {
+
+            // if the type is specified, then use it
+            // otherwise, default to the serialization technique
+
+            if (reduceWSDLMemoryType == 2) {
+                // a wrapper implementation that uses release & reload on the 
+                // underlying WSDL4J object
+                // this would be desirable for those environments where 
+                // many of the WSDL definitions are not serializable 
+                wrapperImpl = new WSDLWrapperReloadImpl(def, wURL);
+            }
+            else {
+                // a wrapper implementation that uses serialization to save the  
+                // underlying WSDL4J object
+                wrapperImpl = new WSDLWrapperSaveImpl(def, wURL);
+            }
+        }
+        else {
+            // a wrapper implementation that is just a passthrough to the 
+            // underlying WSDL4J object
+            wrapperImpl = new WSDLWrapperBasicImpl(def, wURL);
+        }
+
+        wrapperImpl.releaseResources();
+    }
+
+
+    //-------------------------------------------------------------------------
+    // public WSDLDefinitionWrapper methods
+    //-------------------------------------------------------------------------
+
+    /*
+     * Returns the WSDL4J Definition object that is being wrapped
+     */
+    public Definition getUnwrappedDefinition() {
+
+        return wrapperImpl.getUnwrappedDefinition();
+    }
+
+
+    //-------------------------------------------------------------------------
+    // javax.wsdl.Defintion interface methods
+    //-------------------------------------------------------------------------
+
+    public void setDocumentBaseURI(String d) {
+        // Set the URI of the base document for the Definition.
+        // This identifies the origin of the Definition.
+        // Note that this is the URI of the base document, not the imports.
+
+        wrapperImpl.setDocumentBaseURI(d);
+    }
+
+    public String getDocumentBaseURI() {
+        // Get the URI of the base document for the Definition.
+        // This identifies the origin of the Definition.
+        // Note that this is the URI of the base document, not the imports.
+
+        return wrapperImpl.getDocumentBaseURI();
+    }
+
+    public void setQName(QName n) {
+        wrapperImpl.setQName(n);
+    }
+
+    public QName getQName() {
+        return wrapperImpl.getQName();
+    }
+
+    public void setTargetNamespace(String t) {
+        wrapperImpl.setTargetNamespace(t);
+    }
+
+    public String getTargetNamespace() {
+        return wrapperImpl.getTargetNamespace();
+    }
+
+    public void addNamespace(String prefix, String namespaceURI) {
+        wrapperImpl.addNamespace(prefix, namespaceURI);
+    }
+
+    public String removeNamespace(String prefix) {
+        return wrapperImpl.removeNamespace(prefix);
+    }
+
+    public String getNamespace(String prefix) {
+        return wrapperImpl.getNamespace(prefix);
+    }
+
+    public String getPrefix(String namespaceURI) {
+        return wrapperImpl.getPrefix(namespaceURI);
+    }
+
+    public Map getNamespaces() {
+        return wrapperImpl.getNamespaces();
+    }
+
+    public List getNativeAttributeNames() {
+        return wrapperImpl.getNativeAttributeNames();
+    }
+
+    public void setTypes(Types types) {
+        wrapperImpl.setTypes(types);
+    }
+
+
+    public Types getTypes() {
+        return wrapperImpl.getTypes();
+    }
+
+    public void addImport(Import importDef) {
+        wrapperImpl.addImport(importDef);
+    }
+
+    public Import removeImport(Import importDef) {
+        return wrapperImpl.removeImport(importDef);
+    }
+
+    public List getImports(String namespaceURI) {
+        return wrapperImpl.getImports(namespaceURI);
+    }
+
+    public Map getImports() {
+        return wrapperImpl.getImports();
+    }
+
+    public void addMessage(Message message) {
+        wrapperImpl.addMessage(message);
+    }
+
+    public Message getMessage(QName name) {
+        return wrapperImpl.getMessage(name);
+    }
+
+    public Message removeMessage(QName name) {
+        return wrapperImpl.removeMessage(name);
+    }
+
+    public Map getMessages() {
+        return wrapperImpl.getMessages();
+    }
+
+    public void addBinding(Binding binding) {
+        wrapperImpl.addBinding(binding);
+    }
+
+    public Binding getBinding(QName name) {
+        return wrapperImpl.getBinding(name);
+    }
+
+    public Binding removeBinding(QName name) {
+        return wrapperImpl.removeBinding(name);
+    }
+
+    public Map getBindings() {
+        return wrapperImpl.getBindings();
+    }
+
+    public Map getAllBindings() {
+        return wrapperImpl.getAllBindings();
+    }
+
+    public void addPortType(PortType portType) {
+        wrapperImpl.addPortType(portType);
+    }
+
+    public PortType getPortType(QName name) {
+        return wrapperImpl.getPortType(name);
+    }
+
+    public PortType removePortType(QName name) {
+        return wrapperImpl.removePortType(name);
+    }
+
+    public Map getPortTypes() {
+        return wrapperImpl.getPortTypes();
+    }
+
+    public Map getAllPortTypes() {
+        return wrapperImpl.getAllPortTypes();
+    }
+
+    public void addService(Service service) {
+        wrapperImpl.addService(service);
+    }
+
+    public Service getService(QName name) {
+        return wrapperImpl.getService(name);
+    }
+
+    public Service removeService(QName name) {
+        return wrapperImpl.removeService(name);
+    }
+
+    public Map getServices() {
+        return wrapperImpl.getServices();
+    }
+
+    public Map getAllServices() {
+        return wrapperImpl.getAllServices();
+    }
+
+    public void setDocumentationElement(org.w3c.dom.Element docEl) {
+        wrapperImpl.setDocumentationElement(docEl);
+    }
+
+    public org.w3c.dom.Element getDocumentationElement() {
+        return  wrapperImpl.getDocumentationElement();
+    }
+
+    public void addExtensibilityElement(ExtensibilityElement extElement) {
+        wrapperImpl.addExtensibilityElement(extElement);
+    }
+
+    public List getExtensibilityElements() {
+        return wrapperImpl.getExtensibilityElements();
+    }
+
+    public Binding createBinding() {
+        return wrapperImpl.createBinding();
+    }
+
+    public BindingFault createBindingFault() {
+        return wrapperImpl.createBindingFault();
+    }
+
+    public BindingInput createBindingInput() {
+        return wrapperImpl.createBindingInput();
+    }
+
+    public BindingOperation createBindingOperation() {
+        return wrapperImpl.createBindingOperation();
+    }
+
+    public BindingOutput createBindingOutput() {
+        return wrapperImpl.createBindingOutput();
+    }
+
+    public Fault createFault() {
+        return wrapperImpl.createFault();
+    }
+
+    public Import createImport() {
+        return wrapperImpl.createImport();
+    }
+
+    public Input createInput() {
+        return wrapperImpl.createInput();
+    }
+
+    public Message createMessage() {
+        return wrapperImpl.createMessage();
+    }
+
+    public Operation createOperation() {
+        return wrapperImpl.createOperation();
+    }
+
+    public Output createOutput() {
+        return wrapperImpl.createOutput();
+    }
+
+    public Part createPart() {
+        return wrapperImpl.createPart();
+    }
+
+    public Port createPort() {
+        return wrapperImpl.createPort();
+    }
+
+    public PortType createPortType() {
+        return wrapperImpl.createPortType();
+    }
+
+    public Service createService() {
+        return wrapperImpl.createService();
+    }
+
+    public Types createTypes() {
+        return wrapperImpl.createTypes();
+    }
+
+    public void setExtensionRegistry(ExtensionRegistry extReg) {
+        wrapperImpl.setExtensionRegistry(extReg);
+    }
+
+    public ExtensionRegistry getExtensionRegistry() {
+        return wrapperImpl.getExtensionRegistry();
+    }
+
+    public String toString() {
+        return wrapperImpl.toString();
+    }
+
+    //-------------------------------------------------------------------------
+    // other AbstractWSDLElement methods
+    //-------------------------------------------------------------------------
+
+    public ExtensibilityElement removeExtensibilityElement(ExtensibilityElement extElement) {
+        return wrapperImpl.removeExtensibilityElement(extElement);
+    }
+
+    public java.lang.Object getExtensionAttribute(QName name) {
+        return wrapperImpl.getExtensionAttribute(name);
+    }
+
+    public Map getExtensionAttributes() {
+        return wrapperImpl.getExtensionAttributes();
+    }
+
+    public void setExtensionAttribute(QName name, java.lang.Object value) {
+        wrapperImpl.setExtensionAttribute(name, value);
+    }
+
+}

Added: webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/wsdl/util/WSDLWrapperBasicImpl.java
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/wsdl/util/WSDLWrapperBasicImpl.java?rev=584248&view=auto
==============================================================================
--- webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/wsdl/util/WSDLWrapperBasicImpl.java (added)
+++ webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/wsdl/util/WSDLWrapperBasicImpl.java Fri Oct 12 12:53:43 2007
@@ -0,0 +1,841 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.axis2.wsdl.util;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+
+import javax.wsdl.Binding;
+import javax.wsdl.BindingFault;
+import javax.wsdl.BindingInput;
+import javax.wsdl.BindingOperation;
+import javax.wsdl.BindingOutput;
+import javax.wsdl.Definition;
+import javax.wsdl.Fault;
+import javax.wsdl.Import;
+import javax.wsdl.Input;
+import javax.wsdl.Message;
+import javax.wsdl.Operation;
+import javax.wsdl.Output;
+import javax.wsdl.Part;
+import javax.wsdl.Port;
+import javax.wsdl.PortType;
+import javax.wsdl.Service;
+import javax.wsdl.Types;
+import javax.wsdl.WSDLException;
+import javax.wsdl.extensions.ExtensibilityElement;
+import javax.wsdl.extensions.ExtensionRegistry;
+import javax.wsdl.factory.WSDLFactory;
+import javax.wsdl.xml.WSDLReader;
+import javax.xml.namespace.QName;
+
+import java.io.IOException;
+import java.net.URI;
+import java.net.URL;
+import java.util.Enumeration;
+import java.util.List;
+import java.util.Map;
+
+
+/**
+ * This class provides support for processing a WSDL4J definition
+ * with a lower memory footprint.  This is useful for certain
+ * environments.
+ */
+public class WSDLWrapperBasicImpl implements WSDLWrapperImpl {
+
+    private static final Log log = LogFactory.getLog(WSDLWrapperBasicImpl.class);
+    private static final boolean isDebugEnabled = log.isDebugEnabled();
+    private static final String myClassName = "WSDLWrapperBasicImpl";
+
+    // javax.wsdl.Definition implements java.io.Serializable
+    static final long serialVersionUID = -2788807375814097409L;
+
+    // the wsdl4j wsdl definition object that is being wrapped
+    private Definition wsdlDefinition = null;
+
+    // the location of the base document used in the wsdl4j definition
+    private URL wsdlURL = null;
+    private String wsdlExplicitURI = null;
+    private String wsdlDocumentBaseURI = null;
+
+    //-------------------------------------------------------------------------
+    // constructors
+    //-------------------------------------------------------------------------
+
+    /**
+     * Constructor
+     * 
+     * @param def    The WSDL Definition
+     */
+    public WSDLWrapperBasicImpl(Definition def) {
+        prepare(def, null);
+    }
+
+
+    /**
+     * Constructor
+     * 
+     * @param def    The WSDL Definition
+     * @param wURL   The URL for the wsdl
+     */
+    public WSDLWrapperBasicImpl(Definition def, URL wURL) {
+        prepare(def, wURL);
+    }
+
+
+    /**
+     * Initialize the wsdl definition wrapper
+     * 
+     * @param def    The WSDL4J definition
+     * @param wURL   The URL where the WSDL is obtained
+     */
+    private void prepare(Definition def, URL wURL) {
+        
+        wsdlDefinition = def;
+        wsdlURL = wURL;
+    }
+
+
+    //-------------------------------------------------------------------------
+    // public WSDLWrapperImpl methods
+    //-------------------------------------------------------------------------
+
+    /*
+     * Releases objects to reduce memory footprint.
+     */
+    public void releaseResources() {
+        // placeholder
+    }
+
+
+    /*
+     * Returns the WSDL4J Definition object that is being wrapped
+     */
+    public Definition getUnwrappedDefinition() {
+        Definition def;
+
+        if ((wsdlDefinition != null) &&
+            (wsdlDefinition instanceof WSDLDefinitionWrapper)) {
+            def = ((WSDLDefinitionWrapper) wsdlDefinition).getUnwrappedDefinition();
+        } else {
+            def = wsdlDefinition;
+        }
+
+        return def;
+    }
+
+
+    /**
+     * Sets the WSDL4J Definition object that is being wrapped
+     *
+     * @param d  the WSDL4J Definition object
+     */
+    public void setDefinitionToWrap(Definition d) {
+        wsdlDefinition = d;
+    }
+
+
+    /**
+     * Sets the location for the WSDL4J Definition object that is being wrapped
+     */
+    public void setWSDLLocation(String uriLocation) {
+        if (uriLocation != null) {
+            try {
+                wsdlURL = new URL(uriLocation);
+            }
+            catch (Exception e) {
+                // todo
+            }
+        }
+    }
+
+
+    /**
+     * Gets the location for the WSDL4J Definition object that is being wrapped
+     */
+    public String getWSDLLocation() {
+        if (wsdlURL != null) {
+            return wsdlURL.toString();
+        }
+        else {
+            return null;
+        }
+    }
+
+
+    /**
+     * Closes the use of the wrapper implementation and allows 
+     * internal resources to be released.
+     */
+    public void close() {
+        // nothing to do for this implementation
+    }
+
+
+    //-------------------------------------------------------------------------
+    // javax.wsdl.Defintion interface methods
+    //-------------------------------------------------------------------------
+
+    public void setDocumentBaseURI(String d) {
+
+        // Set the URI of the base document for the Definition.
+        // This identifies the origin of the Definition.
+        // Note that this is the URI of the base document, not the imports.
+
+        if (isDebugEnabled) {
+            log.debug(myClassName + ".setDocumentBaseURI(" + d + ")");
+        }
+
+        if (wsdlDefinition != null) {
+            wsdlDefinition.setDocumentBaseURI(d);
+        }
+    }
+
+    public String getDocumentBaseURI() {
+
+        // Get the URI of the base document for the Definition.
+        // This identifies the origin of the Definition.
+        // Note that this is the URI of the base document, not the imports.
+
+        if (isDebugEnabled) {
+            log.debug(myClassName + ".getDocumentBaseURI()");
+        }
+        if (wsdlDefinition != null) {
+            return wsdlDefinition.getDocumentBaseURI();
+        }
+        return null;
+    }
+
+    public void setQName(QName n) {
+        if (isDebugEnabled) {
+            log.debug(myClassName + ".setQName(" + n + ")");
+        }
+        if (wsdlDefinition != null) {
+            wsdlDefinition.setQName(n);
+        }
+    }
+
+    public QName getQName() {
+        if (isDebugEnabled) {
+            log.debug(myClassName + ".getQName()");
+        }
+        if (wsdlDefinition != null) {
+            return wsdlDefinition.getQName();
+        }
+        return null;
+    }
+
+    public void setTargetNamespace(String t) {
+        if (isDebugEnabled) {
+            log.debug(myClassName + ".setTargetNamespace(" + t + ")");
+        }
+        if (wsdlDefinition != null) {
+            wsdlDefinition.setTargetNamespace(t);
+        }
+    }
+
+    public String getTargetNamespace() {
+        if (isDebugEnabled) {
+            log.debug(myClassName + ".getTargetNamespace()");
+        }
+        if (wsdlDefinition != null) {
+            return wsdlDefinition.getTargetNamespace();
+        }
+        return null;
+    }
+
+    public void addNamespace(String prefix, String namespaceURI) {
+        if (isDebugEnabled) {
+            log.debug(myClassName + ".addNamespace(" + prefix + ", " + namespaceURI + ")");
+        }
+        if (wsdlDefinition != null) {
+            wsdlDefinition.addNamespace(prefix, namespaceURI);
+        }
+    }
+
+    public String removeNamespace(String prefix) {
+        if (isDebugEnabled) {
+            log.debug(myClassName + ".removeNamespace(" + prefix + ")");
+        }
+        if (wsdlDefinition != null) {
+            return wsdlDefinition.removeNamespace(prefix);
+        }
+        return null;
+    }
+
+    public String getNamespace(String prefix) {
+        if (isDebugEnabled) {
+            log.debug(myClassName + ".getNamespace(" + prefix + ")");
+        }
+        if (wsdlDefinition != null) {
+            return wsdlDefinition.getNamespace(prefix);
+        }
+        return null;
+    }
+
+    public String getPrefix(String namespaceURI) {
+        if (isDebugEnabled) {
+            log.debug(myClassName + ".getPrefix(" + namespaceURI + ")");
+        }
+        if (wsdlDefinition != null) {
+            return wsdlDefinition.getPrefix(namespaceURI);
+        }
+        return null;
+    }
+
+    public Map getNamespaces() {
+        if (isDebugEnabled) {
+            log.debug(myClassName + ".getNamespaces()");
+        }
+        if (wsdlDefinition != null) {
+            return wsdlDefinition.getNamespaces();
+        }
+        return null;
+    }
+
+    public List getNativeAttributeNames() {
+        if (isDebugEnabled) {
+            log.debug(myClassName + ".getNativeAttributeNames()");
+        }
+        if (wsdlDefinition != null) {
+            return wsdlDefinition.getNativeAttributeNames();
+        }
+        return null;
+    }
+
+    public void setTypes(Types types) {
+        if (isDebugEnabled) {
+            log.debug(myClassName + ".setTypes()");
+        }
+        if (wsdlDefinition != null) {
+            wsdlDefinition.setTypes(types);
+        } 
+    }
+
+
+    public Types getTypes() {
+        if (isDebugEnabled) {
+            log.debug(myClassName + ".getTypes()");
+        }
+        if (wsdlDefinition != null) {
+            return wsdlDefinition.getTypes();
+        }
+        return null;
+    }
+
+    public void addImport(Import importDef) {
+        if (isDebugEnabled) {
+            log.debug(myClassName + ".addImport(" + importDef + ")");
+        }
+        if (wsdlDefinition != null) {
+            wsdlDefinition.addImport(importDef);
+        }
+    }
+
+    public Import removeImport(Import importDef) {
+        if (isDebugEnabled) {
+            log.debug(myClassName + ".removeImport(" + importDef + ")");
+        }
+        if (wsdlDefinition != null) {
+            return wsdlDefinition.removeImport(importDef);
+        }
+        return null;
+    }
+
+    public List getImports(String namespaceURI) {
+        if (isDebugEnabled) {
+            log.debug(myClassName + ".getImports(" + namespaceURI + ")");
+        }
+        if (wsdlDefinition != null) {
+            return wsdlDefinition.getImports(namespaceURI);
+        }
+        return null;
+    }
+
+    public Map getImports() {
+        if (isDebugEnabled) {
+            log.debug(myClassName + ".getImports()");
+        }
+        if (wsdlDefinition != null) {
+            return wsdlDefinition.getImports();
+        }
+        return null;
+    }
+
+    public void addMessage(Message message) {
+        if (isDebugEnabled) {
+            log.debug(myClassName + ".addMessage(" + message + ")");
+        }
+        if (wsdlDefinition != null) {
+            wsdlDefinition.addMessage(message);
+        }
+    }
+
+    public Message getMessage(QName name) {
+        if (isDebugEnabled) {
+            log.debug(myClassName + ".getMessage(" + name + ")");
+        }
+        if (wsdlDefinition != null) {
+            return wsdlDefinition.getMessage(name);
+        }
+        return null;
+    }
+
+    public Message removeMessage(QName name) {
+        if (isDebugEnabled) {
+            log.debug(myClassName + ".removeMessage(" + name + ")");
+        }
+        if (wsdlDefinition != null) {
+            return wsdlDefinition.removeMessage(name);
+        }
+        return null;
+    }
+
+    public Map getMessages() {
+        if (isDebugEnabled) {
+            log.debug(myClassName + ".getMessages()");
+        }
+        if (wsdlDefinition != null) {
+            return wsdlDefinition.getMessages();
+        }
+        return null;
+    }
+
+    public void addBinding(Binding binding) {
+        if (isDebugEnabled) {
+            log.debug(myClassName + ".addBinding(" + binding + ")");
+        }
+        if (wsdlDefinition != null) {
+            wsdlDefinition.addBinding(binding);
+        }
+    }
+
+    public Binding getBinding(QName name) {
+        if (isDebugEnabled) {
+            log.debug(myClassName + ".getBinding(" + name + ")");
+        }
+        if (wsdlDefinition != null) {
+            return wsdlDefinition.getBinding(name);
+        }
+        return null;
+    }
+
+    public Binding removeBinding(QName name) {
+        if (isDebugEnabled) {
+            log.debug(myClassName + ".removeBinding(" + name + ")");
+        }
+        if (wsdlDefinition != null) {
+            return wsdlDefinition.removeBinding(name);
+        }
+        return null;
+    }
+
+    public Map getBindings() {
+        if (isDebugEnabled) {
+            log.debug(myClassName + ".getBindings()");
+        }
+        if (wsdlDefinition != null) {
+            return wsdlDefinition.getBindings();
+        }
+        return null;
+    }
+
+    public Map getAllBindings() {
+        if (isDebugEnabled) {
+            log.debug(myClassName + ".getAllBindings()");
+        }
+        if (wsdlDefinition != null) {
+            return wsdlDefinition.getAllBindings();
+        }
+        return null;
+    }
+
+    public void addPortType(PortType portType) {
+        if (isDebugEnabled) {
+            log.debug(myClassName + ".addPortType(" + portType + ")");
+        }
+        if (wsdlDefinition != null) {
+            wsdlDefinition.addPortType(portType);
+        }
+    }
+
+    public PortType getPortType(QName name) {
+        if (isDebugEnabled) {
+            log.debug(myClassName + ".getPortType(" + name + ")");
+        }
+        if (wsdlDefinition != null) {
+            return wsdlDefinition.getPortType(name);
+        }
+        return null;
+    }
+
+    public PortType removePortType(QName name) {
+        if (isDebugEnabled) {
+            log.debug(myClassName + ".removePortType(" + name + ")");
+        }
+        if (wsdlDefinition != null) {
+            return wsdlDefinition.removePortType(name);
+        }
+        return null;
+    }
+
+    public Map getPortTypes() {
+        if (isDebugEnabled) {
+            log.debug(myClassName + ".getPortTypes()");
+        }
+        if (wsdlDefinition != null) {
+            return wsdlDefinition.getPortTypes();
+        }
+        return null;
+    }
+
+    public Map getAllPortTypes() {
+        if (isDebugEnabled) {
+            log.debug(myClassName + ".getAllPortTypes()");
+        }
+        if (wsdlDefinition != null) {
+            return wsdlDefinition.getAllPortTypes();
+        }
+        return null;
+    }
+
+    public void addService(Service service) {
+        if (isDebugEnabled) {
+            log.debug(myClassName + ".addService(" + service + ")");
+        }
+        if (wsdlDefinition != null) {
+            wsdlDefinition.addService(service);
+        }
+    }
+
+    public Service getService(QName name) {
+        if (isDebugEnabled) {
+            log.debug(myClassName + ".getService(" + name + ")");
+        }
+        if (wsdlDefinition != null) {
+            return wsdlDefinition.getService(name);
+        }
+        return null;
+    }
+
+    public Service removeService(QName name) {
+        if (isDebugEnabled) {
+            log.debug(myClassName + ".removeService(" + name + ")");
+        }
+        if (wsdlDefinition != null) {
+            return wsdlDefinition.removeService(name);
+        }
+        return null;
+    }
+
+    public Map getServices() {
+        if (isDebugEnabled) {
+            log.debug(myClassName + ".getServices()");
+        }
+        if (wsdlDefinition != null) {
+            return wsdlDefinition.getServices();
+        }
+        return null;
+    }
+
+    public Map getAllServices() {
+        if (isDebugEnabled) {
+            log.debug(myClassName + ".getAllServices()");
+        }
+        if (wsdlDefinition != null) {
+            return wsdlDefinition.getAllServices();
+        }
+        return null;
+    }
+
+    public void setDocumentationElement(org.w3c.dom.Element docEl) {
+
+        if (isDebugEnabled) {
+            log.debug(myClassName + ".setDocumentationElement()");
+        }
+        if (wsdlDefinition != null) {
+            wsdlDefinition.setDocumentationElement(docEl);
+        }
+    }
+
+    public org.w3c.dom.Element getDocumentationElement() {
+
+        if (isDebugEnabled) {
+            log.debug(myClassName + ".getDocumentationElement()");
+        }
+        if (wsdlDefinition != null) {
+            return  wsdlDefinition.getDocumentationElement();
+        }
+        return null;
+    }
+
+    public void addExtensibilityElement(ExtensibilityElement extElement) {
+        if (isDebugEnabled) {
+            log.debug(myClassName + ".addExtensibilityElement(" + extElement + ")");
+        }
+        if (wsdlDefinition != null) {
+            wsdlDefinition.addExtensibilityElement(extElement);
+        }
+    }
+
+    public List getExtensibilityElements() {
+        if (isDebugEnabled) {
+            log.debug(myClassName + ".getExtensibilityElements()");
+        }
+        if (wsdlDefinition != null) {
+            return wsdlDefinition.getExtensibilityElements();
+        }
+        return null;
+    }
+
+    public Binding createBinding() {
+        if (isDebugEnabled) {
+            log.debug(myClassName + ".createBinding()");
+        }
+        if (wsdlDefinition != null) {
+            return wsdlDefinition.createBinding();
+        }
+        return null;
+    }
+
+    public BindingFault createBindingFault() {
+        if (isDebugEnabled) {
+            log.debug(myClassName + ".createBindingFault()");
+        }
+        if (wsdlDefinition != null) {
+            return wsdlDefinition.createBindingFault();
+        }
+        return null;
+    }
+
+    public BindingInput createBindingInput() {
+        if (isDebugEnabled) {
+            log.debug(myClassName + ".createBindingInput()");
+        }
+        if (wsdlDefinition != null) {
+            return wsdlDefinition.createBindingInput();
+        }
+        return null;
+    }
+
+    public BindingOperation createBindingOperation() {
+        if (isDebugEnabled) {
+            log.debug(myClassName + ".createBindingOperation()");
+        }
+        if (wsdlDefinition != null) {
+            return wsdlDefinition.createBindingOperation();
+        }
+        return null;
+    }
+
+    public BindingOutput createBindingOutput() {
+        if (isDebugEnabled) {
+            log.debug(myClassName + ".createBindingOutput()");
+        }
+        if (wsdlDefinition != null) {
+            return wsdlDefinition.createBindingOutput();
+        }
+        return null;
+    }
+
+    public Fault createFault() {
+        if (isDebugEnabled) {
+            log.debug(myClassName + ".createFault()");
+        }
+        if (wsdlDefinition != null) {
+            return wsdlDefinition.createFault();
+        }
+        return null;
+    }
+
+    public Import createImport() {
+        if (isDebugEnabled) {
+            log.debug(myClassName + ".createImport()");
+        }
+        if (wsdlDefinition != null) {
+            return wsdlDefinition.createImport();
+        }
+        return null;
+    }
+
+    public Input createInput() {
+        if (isDebugEnabled) {
+            log.debug(myClassName + ".createInput()");
+        }
+        if (wsdlDefinition != null) {
+            return wsdlDefinition.createInput();
+        }
+        return null;
+    }
+
+    public Message createMessage() {
+        if (isDebugEnabled) {
+            log.debug(myClassName + ".createMessage()");
+        }
+        if (wsdlDefinition != null) {
+            return wsdlDefinition.createMessage();
+        }
+        return null;
+    }
+
+    public Operation createOperation() {
+        if (isDebugEnabled) {
+            log.debug(myClassName + ".createOperation()");
+        }
+        if (wsdlDefinition != null) {
+            return wsdlDefinition.createOperation();
+        }
+        return null;
+    }
+
+    public Output createOutput() {
+        if (isDebugEnabled) {
+            log.debug(myClassName + ".createOutput()");
+        }
+        if (wsdlDefinition != null) {
+            return wsdlDefinition.createOutput();
+        }
+        return null;
+    }
+
+    public Part createPart() {
+        if (isDebugEnabled) {
+            log.debug(myClassName + ".createPart()");
+        }
+        if (wsdlDefinition != null) {
+            return wsdlDefinition.createPart();
+        }
+        return null;
+    }
+
+    public Port createPort() {
+        if (isDebugEnabled) {
+            log.debug(myClassName + ".createPort()");
+        }
+        if (wsdlDefinition != null) {
+            return wsdlDefinition.createPort();
+        }
+        return null;
+    }
+
+    public PortType createPortType() {
+        if (isDebugEnabled) {
+            log.debug(myClassName + ".createPortType()");
+        }
+        if (wsdlDefinition != null) {
+            return wsdlDefinition.createPortType();
+        }
+        return null;
+    }
+
+    public Service createService() {
+        if (isDebugEnabled) {
+            log.debug(myClassName + ".createService()");
+        }
+        if (wsdlDefinition != null) {
+            return wsdlDefinition.createService();
+        }
+        return null;
+    }
+
+    public Types createTypes() {
+        if (isDebugEnabled) {
+            log.debug(myClassName + ".createTypes()");
+        }
+        if (wsdlDefinition != null) {
+            return wsdlDefinition.createTypes();
+        }
+        return null;
+    }
+
+    public void setExtensionRegistry(ExtensionRegistry extReg) {
+        if (isDebugEnabled) {
+            log.debug(myClassName + ".setExtensionRegistry(" + extReg + ")");
+        }
+        if (wsdlDefinition != null) {
+            wsdlDefinition.setExtensionRegistry(extReg);
+        }
+    }
+
+    public ExtensionRegistry getExtensionRegistry() {
+        if (isDebugEnabled) {
+            log.debug(myClassName + ".getExtensionRegistry()");
+        }
+        if (wsdlDefinition != null) {
+            return wsdlDefinition.getExtensionRegistry();
+        }
+        return null;
+    }
+
+    public String toString() {
+        if (wsdlDefinition != null) {
+            return wsdlDefinition.toString();
+        }
+        return "";
+    }
+
+    //-------------------------------------------------------------------------
+    // other AbstractWSDLElement methods
+    //-------------------------------------------------------------------------
+
+    public ExtensibilityElement removeExtensibilityElement(ExtensibilityElement extElement) {
+        if (isDebugEnabled) {
+            log.debug(myClassName + ".removeExtensibilityElement(" + extElement + ")");
+        }
+        if (wsdlDefinition != null) {
+            return wsdlDefinition.removeExtensibilityElement(extElement);
+        }
+        return null;
+
+    }
+
+    public java.lang.Object getExtensionAttribute(QName name) {
+        if (isDebugEnabled) {
+            log.debug(myClassName + ".getExtensionAttribute(" + name + ")");
+        }
+        if (wsdlDefinition != null) {
+            return wsdlDefinition.getExtensionAttribute(name);
+        }
+        return null;
+    }
+
+    public Map getExtensionAttributes() {
+        if (isDebugEnabled) {
+            log.debug(myClassName + ".getExtensionAttributes()");
+        }
+        if (wsdlDefinition != null) {
+            return wsdlDefinition.getExtensionAttributes();
+        }
+        return null;
+    }
+
+    public void setExtensionAttribute(QName name, java.lang.Object value) {
+        if (isDebugEnabled) {
+            log.debug(myClassName + ".setExtensionAttribute(" + name + ",  " + value + ")");
+        }
+        if (wsdlDefinition != null) {
+            wsdlDefinition.setExtensionAttribute(name, value);
+        }
+    }
+
+
+
+}

Added: webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/wsdl/util/WSDLWrapperImpl.java
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/wsdl/util/WSDLWrapperImpl.java?rev=584248&view=auto
==============================================================================
--- webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/wsdl/util/WSDLWrapperImpl.java (added)
+++ webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/wsdl/util/WSDLWrapperImpl.java Fri Oct 12 12:53:43 2007
@@ -0,0 +1,72 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.axis2.wsdl.util;
+
+
+import javax.wsdl.Definition;
+
+
+/**
+ * This interface provides support for processing a WSDL4J definition
+ * with a lower memory footprint.  This is useful for certain
+ * environments.
+ */
+public interface WSDLWrapperImpl extends Definition {
+
+    /**
+     * Returns the WSDL4J Definition object that is being wrapped
+     */
+    public Definition getUnwrappedDefinition();
+
+
+    /**
+     * Sets the WSDL4J Definition object that is being wrapped
+     *
+     * @param d  the WSDL4J Definition object
+     */
+    public void setDefinitionToWrap(Definition d);
+
+
+    /**
+     * Sets the location for the WSDL4J Definition object that is being wrapped
+     */
+    public void setWSDLLocation(String uriLocation);
+
+
+    /**
+     * Gets the location for the WSDL4J Definition object that is being wrapped
+     */
+    public String getWSDLLocation();
+
+
+    /*
+     * Release resources associated with the WSDL4J Definition object that is
+     * being wrapped.
+     */
+    public void releaseResources();
+
+
+    /**
+     * Closes the use of the wrapper implementation and allows 
+     * internal resources to be released.
+     */
+    public void close();
+
+}



---------------------------------------------------------------------
To unsubscribe, e-mail: axis-cvs-unsubscribe@ws.apache.org
For additional commands, e-mail: axis-cvs-help@ws.apache.org