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
      */


Reply via email to