Author: jsdelfino
Date: Mon May 15 00:17:23 2006
New Revision: 406565

URL: http://svn.apache.org/viewcvs?rev=406565&view=rev
Log:
Fix for TUSCANY-217, pass ResourceLoader to WSDLDefinitionRegistry, this is a 
workaround later we'll need to have app scoped system services

Modified:
    
incubator/tuscany/java/sca/core/src/main/java/org/apache/tuscany/core/loader/WSDLDefinitionRegistry.java
    
incubator/tuscany/java/sca/core/src/main/java/org/apache/tuscany/core/loader/assembly/ImportWSDLLoader.java
    
incubator/tuscany/java/sca/core/src/main/java/org/apache/tuscany/core/loader/assembly/InterfaceWSDLLoader.java
    
incubator/tuscany/java/sca/core/src/main/java/org/apache/tuscany/core/loader/impl/WSDLDefinitionRegistryImpl.java
    
incubator/tuscany/java/sca/core/src/test/java/org/apache/tuscany/core/loader/assembly/InterfaceWSDLLoaderInterfaceStylesTestCase.java
    
incubator/tuscany/java/sca/core/src/test/java/org/apache/tuscany/core/loader/assembly/InterfaceWSDLLoaderTestCase.java

Modified: 
incubator/tuscany/java/sca/core/src/main/java/org/apache/tuscany/core/loader/WSDLDefinitionRegistry.java
URL: 
http://svn.apache.org/viewcvs/incubator/tuscany/java/sca/core/src/main/java/org/apache/tuscany/core/loader/WSDLDefinitionRegistry.java?rev=406565&r1=406564&r2=406565&view=diff
==============================================================================
--- 
incubator/tuscany/java/sca/core/src/main/java/org/apache/tuscany/core/loader/WSDLDefinitionRegistry.java
 (original)
+++ 
incubator/tuscany/java/sca/core/src/main/java/org/apache/tuscany/core/loader/WSDLDefinitionRegistry.java
 Mon May 15 00:17:23 2006
@@ -37,11 +37,12 @@
      *
      * @param namespace the expected namespace, or null if any namespace 
should be allowed
      * @param location  the location to load the definition from
+     * @param resourceLoader the application resource loader
      * @return the loaded Definition
      * @throws IOException   if there was a problem reading the document
      * @throws WSDLException if there was a problem parsing the definition
      */
-    Definition loadDefinition(String namespace, URL location) throws 
IOException, WSDLException;
+    Definition loadDefinition(String namespace, URL location, ResourceLoader 
resourceLoader) throws IOException, WSDLException;
 
     /**
      * Load and register a WSDL definition as specified in a WSDL2.0 
wsdlLocation attribute.
@@ -58,17 +59,19 @@
      * Returns the PortType with the supplied qualified name, or null if no 
such port has been defined.
      *
      * @param name the qualified name of the WSDL portType
+     * @param resourceLoader the application resource loader
      * @return the PortType for the supplied name, or null if none has been 
defined
      */
-    PortType getPortType(QName name);
+    PortType getPortType(QName name, ResourceLoader resourceLoader);
 
     /**
      * Returns the Service with the supplied qualified name, or null if no 
such service has been defined.
      *
      * @param name the qualified name of the WSDL service
+     * @param resourceLoader the application resource loader
      * @return the Service for the supplied name, or null if none has been 
defined
      */
-    Service getService(QName name);
+    Service getService(QName name, ResourceLoader resourceLoader);
     
     
     /**
@@ -76,9 +79,10 @@
      * no WSDL documents have been loaded for the given namespace
      * 
      * @param namespace the namespace to lookup
+     * @param resourceLoader the application resource loader
      * @return The list of definitions that have been loaded for the given 
namespace, or null
      */
-    List<Definition> getDefinitionsForNamespace(String namespace);
+    List<Definition> getDefinitionsForNamespace(String namespace, 
ResourceLoader resourceLoader);
 
 
     /**

Modified: 
incubator/tuscany/java/sca/core/src/main/java/org/apache/tuscany/core/loader/assembly/ImportWSDLLoader.java
URL: 
http://svn.apache.org/viewcvs/incubator/tuscany/java/sca/core/src/main/java/org/apache/tuscany/core/loader/assembly/ImportWSDLLoader.java?rev=406565&r1=406564&r2=406565&view=diff
==============================================================================
--- 
incubator/tuscany/java/sca/core/src/main/java/org/apache/tuscany/core/loader/assembly/ImportWSDLLoader.java
 (original)
+++ 
incubator/tuscany/java/sca/core/src/main/java/org/apache/tuscany/core/loader/assembly/ImportWSDLLoader.java
 Mon May 15 00:17:23 2006
@@ -79,7 +79,7 @@
         }
 
         try {
-            definition = wsdlRegistry.loadDefinition(namespace, wsdlURL);
+            definition = wsdlRegistry.loadDefinition(namespace, wsdlURL, 
resourceLoader);
         } catch (IOException e) {
             SidefileLoadException sfe = new 
SidefileLoadException(e.getMessage());
             sfe.setResourceURI(location);

Modified: 
incubator/tuscany/java/sca/core/src/main/java/org/apache/tuscany/core/loader/assembly/InterfaceWSDLLoader.java
URL: 
http://svn.apache.org/viewcvs/incubator/tuscany/java/sca/core/src/main/java/org/apache/tuscany/core/loader/assembly/InterfaceWSDLLoader.java?rev=406565&r1=406564&r2=406565&view=diff
==============================================================================
--- 
incubator/tuscany/java/sca/core/src/main/java/org/apache/tuscany/core/loader/assembly/InterfaceWSDLLoader.java
 (original)
+++ 
incubator/tuscany/java/sca/core/src/main/java/org/apache/tuscany/core/loader/assembly/InterfaceWSDLLoader.java
 Mon May 15 00:17:23 2006
@@ -18,6 +18,7 @@
 
 import java.io.IOException;
 
+import org.apache.tuscany.common.resource.ResourceLoader;
 import org.apache.tuscany.core.config.ConfigurationLoadException;
 import org.apache.tuscany.core.config.MissingInterfaceException;
 import org.apache.tuscany.core.loader.WSDLDefinitionRegistry;
@@ -56,11 +57,13 @@
         assert AssemblyConstants.INTERFACE_WSDL.equals(reader.getName());
         WSDLServiceContract serviceContract = 
factory.createWSDLServiceContract();
         serviceContract.setScope(Scope.INSTANCE);
+        
+        ResourceLoader resourceLoader = loaderContext.getResourceLoader();
 
         String location = reader.getAttributeValue(WSDLI, WSDLI_LOCATION);
         if (location != null) {
             try {
-                wsdlRegistry.loadDefinition(location, 
loaderContext.getResourceLoader());
+                wsdlRegistry.loadDefinition(location, resourceLoader);
             } catch (IOException e) {
                 throw new MissingInterfaceException(e);
             } catch (WSDLException e) {
@@ -70,18 +73,18 @@
 
         String portTypeURI = reader.getAttributeValue(null, "interface");
         if (portTypeURI != null) {
-            serviceContract.setPortType(getPortType(portTypeURI));
+            serviceContract.setPortType(getPortType(portTypeURI, 
resourceLoader));
         }
 
         portTypeURI = reader.getAttributeValue(null, "callbackInterface");
         if (portTypeURI != null) {
-            serviceContract.setCallbackPortType(getPortType(portTypeURI));
+            serviceContract.setCallbackPortType(getPortType(portTypeURI, 
resourceLoader));
         }
         StAXUtil.skipToEndElement(reader);
         return serviceContract;
     }
 
-    protected PortType getPortType(String uri) throws 
MissingInterfaceException {
+    protected PortType getPortType(String uri, ResourceLoader resourceLoader) 
throws MissingInterfaceException {
         
         // We currently support two syntaxes for specifying a WSDL portType:
         // namespace#portTypeName, this is what we supported in the initial 
contribution, we will
@@ -98,7 +101,7 @@
             localName = fragment;
         }
         QName qname = new QName(namespace, localName);
-        PortType portType = wsdlRegistry.getPortType(qname);
+        PortType portType = wsdlRegistry.getPortType(qname, resourceLoader);
         if (portType == null) {
             throw new MissingInterfaceException(uri);
         }

Modified: 
incubator/tuscany/java/sca/core/src/main/java/org/apache/tuscany/core/loader/impl/WSDLDefinitionRegistryImpl.java
URL: 
http://svn.apache.org/viewcvs/incubator/tuscany/java/sca/core/src/main/java/org/apache/tuscany/core/loader/impl/WSDLDefinitionRegistryImpl.java?rev=406565&r1=406564&r2=406565&view=diff
==============================================================================
--- 
incubator/tuscany/java/sca/core/src/main/java/org/apache/tuscany/core/loader/impl/WSDLDefinitionRegistryImpl.java
 (original)
+++ 
incubator/tuscany/java/sca/core/src/main/java/org/apache/tuscany/core/loader/impl/WSDLDefinitionRegistryImpl.java
 Mon May 15 00:17:23 2006
@@ -24,6 +24,8 @@
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
+import java.util.WeakHashMap;
+
 import javax.wsdl.Definition;
 import javax.wsdl.PortType;
 import javax.wsdl.Service;
@@ -46,8 +48,8 @@
     private final WSDLFactory wsdlFactory;
     private final ExtensionRegistry registry;
 
-    private final Map<URL, Definition> definitionsByLocation = new 
HashMap<URL, Definition>();
-    private final Map<String, List<Definition>> definitionsByNamespace = new 
HashMap<String, List<Definition>>();
+    private final Map<ResourceLoader,Map<URL, Definition>> 
definitionsByLocationByLoader = new WeakHashMap<ResourceLoader,Map<URL, 
Definition>>();
+    private final Map<ResourceLoader,Map<String, List<Definition>>> 
definitionsByNamespaceByLoader = new WeakHashMap<ResourceLoader,Map<String, 
List<Definition>>>();
 
     private Monitor monitor;
 
@@ -86,10 +88,13 @@
                 throw new WSDLException(WSDLException.CONFIGURATION_ERROR, 
"Resource not found: " + uri);
             }
         }
-        return loadDefinition(namespace, url);
+        return loadDefinition(namespace, url, resourceLoader);
     }
 
-    public Definition loadDefinition(String namespace, URL location) throws 
IOException, WSDLException {
+    public Definition loadDefinition(String namespace, URL location, 
ResourceLoader resourceLoader) throws IOException, WSDLException {
+        Map<URL, Definition> definitionsByLocation = 
getDefinitionsByLocation(resourceLoader);
+        Map<String, List<Definition>> definitionsByNamespace = 
getDefinitionsByNamespace(resourceLoader);
+        
         Definition definition = definitionsByLocation.get(location);
         if (definition != null) {
             // return cached copy
@@ -119,12 +124,13 @@
         return definition;
     }
 
-    public List<Definition> getDefinitionsForNamespace(String namespace) {
+    public List<Definition> getDefinitionsForNamespace(String namespace, 
ResourceLoader resourceLoader) {
+        Map<String, List<Definition>> definitionsByNamespace = 
getDefinitionsByNamespace(resourceLoader);
         return definitionsByNamespace.get(namespace);
     }
 
-
-    public PortType getPortType(QName name) {
+    public PortType getPortType(QName name, ResourceLoader resourceLoader) {
+        Map<String, List<Definition>> definitionsByNamespace = 
getDefinitionsByNamespace(resourceLoader);
         String namespace = name.getNamespaceURI();
         List<Definition> definitions = definitionsByNamespace.get(namespace);
         if (definitions == null) {
@@ -139,7 +145,8 @@
         return null;
     }
 
-    public Service getService(QName name) {
+    public Service getService(QName name, ResourceLoader resourceLoader) {
+        Map<String, List<Definition>> definitionsByNamespace = 
getDefinitionsByNamespace(resourceLoader);
         String namespace = name.getNamespaceURI();
         List<Definition> definitions = definitionsByNamespace.get(namespace);
         if (definitions == null) {
@@ -153,7 +160,25 @@
         }
         return null;
     }
+    
+    private Map<String, List<Definition>> 
getDefinitionsByNamespace(ResourceLoader resourceLoader) {
+        Map<String, List<Definition>> map = 
definitionsByNamespaceByLoader.get(resourceLoader);
+        if (map == null) {
+            map = new HashMap<String, List<Definition>>();
+            definitionsByNamespaceByLoader.put(resourceLoader, map);
+        }
+        return map;
+    }
 
+    private Map<URL, Definition> getDefinitionsByLocation(ResourceLoader 
resourceLoader) {
+        Map<URL, Definition> map = 
definitionsByLocationByLoader.get(resourceLoader);
+        if (map == null) {
+            map = new HashMap<URL, Definition>();
+            definitionsByLocationByLoader.put(resourceLoader, map);
+        }
+        return map;
+    }
+    
     public static interface Monitor {
         /**
          * Monitor event emitted immediately before an attempt is made to

Modified: 
incubator/tuscany/java/sca/core/src/test/java/org/apache/tuscany/core/loader/assembly/InterfaceWSDLLoaderInterfaceStylesTestCase.java
URL: 
http://svn.apache.org/viewcvs/incubator/tuscany/java/sca/core/src/test/java/org/apache/tuscany/core/loader/assembly/InterfaceWSDLLoaderInterfaceStylesTestCase.java?rev=406565&r1=406564&r2=406565&view=diff
==============================================================================
--- 
incubator/tuscany/java/sca/core/src/test/java/org/apache/tuscany/core/loader/assembly/InterfaceWSDLLoaderInterfaceStylesTestCase.java
 (original)
+++ 
incubator/tuscany/java/sca/core/src/test/java/org/apache/tuscany/core/loader/assembly/InterfaceWSDLLoaderInterfaceStylesTestCase.java
 Mon May 15 00:17:23 2006
@@ -24,6 +24,8 @@
 import javax.xml.stream.XMLStreamConstants;
 import javax.xml.stream.XMLStreamReader;
 
+import org.apache.tuscany.common.resource.ResourceLoader;
+import org.apache.tuscany.common.resource.impl.ResourceLoaderImpl;
 import org.apache.tuscany.core.loader.impl.WSDLDefinitionRegistryImpl;
 import org.apache.tuscany.model.types.wsdl.WSDLServiceContract;
 import org.apache.tuscany.sdo.util.SDOUtil;
@@ -35,10 +37,11 @@
  */
 public class InterfaceWSDLLoaderInterfaceStylesTestCase extends 
LoaderTestSupport {
     private WSDLDefinitionRegistryImpl wsdlRegistry;
+    private ResourceLoader resourceLoader;
     private ClassLoader oldCL;
 
     public void testInterface() throws Exception {
-        wsdlRegistry.loadDefinition("http://www.interfacestyles.org";, 
getClass().getResource("interfacestyles.wsdl"));
+        wsdlRegistry.loadDefinition("http://www.interfacestyles.org";, 
getClass().getResource("interfacestyles.wsdl"), resourceLoader);
         String xml = "<interface.wsdl 
xmlns='http://www.osoa.org/xmlns/sca/0.9' 
interface='http://www.interfacestyles.org#TestInterfaceStylesService'></interface.wsdl>";
         XMLStreamReader reader = getReader(xml);
         WSDLServiceContract sc = (WSDLServiceContract) registry.load(reader, 
loaderContext);
@@ -63,12 +66,13 @@
     protected void setUp() throws Exception {
         oldCL = Thread.currentThread().getContextClassLoader();
         
Thread.currentThread().setContextClassLoader(getClass().getClassLoader());
+        resourceLoader = new ResourceLoaderImpl(getClass().getClassLoader());
         super.setUp();
         
         wsdlRegistry = new WSDLDefinitionRegistryImpl();
         wsdlRegistry.setMonitor(NULL_MONITOR);
         URL wsdlURL = getClass().getResource("interfacestyles.wsdl");
-        wsdlRegistry.loadDefinition("http://www.interfacestyles.org";, wsdlURL);
+        wsdlRegistry.loadDefinition("http://www.interfacestyles.org";, wsdlURL, 
resourceLoader);
         InterfaceWSDLLoader loader = new InterfaceWSDLLoader();
         loader.setWsdlRegistry(wsdlRegistry);
         registerLoader(loader);

Modified: 
incubator/tuscany/java/sca/core/src/test/java/org/apache/tuscany/core/loader/assembly/InterfaceWSDLLoaderTestCase.java
URL: 
http://svn.apache.org/viewcvs/incubator/tuscany/java/sca/core/src/test/java/org/apache/tuscany/core/loader/assembly/InterfaceWSDLLoaderTestCase.java?rev=406565&r1=406564&r2=406565&view=diff
==============================================================================
--- 
incubator/tuscany/java/sca/core/src/test/java/org/apache/tuscany/core/loader/assembly/InterfaceWSDLLoaderTestCase.java
 (original)
+++ 
incubator/tuscany/java/sca/core/src/test/java/org/apache/tuscany/core/loader/assembly/InterfaceWSDLLoaderTestCase.java
 Mon May 15 00:17:23 2006
@@ -21,6 +21,8 @@
 import javax.xml.stream.XMLStreamException;
 import javax.xml.stream.XMLStreamReader;
 
+import org.apache.tuscany.common.resource.ResourceLoader;
+import org.apache.tuscany.common.resource.impl.ResourceLoaderImpl;
 import org.apache.tuscany.core.config.ConfigurationLoadException;
 import static 
org.apache.tuscany.core.loader.assembly.AssemblyConstants.INTERFACE_WSDL;
 import org.apache.tuscany.core.loader.impl.WSDLDefinitionRegistryImpl;
@@ -31,6 +33,7 @@
  */
 public class InterfaceWSDLLoaderTestCase extends LoaderTestSupport {
     private WSDLDefinitionRegistryImpl wsdlRegistry;
+    private ResourceLoader resourceLoader;
 
     public void testMinimal() throws XMLStreamException, 
ConfigurationLoadException {
         String xml = "<interface.wsdl 
xmlns='http://www.osoa.org/xmlns/sca/0.9'></interface.wsdl>";
@@ -42,7 +45,7 @@
     }
 
     public void testInterface() throws Exception {
-        wsdlRegistry.loadDefinition("http://www.example.org";, 
getClass().getResource("example.wsdl"));
+        wsdlRegistry.loadDefinition("http://www.example.org";, 
getClass().getResource("example.wsdl"), resourceLoader);
         String xml = "<interface.wsdl 
xmlns='http://www.osoa.org/xmlns/sca/0.9' 
interface='http://www.example.org#HelloWorld'></interface.wsdl>";
         XMLStreamReader reader = getReader(xml);
         WSDLServiceContract sc = (WSDLServiceContract) registry.load(reader, 
loaderContext);
@@ -52,7 +55,7 @@
     }
 
     public void testInterfaceWithLocation() throws Exception {
-        wsdlRegistry.loadDefinition("http://www.example.org";, 
getClass().getResource("example.wsdl"));
+        wsdlRegistry.loadDefinition("http://www.example.org";, 
getClass().getResource("example.wsdl"), resourceLoader);
         String xml = "<interface.wsdl 
xmlns='http://www.osoa.org/xmlns/sca/0.9' 
xmlns:wsdli='http://www.w3.org/2006/01/wsdl-instance' " +
                 "wsdli:wsdlLocation='http://www.example.org " + 
getClass().getResource("example.wsdl") + "' "+
                 "interface='http://www.example.org#HelloWorld'"+
@@ -68,7 +71,8 @@
         super.setUp();
         wsdlRegistry = new WSDLDefinitionRegistryImpl();
         wsdlRegistry.setMonitor(NULL_MONITOR);
-        wsdlRegistry.loadDefinition("http://www.example.org";, 
getClass().getResource("example.wsdl"));
+        resourceLoader = new ResourceLoaderImpl(getClass().getClassLoader());
+        wsdlRegistry.loadDefinition("http://www.example.org";, 
getClass().getResource("example.wsdl"), resourceLoader);
         InterfaceWSDLLoader loader = new InterfaceWSDLLoader();
         loader.setWsdlRegistry(wsdlRegistry);
         registerLoader(loader);


Reply via email to