You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tuscany.apache.org by sl...@apache.org on 2009/10/04 14:51:37 UTC

svn commit: r821535 - in /tuscany/branches/sca-java-1.x/modules: binding-ws-wsdlgen/src/main/java/org/apache/tuscany/sca/binding/ws/wsdlgen/ interface-wsdl/src/main/java/org/apache/tuscany/sca/interfacedef/wsdl/ interface-wsdl/src/main/java/org/apache/...

Author: slaws
Date: Sun Oct  4 12:51:37 2009
New Revision: 821535

URL: http://svn.apache.org/viewvc?rev=821535&view=rev
Log:
TUSCANY-3283 re-enable the wrapper generation logic now that the no namespace handling is complete. Had to mess around with how the schema is generated using the schema collection as now the default schema is being extended with wrappers after schema has been generated. Before a new no namespace schema was being generated. 

Modified:
    tuscany/branches/sca-java-1.x/modules/binding-ws-wsdlgen/src/main/java/org/apache/tuscany/sca/binding/ws/wsdlgen/Interface2WSDLGenerator.java
    tuscany/branches/sca-java-1.x/modules/interface-wsdl/src/main/java/org/apache/tuscany/sca/interfacedef/wsdl/WSDLDefinition.java
    tuscany/branches/sca-java-1.x/modules/interface-wsdl/src/main/java/org/apache/tuscany/sca/interfacedef/wsdl/impl/WSDLDefinitionImpl.java

Modified: tuscany/branches/sca-java-1.x/modules/binding-ws-wsdlgen/src/main/java/org/apache/tuscany/sca/binding/ws/wsdlgen/Interface2WSDLGenerator.java
URL: http://svn.apache.org/viewvc/tuscany/branches/sca-java-1.x/modules/binding-ws-wsdlgen/src/main/java/org/apache/tuscany/sca/binding/ws/wsdlgen/Interface2WSDLGenerator.java?rev=821535&r1=821534&r2=821535&view=diff
==============================================================================
--- tuscany/branches/sca-java-1.x/modules/binding-ws-wsdlgen/src/main/java/org/apache/tuscany/sca/binding/ws/wsdlgen/Interface2WSDLGenerator.java (original)
+++ tuscany/branches/sca-java-1.x/modules/binding-ws-wsdlgen/src/main/java/org/apache/tuscany/sca/binding/ws/wsdlgen/Interface2WSDLGenerator.java Sun Oct  4 12:51:37 2009
@@ -339,7 +339,7 @@
         wsdlDefinition.setBinding(binding);
 
         // call each helper in turn to populate the wsdl.types element
-        XmlSchemaCollection schemaCollection = new XmlSchemaCollection(); 
+        XmlSchemaCollection schemaCollection = new XmlSchemaCollection();
 
         for (Map.Entry<XMLTypeHelper, List<DataType>> en: getDataTypes(interfaze, true, helpers).entrySet()) {
             XMLTypeHelper helper = en.getKey();
@@ -361,7 +361,7 @@
                     defaultNamespaceSchema = xsDef;
                 }
                 // useful for debugging DOM issues
-                //printDOM(xsDef.getDocument());
+                // printDOM(xsDef.getDocument());
             }
             
             // TUSCANY-3283 merge the no namespace schema into the default namespace schema
@@ -396,17 +396,10 @@
                         }
                     }
                 }
-                // TUSCANY-3283
-                // useful for debugging DOM issues
-                //printDOM(doc);
                 addSchemaExtension(xsDef, schemaCollection, wsdlDefinition, definition);
-            }
+            }              
         }
 
-/* TUSCANY-3283  
- * the value "true" in the above call to getDataTypes(interfaze, true, helpers) means that
- * wrappers are generated in the context of all of the other types being generated. 
-
         // remove global wrapper elements with schema definitions from generation list
         for (QName wrapperName: new HashSet<QName>(wrappers.keySet())) {
             if (wsdlDefinition.getXmlSchemaElement(wrapperName) != null) {
@@ -414,14 +407,21 @@
             }
         }
 
+
         // generate schema elements for wrappers that aren't defined in the schemas
         if (wrappers.size() > 0) {
             int i = 0;
             int index = 0;
             Map<String, XSDefinition> wrapperXSDs = new HashMap<String, XSDefinition>();
+
             Map<Element, Map<String, String>> prefixMaps = new HashMap<Element, Map<String, String>>();
             for (Map.Entry<QName, List<ElementInfo>> entry: wrappers.entrySet()) {
                 String targetNS = entry.getKey().getNamespaceURI();
+                // make sure wrappers are generated into the default namespace
+                if (targetNS == null ||
+                    targetNS.equals("")){
+                    targetNS = namespaceURI;
+                }
                 Document schemaDoc = null;
                 Element schema = null;
                 XSDefinition xsDef = wrapperXSDs.get(targetNS);
@@ -429,25 +429,34 @@
                     schemaDoc = xsDef.getDocument();
                     schema = schemaDoc.getDocumentElement();
                 } else {
-                    schemaDoc = createDocument();
-                    schema = schemaDoc.createElementNS(SCHEMA_NS, "xs:schema");
-                    // The elementFormDefault should be set to unqualified, see TUSCANY-2388
-                    schema.setAttribute("elementFormDefault", "unqualified");
-                    schema.setAttribute("attributeFormDefault", "qualified");
-                    schema.setAttribute("targetNamespace", targetNS);
-                    schema.setAttributeNS(XMLNS_NS, "xmlns:xs", SCHEMA_NS);
-                    schemaDoc.appendChild(schema);
-                    Schema schemaExt = createSchemaExt(definition);
-                    schemaExt.setElement(schema);
-                    prefixMaps.put(schema, new HashMap<String, String>());
-                    xsDef = xsdFactory.createXSDefinition();
-                    xsDef.setUnresolved(true);
-                    xsDef.setNamespace(targetNS);
-                    xsDef.setDocument(schemaDoc);
-                    // TUSCANY-2465: Set the system id to avoid schema conflict
-                    xsDef.setLocation(URI.create("xsd_" + index + ".xsd"));
-                    index++;
-                    wrapperXSDs.put(targetNS, xsDef);
+                    // check schema is not already in the set identified so far   
+                    xsDef = wsdlDefinition.getSchema(targetNS);
+                    if (xsDef != null) {
+                        schemaDoc = xsDef.getDocument();
+                        schema = schemaDoc.getDocumentElement();
+                        wrapperXSDs.put(targetNS, xsDef);
+                    } else {
+                        // create a new schema document
+                        schemaDoc = createDocument();
+                        schema = schemaDoc.createElementNS(SCHEMA_NS, "xs:schema");
+                        // The elementFormDefault should be set to unqualified, see TUSCANY-2388
+                        schema.setAttribute("elementFormDefault", "unqualified");
+                        schema.setAttribute("attributeFormDefault", "qualified");
+                        schema.setAttribute("targetNamespace", targetNS);
+                        schema.setAttributeNS(XMLNS_NS, "xmlns:xs", SCHEMA_NS);
+                        schemaDoc.appendChild(schema);
+                        Schema schemaExt = createSchemaExt(definition);
+                        schemaExt.setElement(schema);
+                        prefixMaps.put(schema, new HashMap<String, String>());
+                        xsDef = xsdFactory.createXSDefinition();
+                        xsDef.setUnresolved(true);
+                        xsDef.setNamespace(targetNS);
+                        xsDef.setDocument(schemaDoc);
+                        // TUSCANY-2465: Set the system id to avoid schema conflict
+                        xsDef.setLocation(URI.create("xsd_" + index + ".xsd"));
+                        index++;
+                        wrapperXSDs.put(targetNS, xsDef);
+                    } 
                 }
                 Element wrapper = schemaDoc.createElementNS(SCHEMA_NS, "xs:element");
                 schema.appendChild(wrapper);
@@ -522,11 +531,27 @@
  
             // resolve XSDefinitions containing generated wrappers
             for (XSDefinition xsDef: wrapperXSDs.values()) {
-                loadXSD(schemaCollection, xsDef);
-                wsdlDefinition.getXmlSchemas().add(xsDef);
+                if (wsdlDefinition.getSchema(xsDef.getNamespace()) == null){
+                    wsdlDefinition.getXmlSchemas().add(xsDef);
+                }
             }
+        }   
+        
+        // TUSCANY-3283 reload all of the schema to take account of any wrapper editing that's
+        //             happened. Can't just extend what's there as the schema collection won't
+        //             let me reload a schema that's already been loaded. 
+        schemaCollection = new XmlSchemaCollection();
+        for (XSDefinition xsDef: wsdlDefinition.getXmlSchemas()) {
+            xsDef.setSchema(null);
+            xsDef.setSchemaCollection(null);
+            loadXSD(schemaCollection, xsDef);
+        }
+        
+        // TUSCANY-3283
+        // useful for debugging DOM issues
+        for (XSDefinition xsDef : wsdlDefinition.getXmlSchemas()){
+            printDOM(xsDef.getDocument());
         }
-*/        
 
         return definition;
     }

Modified: tuscany/branches/sca-java-1.x/modules/interface-wsdl/src/main/java/org/apache/tuscany/sca/interfacedef/wsdl/WSDLDefinition.java
URL: http://svn.apache.org/viewvc/tuscany/branches/sca-java-1.x/modules/interface-wsdl/src/main/java/org/apache/tuscany/sca/interfacedef/wsdl/WSDLDefinition.java?rev=821535&r1=821534&r2=821535&view=diff
==============================================================================
--- tuscany/branches/sca-java-1.x/modules/interface-wsdl/src/main/java/org/apache/tuscany/sca/interfacedef/wsdl/WSDLDefinition.java (original)
+++ tuscany/branches/sca-java-1.x/modules/interface-wsdl/src/main/java/org/apache/tuscany/sca/interfacedef/wsdl/WSDLDefinition.java Sun Oct  4 12:51:37 2009
@@ -137,4 +137,12 @@
      * @param binding the WSDL binding
      */
     void setBinding(Binding binding);
+    
+    /**
+     * Find the schema definition for the provided namespace
+     * 
+     * @param namespace
+     * @return the schema definition relating to the provided namespace or null if not found
+     */
+    XSDefinition getSchema(String namespace);
 }

Modified: tuscany/branches/sca-java-1.x/modules/interface-wsdl/src/main/java/org/apache/tuscany/sca/interfacedef/wsdl/impl/WSDLDefinitionImpl.java
URL: http://svn.apache.org/viewvc/tuscany/branches/sca-java-1.x/modules/interface-wsdl/src/main/java/org/apache/tuscany/sca/interfacedef/wsdl/impl/WSDLDefinitionImpl.java?rev=821535&r1=821534&r2=821535&view=diff
==============================================================================
--- tuscany/branches/sca-java-1.x/modules/interface-wsdl/src/main/java/org/apache/tuscany/sca/interfacedef/wsdl/impl/WSDLDefinitionImpl.java (original)
+++ tuscany/branches/sca-java-1.x/modules/interface-wsdl/src/main/java/org/apache/tuscany/sca/interfacedef/wsdl/impl/WSDLDefinitionImpl.java Sun Oct  4 12:51:37 2009
@@ -285,5 +285,15 @@
     public void setBinding(Binding binding) {
         this.binding = binding;
     }
+    
+    public XSDefinition getSchema(String namespace){
+        for (XSDefinition xsDef : schemas){
+            if (xsDef.getNamespace().equals(namespace)){
+                return xsDef;
+            }
+        }
+        
+        return null;
+    }
 
 }