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;
+    }
 
 }


Reply via email to