diff options
author | ramkumar <ramkumar@13f79535-47bb-0310-9956-ffa450edef68> | 2009-06-15 11:05:19 +0000 |
---|---|---|
committer | ramkumar <ramkumar@13f79535-47bb-0310-9956-ffa450edef68> | 2009-06-15 11:05:19 +0000 |
commit | 3570ea7c8fba83ef7cb70132b830f0205621360d (patch) | |
tree | c8ed44478281270f7d3ea17fc775341f929844a1 /java/sca/modules/implementation-bpel/src/main/java | |
parent | 83dbdcd69a062a74fb7b7b14ee4ef1174487b6ad (diff) |
Fixes for TUSCANY-3079
git-svn-id: http://svn.us.apache.org/repos/asf/tuscany@784727 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'java/sca/modules/implementation-bpel/src/main/java')
-rw-r--r-- | java/sca/modules/implementation-bpel/src/main/java/org/apache/tuscany/sca/implementation/bpel/xml/BPELDocumentModelResolver.java | 53 |
1 files changed, 40 insertions, 13 deletions
diff --git a/java/sca/modules/implementation-bpel/src/main/java/org/apache/tuscany/sca/implementation/bpel/xml/BPELDocumentModelResolver.java b/java/sca/modules/implementation-bpel/src/main/java/org/apache/tuscany/sca/implementation/bpel/xml/BPELDocumentModelResolver.java index 9e586e1f4f..47f64934b4 100644 --- a/java/sca/modules/implementation-bpel/src/main/java/org/apache/tuscany/sca/implementation/bpel/xml/BPELDocumentModelResolver.java +++ b/java/sca/modules/implementation-bpel/src/main/java/org/apache/tuscany/sca/implementation/bpel/xml/BPELDocumentModelResolver.java @@ -19,7 +19,10 @@ package org.apache.tuscany.sca.implementation.bpel.xml; +import java.util.ArrayList; +import java.util.Collections; import java.util.HashMap; +import java.util.List; import java.util.Map; import javax.xml.namespace.QName; @@ -30,6 +33,7 @@ import org.apache.tuscany.sca.contribution.namespace.NamespaceImport; import org.apache.tuscany.sca.contribution.resolver.ModelResolver; import org.apache.tuscany.sca.core.FactoryExtensionPoint; import org.apache.tuscany.sca.implementation.bpel.BPELProcessDefinition; +import org.apache.tuscany.sca.interfacedef.wsdl.WSDLDefinition; /** * A Model Resolver for BPEL process models. @@ -56,27 +60,50 @@ public class BPELDocumentModelResolver implements ModelResolver { public <T> T resolveModel(Class<T> modelClass, T unresolved) { - // Lookup a definition for the given namespace - QName qname = ((BPELProcessDefinition)unresolved).getName(); - BPELProcessDefinition resolved = (BPELProcessDefinition) map.get(qname); - if (resolved != null) { - return modelClass.cast(resolved); - } - - // No definition found, delegate the resolution to the imports + BPELProcessDefinition resolved = null; + QName qname = ((BPELProcessDefinition)unresolved).getName(); + + // Lookup a definition for the given namespace, from imports + List<String> locations = new ArrayList<String>(); + // Collection of namespace imports with location + Map<String, NamespaceImport> locationMap = new HashMap<String, NamespaceImport>(); for (Import import_ : this.contribution.getImports()) { if (import_ instanceof NamespaceImport) { NamespaceImport namespaceImport = (NamespaceImport)import_; if (namespaceImport.getNamespace().equals(qname.getNamespaceURI())) { - - // Delegate the resolution to the import resolver - resolved = namespaceImport.getModelResolver().resolveModel(BPELProcessDefinition.class, (BPELProcessDefinition)unresolved); - if (!resolved.isUnresolved()) { - return modelClass.cast(resolved); + if (namespaceImport.getLocation() == null) { + // Delegate the resolution to the import resolver + resolved = namespaceImport.getModelResolver().resolveModel(BPELProcessDefinition.class, (BPELProcessDefinition)unresolved); + if (!resolved.isUnresolved()) { + return modelClass.cast(resolved); + } + } else { + // We might have multiple imports for the same namespace, + // need to search them in lexical order. + locations.add(namespaceImport.getLocation()); } } } } + // Search namespace imports with locations in lexical order + Collections.sort(locations); + for (String location : locations) { + NamespaceImport namespaceImport = (NamespaceImport)locationMap.get(location); + // Delegate the resolution to the namespace import resolver + resolved = + namespaceImport.getModelResolver().resolveModel(BPELProcessDefinition.class, (BPELProcessDefinition)unresolved); + if (!resolved.isUnresolved()) { + return modelClass.cast(resolved); + } + } + + + // Not found, Lookup a definition for the given namespace, within contribution + resolved = (BPELProcessDefinition) map.get(qname); + if (resolved != null) { + return modelClass.cast(resolved); + } + return (T)unresolved; } |