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 2010/05/06 12:27:49 UTC

svn commit: r941644 - /tuscany/sca-java-2.x/trunk/modules/xsd/src/main/java/org/apache/tuscany/sca/xsd/xml/XSDModelResolver.java

Author: slaws
Date: Thu May  6 10:27:49 2010
New Revision: 941644

URL: http://svn.apache.org/viewvc?rev=941644&view=rev
Log:
TUSCANY-3546

Modified:
    tuscany/sca-java-2.x/trunk/modules/xsd/src/main/java/org/apache/tuscany/sca/xsd/xml/XSDModelResolver.java

Modified: tuscany/sca-java-2.x/trunk/modules/xsd/src/main/java/org/apache/tuscany/sca/xsd/xml/XSDModelResolver.java
URL: http://svn.apache.org/viewvc/tuscany/sca-java-2.x/trunk/modules/xsd/src/main/java/org/apache/tuscany/sca/xsd/xml/XSDModelResolver.java?rev=941644&r1=941643&r2=941644&view=diff
==============================================================================
--- tuscany/sca-java-2.x/trunk/modules/xsd/src/main/java/org/apache/tuscany/sca/xsd/xml/XSDModelResolver.java (original)
+++ tuscany/sca-java-2.x/trunk/modules/xsd/src/main/java/org/apache/tuscany/sca/xsd/xml/XSDModelResolver.java Thu May  6 10:27:49 2010
@@ -95,6 +95,15 @@ public class XSDModelResolver implements
         
         // Lookup a definition for the given namespace, within the contribution
         List<XSDefinition> list = map.get(namespace);
+        
+        if (list == null ||
+            (list != null && list.size() == 0)){
+            // if no schema is found locally delegate to other
+            // contributions via the imports
+            resolved = resolutionDelegation(namespace, context);
+            return modelClass.cast(resolved);
+        }
+        
         XSDefinition modelXSD = null;
         if (list != null && definition.getDocument() != null) {
             // Set the document for the inline schema
@@ -259,6 +268,37 @@ public class XSDModelResolver implements
         return aggregated;
     }
 
+    private XSDefinition resolutionDelegation(String namespace, ProcessorContext context){
+        // Delegate the resolution to namespace imports
+        XSDefinition resolved = null;                
+        XSDefinition unresolved = new XSDefinitionImpl();
+        unresolved.setUnresolved(true);
+        unresolved.setNamespace(namespace);
+                        
+        for (Import import_ : this.contribution.getImports()) {
+            if (import_ instanceof NamespaceImport) {
+                NamespaceImport namespaceImport = (NamespaceImport)import_;
+                if (namespaceImport.getNamespace().equals(namespace)) {                           
+                    // Delegate the resolution to the namespace import resolver
+                    resolved =
+                        namespaceImport.getModelResolver().resolveModel(XSDefinition.class, (XSDefinition)unresolved, context);
+                    if (!resolved.isUnresolved()) {
+                        return resolved;
+                    }
+                }
+            } else if (import_ instanceof DefaultImport) {
+                // Delegate the resolution to the default import resolver
+                resolved =
+                    import_.getModelResolver().resolveModel(XSDefinition.class, (XSDefinition)unresolved, context);
+                if (!resolved.isUnresolved()) {
+                    return resolved;
+                }
+            }
+        }
+        
+        return resolved;
+    }
+    
     /**
      * URI resolver implementation for XML schema
      */