You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@servicemix.apache.org by gn...@apache.org on 2007/03/29 00:39:51 UTC

svn commit: r523488 - in /incubator/servicemix/branches/servicemix-3.1/common/servicemix-common/src/main/java/org/apache/servicemix/common/tools/wsdl: Schema.java SchemaCollection.java

Author: gnodet
Date: Wed Mar 28 15:39:51 2007
New Revision: 523488

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

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

Modified: incubator/servicemix/branches/servicemix-3.1/common/servicemix-common/src/main/java/org/apache/servicemix/common/tools/wsdl/Schema.java
URL: http://svn.apache.org/viewvc/incubator/servicemix/branches/servicemix-3.1/common/servicemix-common/src/main/java/org/apache/servicemix/common/tools/wsdl/Schema.java?view=diff&rev=523488&r1=523487&r2=523488
==============================================================================
--- incubator/servicemix/branches/servicemix-3.1/common/servicemix-common/src/main/java/org/apache/servicemix/common/tools/wsdl/Schema.java (original)
+++ incubator/servicemix/branches/servicemix-3.1/common/servicemix-common/src/main/java/org/apache/servicemix/common/tools/wsdl/Schema.java Wed Mar 28 15:39:51 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/branches/servicemix-3.1/common/servicemix-common/src/main/java/org/apache/servicemix/common/tools/wsdl/SchemaCollection.java
URL: http://svn.apache.org/viewvc/incubator/servicemix/branches/servicemix-3.1/common/servicemix-common/src/main/java/org/apache/servicemix/common/tools/wsdl/SchemaCollection.java?view=diff&rev=523488&r1=523487&r2=523488
==============================================================================
--- incubator/servicemix/branches/servicemix-3.1/common/servicemix-common/src/main/java/org/apache/servicemix/common/tools/wsdl/SchemaCollection.java (original)
+++ incubator/servicemix/branches/servicemix-3.1/common/servicemix-common/src/main/java/org/apache/servicemix/common/tools/wsdl/SchemaCollection.java Wed Mar 28 15:39:51 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);
+	        }
         }
     }