You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tuscany.apache.org by rf...@apache.org on 2008/10/22 23:16:17 UTC

svn commit: r707196 - /tuscany/branches/sca-java-1.3.3/modules/xsd-xml/src/main/java/org/apache/tuscany/sca/xsd/xml/XSDModelResolver.java

Author: rfeng
Date: Wed Oct 22 14:16:17 2008
New Revision: 707196

URL: http://svn.apache.org/viewvc?rev=707196&view=rev
Log:
Fix for TUSCANY-2651: Merge the fix from trunk

Modified:
    tuscany/branches/sca-java-1.3.3/modules/xsd-xml/src/main/java/org/apache/tuscany/sca/xsd/xml/XSDModelResolver.java

Modified: tuscany/branches/sca-java-1.3.3/modules/xsd-xml/src/main/java/org/apache/tuscany/sca/xsd/xml/XSDModelResolver.java
URL: http://svn.apache.org/viewvc/tuscany/branches/sca-java-1.3.3/modules/xsd-xml/src/main/java/org/apache/tuscany/sca/xsd/xml/XSDModelResolver.java?rev=707196&r1=707195&r2=707196&view=diff
==============================================================================
--- tuscany/branches/sca-java-1.3.3/modules/xsd-xml/src/main/java/org/apache/tuscany/sca/xsd/xml/XSDModelResolver.java (original)
+++ tuscany/branches/sca-java-1.3.3/modules/xsd-xml/src/main/java/org/apache/tuscany/sca/xsd/xml/XSDModelResolver.java Wed Oct 22 14:16:17 2008
@@ -49,6 +49,7 @@
  * @version $Rev$ $Date$
  */
 public class XSDModelResolver implements ModelResolver {
+    private static final String AGGREGATED_XSD = "http://tuscany.apache.org/aggregated.xsd";
     private XSDFactory factory;
     private Contribution contribution;
     private Map<String, List<XSDefinition>> map = new HashMap<String, List<XSDefinition>>();
@@ -166,6 +167,12 @@
             }
             // Read an XSD document
             InputSource xsd = XMLDocumentHelper.getInputSource(definition.getLocation().toURL());
+            for (XmlSchema d : schemaCollection.getXmlSchemas()) {
+                if (d.getTargetNamespace().equals(definition.getNamespace())) {
+                    if (d.getSourceURI().equals(definition.getLocation().toString()))
+                        return;
+                }
+            }
             XmlSchema schema = schemaCollection.read(xsd, null);
             definition.setSchemaCollection(schemaCollection);
             definition.setSchema(schema);
@@ -193,10 +200,25 @@
             loadOnDemand(d);
         }
         String ns = definitions.get(0).getNamespace();
-        XmlSchema facade = new XmlSchema(ns, schemaCollection);
+        
+        XmlSchema facade = null;
+        // Check if the facade XSD is already in the collection
+        for (XmlSchema s : schemaCollection.getXmlSchema(AGGREGATED_XSD)) {
+            if (ns.equals(s.getTargetNamespace())) {
+                facade = s;
+                break;
+            }
+        }
+        if (facade == null) {
+            // This will add the facade into the collection
+            facade = new XmlSchema(ns, AGGREGATED_XSD, schemaCollection);
+        }
 
         for (XmlSchema d : schemaCollection.getXmlSchemas()) {
             if (ns.equals(d.getTargetNamespace())) {
+                if (d == facade) {
+                    continue;
+                }
                 XmlSchemaInclude include = new XmlSchemaInclude();
                 include.setSchema(d);
                 include.setSourceURI(d.getSourceURI());