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 am...@apache.org on 2007/10/16 13:42:49 UTC

svn commit: r585124 - in /webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2: description/AxisService.java util/FileWriter.java

Author: amilas
Date: Tue Oct 16 04:42:46 2007
New Revision: 585124

URL: http://svn.apache.org/viewvc?rev=585124&view=rev
Log:
rename the file names if it does not ends with the .xsd and improve it to
avoid duplicat schema objects.

Modified:
    webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/description/AxisService.java
    webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/util/FileWriter.java

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=585124&r1=585123&r2=585124&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 Tue Oct 16 04:42:46 2007
@@ -1969,10 +1969,11 @@
         Map changedScheamLocations = null;
         if (!this.schemaLocationsAdjusted) {
             Hashtable nameTable = new Hashtable();
+            Hashtable sourceURIToNewLocationMap = new Hashtable();
             //calculate unique names for the schemas
-            calcualteSchemaNames(schema, nameTable);
+            calcualteSchemaNames(schema, nameTable, sourceURIToNewLocationMap);
             //adjust the schema locations as per the calculated names
-            changedScheamLocations = adjustSchemaNames(schema, nameTable);
+            changedScheamLocations = adjustSchemaNames(schema, nameTable,sourceURIToNewLocationMap);
             //reverse the nametable so that there is a mapping from the
             //name to the schemaObject
             setSchemaMappingTable(swapMappingTable(nameTable));
@@ -1987,7 +1988,7 @@
      *
      * @param schemas
      */
-    private void calcualteSchemaNames(List schemas, Hashtable nameTable) {
+    private void calcualteSchemaNames(List schemas, Hashtable nameTable, Hashtable sourceURIToNewLocationMap) {
         //first traversal - fill the hashtable
         for (int i = 0; i < schemas.size(); i++) {
             XmlSchema schema = (XmlSchema) schemas.get(i);
@@ -1999,13 +2000,11 @@
                 if (item instanceof XmlSchemaExternal) {
                     XmlSchemaExternal externalSchema = (XmlSchemaExternal) item;
                     s = externalSchema.getSchema();
-                    if (s != null && nameTable.get(s) == null) {
+                    if (s != null && sourceURIToNewLocationMap.get(s.getSourceURI()) == null) {
                         //insert the name into the table
-                        insertIntoNameTable(nameTable, s);
+                        insertIntoNameTable(nameTable, s, sourceURIToNewLocationMap);
                         //recursively call the same procedure
-                        calcualteSchemaNames(Arrays.asList(
-                                new XmlSchema[]{s}),
-                                             nameTable);
+                        calcualteSchemaNames(Arrays.asList(new XmlSchema[]{s}), nameTable, sourceURIToNewLocationMap);
                     }
                 }
             }
@@ -2018,36 +2017,47 @@
      * @param nameTable
      * @param s
      */
-    private void insertIntoNameTable(Hashtable nameTable, XmlSchema s) {
+    private void insertIntoNameTable(Hashtable nameTable, XmlSchema s, Hashtable sourceURIToNewLocationMap) {
         String sourceURI = s.getSourceURI();
-        sourceURI = sourceURI.substring(sourceURI.lastIndexOf('/') + 1);
-        //remove the .xsd extention
-        sourceURI = sourceURI.substring(0,sourceURI.indexOf("."));
+        String newURI = sourceURI.substring(sourceURI.lastIndexOf('/') + 1);
+        if (newURI.endsWith(".xsd")) {
+            //remove the .xsd extention
+            newURI = newURI.substring(0, newURI.lastIndexOf("."));
+        } else {
+            newURI = "xsd" + count++;
+        }
+
+        newURI = customSchemaNameSuffix != null? newURI + customSchemaNameSuffix: newURI;
         // make it unique
-        while(nameTable.containsValue(sourceURI)){
-            sourceURI = sourceURI + count++;
+        while(nameTable.containsValue(newURI)){
+            newURI = newURI + count++;
         }
 
-        nameTable.put(s,
-                      (sourceURI)
-                      + (customSchemaNameSuffix != null ?
-                         customSchemaNameSuffix :
-                         ""));
+        nameTable.put(s, newURI);
+        sourceURIToNewLocationMap.put(sourceURI,newURI);
     }
 
     /**
      * Run 2  - adjust the names
      */
-    private Map adjustSchemaNames(List schemas, Hashtable nameTable) {
+    private Map adjustSchemaNames(List schemas,
+                                  Hashtable nameTable,
+                                  Hashtable sourceURIToNewLocationMap) {
         Hashtable importedSchemas = new Hashtable();
         //process the schemas in the main schema list
         for (int i = 0; i < schemas.size(); i++) {
-            adjustSchemaName((XmlSchema) schemas.get(i), nameTable, importedSchemas);
+            adjustSchemaName((XmlSchema) schemas.get(i),
+                    nameTable,
+                    importedSchemas,
+                    sourceURIToNewLocationMap);
         }
         //process all the rest in the name table
         Enumeration nameTableKeys = nameTable.keys();
         while (nameTableKeys.hasMoreElements()) {
-            adjustSchemaName((XmlSchema) nameTableKeys.nextElement(), nameTable, importedSchemas);
+            adjustSchemaName((XmlSchema) nameTableKeys.nextElement(),
+                    nameTable,
+                    importedSchemas,
+                    sourceURIToNewLocationMap);
 
         }
         return importedSchemas;
@@ -2059,15 +2069,21 @@
      * @param parentSchema
      * @param nameTable
      */
-    private void adjustSchemaName(XmlSchema parentSchema, Hashtable nameTable,
-                                  Hashtable importedScheams) {
+    private void adjustSchemaName(XmlSchema parentSchema,
+                                  Hashtable nameTable,
+                                  Hashtable importedScheams,
+                                  Hashtable sourceURIToNewLocationMap) {
         XmlSchemaObjectCollection includes = parentSchema.getIncludes();
         for (int j = 0; j < includes.getCount(); j++) {
             Object item = includes.getItem(j);
             if (item instanceof XmlSchemaExternal) {
                 XmlSchemaExternal xmlSchemaExternal = (XmlSchemaExternal) item;
                 XmlSchema s = xmlSchemaExternal.getSchema();
-                adjustSchemaLocation(s, xmlSchemaExternal, nameTable, importedScheams);
+                adjustSchemaLocation(s,
+                        xmlSchemaExternal,
+                        nameTable,
+                        importedScheams,
+                        sourceURIToNewLocationMap);
             }
         }
 
@@ -2080,27 +2096,21 @@
      * @param xmlSchemaExternal
      * @param nameTable
      */
-    private void adjustSchemaLocation(XmlSchema s, XmlSchemaExternal xmlSchemaExternal,
-                                      Hashtable nameTable, Hashtable importedScheams) {
+    private void adjustSchemaLocation(XmlSchema s,
+                                      XmlSchemaExternal xmlSchemaExternal,
+                                      Hashtable nameTable,
+                                      Hashtable importedScheams,
+                                      Hashtable sourceURIToNewLocationMap) {
         if (s != null) {
-            String schemaLocation = xmlSchemaExternal.getSchemaLocation();
-            if (importedScheams.get(schemaLocation) != null) {
-                xmlSchemaExternal.setSchemaLocation(
-                        (String) importedScheams.get(xmlSchemaExternal.getSchemaLocation()));
-            } else {
-                String newscheamlocation = customSchemaNamePrefix == null ?
-                                           //use the default mode
-                                           (getName() +
-                                            "?xsd=" +
-                                            nameTable.get(s)) :
-                                                              //custom prefix is present - add the custom prefix
-                                                              (customSchemaNamePrefix +
-                                                               nameTable.get(s));
-                xmlSchemaExternal.setSchemaLocation(
-                        newscheamlocation);
-                importedScheams.put(schemaLocation, newscheamlocation);
-            }
 
+            String newscheamlocation = customSchemaNamePrefix == null ?
+                    //use the default mode
+                    (getName() + "?xsd=" + sourceURIToNewLocationMap.get(s.getSourceURI())) :
+                    //custom prefix is present - add the custom prefix
+                    (customSchemaNamePrefix + sourceURIToNewLocationMap.get(s.getSourceURI()));
+            String schemaLocation = xmlSchemaExternal.getSchemaLocation();
+            xmlSchemaExternal.setSchemaLocation(newscheamlocation);
+            importedScheams.put(schemaLocation, newscheamlocation);
         }
     }
 

Modified: webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/util/FileWriter.java
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/util/FileWriter.java?rev=585124&r1=585123&r2=585124&view=diff
==============================================================================
--- webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/util/FileWriter.java (original)
+++ webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/util/FileWriter.java Tue Oct 16 04:42:46 2007
@@ -57,7 +57,7 @@
             }
         }
 
-        if (!fileName.endsWith(extension)) {
+        if ((extension != null) && !fileName.endsWith(extension)) {
             fileName = fileName + extension;
         }
 



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