Author: gnodet
Date: Wed Mar 28 15:39:38 2007
New Revision: 523487

URL: http://svn.apache.org/viewvc?view=rev&rev=523487
Log:
SM-900: WSDLFlattener does not handle schemas inclusions

Modified:
    
incubator/servicemix/trunk/common/servicemix-common/src/main/java/org/apache/servicemix/common/tools/wsdl/Schema.java
    
incubator/servicemix/trunk/common/servicemix-common/src/main/java/org/apache/servicemix/common/tools/wsdl/SchemaCollection.java

Modified: 
incubator/servicemix/trunk/common/servicemix-common/src/main/java/org/apache/servicemix/common/tools/wsdl/Schema.java
URL: 
http://svn.apache.org/viewvc/incubator/servicemix/trunk/common/servicemix-common/src/main/java/org/apache/servicemix/common/tools/wsdl/Schema.java?view=diff&rev=523487&r1=523486&r2=523487
==============================================================================
--- 
incubator/servicemix/trunk/common/servicemix-common/src/main/java/org/apache/servicemix/common/tools/wsdl/Schema.java
 (original)
+++ 
incubator/servicemix/trunk/common/servicemix-common/src/main/java/org/apache/servicemix/common/tools/wsdl/Schema.java
 Wed Mar 28 15:39:38 2007
@@ -32,7 +32,7 @@
     private Element root;
     private String namespace;
     private List imports;
-    private URI sourceUri;
+    private List sourceUris;
     
     /**
      * Add a reference to an imported namespace.
@@ -90,15 +90,18 @@
     /**
      * @return Returns the sourceUri.
      */
-    public URI getSourceUri() {
-        return sourceUri;
+    public List getSourceUris() {
+        return sourceUris;
     }
 
     /**
      * @param sourceUri The sourceUri to set.
      */
-    public void setSourceUri(URI sourceUri) {
-        this.sourceUri = sourceUri;
+    public void addSourceUri(URI sourceUri) {
+       if (sourceUris == null) {
+               sourceUris = new ArrayList();
+       }
+        sourceUris.add(sourceUri);
     }
 
 }

Modified: 
incubator/servicemix/trunk/common/servicemix-common/src/main/java/org/apache/servicemix/common/tools/wsdl/SchemaCollection.java
URL: 
http://svn.apache.org/viewvc/incubator/servicemix/trunk/common/servicemix-common/src/main/java/org/apache/servicemix/common/tools/wsdl/SchemaCollection.java?view=diff&rev=523487&r1=523486&r2=523487
==============================================================================
--- 
incubator/servicemix/trunk/common/servicemix-common/src/main/java/org/apache/servicemix/common/tools/wsdl/SchemaCollection.java
 (original)
+++ 
incubator/servicemix/trunk/common/servicemix-common/src/main/java/org/apache/servicemix/common/tools/wsdl/SchemaCollection.java
 Wed Mar 28 15:39:38 2007
@@ -64,12 +64,22 @@
     }
     
     public void read(Element elem, URI sourceUri) throws Exception {
-        Schema schema = new Schema();
-        schema.setSourceUri(sourceUri);
-        schema.setRoot(elem);
-        schema.setNamespace(elem.getAttribute("targetNamespace"));
-        schemas.put(schema.getNamespace(), schema);
-        handleImports(schema);
+       String namespace = elem.getAttribute("targetNamespace");
+       Schema schema = (Schema) schemas.get(namespace);
+       if (schema == null) {
+               schema = new Schema();
+               schema.addSourceUri(sourceUri);
+               schema.setRoot(elem);
+               schema.setNamespace(elem.getAttribute("targetNamespace"));
+               schemas.put(schema.getNamespace(), schema);
+       } else if (!schema.getSourceUris().contains(sourceUri)) {
+               NodeList nodes = elem.getChildNodes();
+               for (int i = 0; i < nodes.getLength(); i++) {
+                       
schema.getRoot().appendChild(schema.getRoot().getOwnerDocument().importNode(nodes.item(i),
 true));
+               }
+               schema.addSourceUri(sourceUri);
+       }
+        handleImports(schema, sourceUri);
     }
     
     public void read(String location, URI baseUri) throws Exception {
@@ -106,9 +116,10 @@
              inputSource.getSystemId() != null ? new 
URI(inputSource.getSystemId()) : null);
     }
     
-    protected void handleImports(Schema schema) throws Exception {
+    protected void handleImports(Schema schema, URI baseUri) throws Exception {
         NodeList children = schema.getRoot().getChildNodes();
         List imports = new ArrayList();
+        List includes = new ArrayList();
         for (int i = 0; i < children.getLength(); i++) {
             Node child = children.item(i);
             if (child instanceof Element) {
@@ -116,20 +127,29 @@
                 if 
("http://www.w3.org/2001/XMLSchema".equals(ce.getNamespaceURI()) &&
                     "import".equals(ce.getLocalName())) {
                     imports.add(ce);
+                } else if 
("http://www.w3.org/2001/XMLSchema".equals(ce.getNamespaceURI()) &&
+                           "include".equals(ce.getLocalName())) {
+                       includes.add(ce);
                 }
             }
         }
         for (Iterator iter = imports.iterator(); iter.hasNext();) {
             Element ce = (Element) iter.next();
             String namespace = ce.getAttribute("namespace");
-            if (schemas.get(namespace) == null) {
-                String location = ce.getAttribute("schemaLocation");
-                if (location != null && !"".equals(location)) {
-                    read(location, schema.getSourceUri());
-                }
-            }
+            String location = ce.getAttribute("schemaLocation");
             schema.addImport(namespace);
             schema.getRoot().removeChild(ce);
+            if (location != null && !"".equals(location)) {
+               read(location, baseUri);
+            }
+        }
+        for (Iterator iter = includes.iterator(); iter.hasNext();) {
+            Element ce = (Element) iter.next();
+               String location = ce.getAttribute("schemaLocation");
+            schema.getRoot().removeChild(ce);
+               if (location != null && !"".equals(location)) {
+                   read(location, baseUri);
+               }
         }
     }
     


Reply via email to