From 73ea7b3370913fc111676e1fe82cb27d49d3ad1a Mon Sep 17 00:00:00 2001 From: slaws Date: Thu, 6 May 2010 10:27:49 +0000 Subject: TUSCANY-3546 git-svn-id: http://svn.us.apache.org/repos/asf/tuscany@941644 13f79535-47bb-0310-9956-ffa450edef68 --- .../tuscany/sca/xsd/xml/XSDModelResolver.java | 40 ++++++++++++++++++++++ 1 file changed, 40 insertions(+) (limited to 'sca-java-2.x/trunk/modules/xsd/src/main') diff --git a/sca-java-2.x/trunk/modules/xsd/src/main/java/org/apache/tuscany/sca/xsd/xml/XSDModelResolver.java b/sca-java-2.x/trunk/modules/xsd/src/main/java/org/apache/tuscany/sca/xsd/xml/XSDModelResolver.java index 2ae37bc520..b9cb4cde2d 100644 --- a/sca-java-2.x/trunk/modules/xsd/src/main/java/org/apache/tuscany/sca/xsd/xml/XSDModelResolver.java +++ b/sca-java-2.x/trunk/modules/xsd/src/main/java/org/apache/tuscany/sca/xsd/xml/XSDModelResolver.java @@ -95,6 +95,15 @@ public class XSDModelResolver implements ModelResolver { // Lookup a definition for the given namespace, within the contribution List 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 ModelResolver { 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 */ -- cgit v1.2.3