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);