summaryrefslogtreecommitdiffstats
path: root/branches/sca-java-1.x/modules/implementation-spring/src/main/java/org/apache/tuscany/sca
diff options
context:
space:
mode:
Diffstat (limited to 'branches/sca-java-1.x/modules/implementation-spring/src/main/java/org/apache/tuscany/sca')
-rw-r--r--branches/sca-java-1.x/modules/implementation-spring/src/main/java/org/apache/tuscany/sca/implementation/spring/SpringImplementation.java6
-rw-r--r--branches/sca-java-1.x/modules/implementation-spring/src/main/java/org/apache/tuscany/sca/implementation/spring/introspect/SpringXMLComponentTypeLoader.java108
-rw-r--r--branches/sca-java-1.x/modules/implementation-spring/src/main/java/org/apache/tuscany/sca/implementation/spring/invocation/SpringContextStub.java4
-rw-r--r--branches/sca-java-1.x/modules/implementation-spring/src/main/java/org/apache/tuscany/sca/implementation/spring/xml/SpringImplementationProcessor.java11
4 files changed, 65 insertions, 64 deletions
diff --git a/branches/sca-java-1.x/modules/implementation-spring/src/main/java/org/apache/tuscany/sca/implementation/spring/SpringImplementation.java b/branches/sca-java-1.x/modules/implementation-spring/src/main/java/org/apache/tuscany/sca/implementation/spring/SpringImplementation.java
index bee0e462fc..61b707b1e1 100644
--- a/branches/sca-java-1.x/modules/implementation-spring/src/main/java/org/apache/tuscany/sca/implementation/spring/SpringImplementation.java
+++ b/branches/sca-java-1.x/modules/implementation-spring/src/main/java/org/apache/tuscany/sca/implementation/spring/SpringImplementation.java
@@ -44,7 +44,7 @@ public class SpringImplementation extends ImplementationImpl implements Implemen
// The location attribute which points to the Spring application-context XML file
private String location;
// The application-context file as a Spring Resource
- private URL resource;
+ private List<URL> resource;
private ComponentType componentType;
// Mapping of Services to Beans
private Hashtable<String, SpringBeanElement> serviceMap;
@@ -78,11 +78,11 @@ public class SpringImplementation extends ImplementationImpl implements Implemen
return;
}
- public void setResource(URL resource) {
+ public void setResource(List<URL> resource) {
this.resource = resource;
}
- public URL getResource() {
+ public List<URL> getResource() {
return resource;
}
diff --git a/branches/sca-java-1.x/modules/implementation-spring/src/main/java/org/apache/tuscany/sca/implementation/spring/introspect/SpringXMLComponentTypeLoader.java b/branches/sca-java-1.x/modules/implementation-spring/src/main/java/org/apache/tuscany/sca/implementation/spring/introspect/SpringXMLComponentTypeLoader.java
index 4df4e8c964..7cbe3ee831 100644
--- a/branches/sca-java-1.x/modules/implementation-spring/src/main/java/org/apache/tuscany/sca/implementation/spring/introspect/SpringXMLComponentTypeLoader.java
+++ b/branches/sca-java-1.x/modules/implementation-spring/src/main/java/org/apache/tuscany/sca/implementation/spring/introspect/SpringXMLComponentTypeLoader.java
@@ -51,7 +51,6 @@ import org.apache.tuscany.sca.assembly.Multiplicity;
import org.apache.tuscany.sca.assembly.Property;
import org.apache.tuscany.sca.assembly.Reference;
import org.apache.tuscany.sca.assembly.Service;
-import org.apache.tuscany.sca.assembly.impl.ServiceImpl;
import org.apache.tuscany.sca.contribution.Artifact;
import org.apache.tuscany.sca.contribution.ContributionFactory;
import org.apache.tuscany.sca.contribution.ModelFactoryExtensionPoint;
@@ -157,21 +156,23 @@ public class SpringXMLComponentTypeLoader {
List<SpringSCAPropertyElement> scaproperties = new ArrayList<SpringSCAPropertyElement>();
URL resource;
-
+ List<URL> contextResources = new ArrayList<URL>();
String contextPath = implementation.getLocation();
try {
resource = resolveLocation(resolver, contextPath);
- resource = getApplicationContextResource(resource);
+ contextResources = getApplicationContextResource(resource);
implementation.setClassLoader(new ContextClassLoader(resolver));
- implementation.setResource(resource);
+ implementation.setResource(contextResources);
// The URI is used to uniquely identify the Implementation
implementation.setURI(resource.toString());
- reader = xmlInputFactory.createXMLStreamReader(resource.openStream());
-
- // System.out.println("Spring TypeLoader - starting to read context file");
- readContextDefinition(resolver, reader, contextPath, beans, services, references, scaproperties);
+
+ for (URL contextResource : contextResources) {
+ reader = xmlInputFactory.createXMLStreamReader(contextResource.openStream());
+ // System.out.println("Spring TypeLoader - starting to read context file");
+ readContextDefinition(resolver, reader, contextPath, beans, services, references, scaproperties);
+ }
} catch (IOException e) {
throw new ContributionReadException(e);
@@ -215,7 +216,7 @@ public class SpringXMLComponentTypeLoader {
private XMLStreamReader getApplicationContextReader(ModelResolver resolver, String location) throws ContributionReadException {
try {
- URL resource = getApplicationContextResource(resolveLocation(resolver, location));
+ URL resource = getApplicationContextResource(resolveLocation(resolver, location)).get(0);
XMLStreamReader reader =
xmlInputFactory.createXMLStreamReader(resource.openStream());
return reader;
@@ -338,13 +339,6 @@ public class SpringXMLComponentTypeLoader {
if (reader.getAttributeValue(null, "value") != null) {
String value = reader.getAttributeValue(null, "value");
constructorArg.addValue(value);
- if ((value.indexOf(".xml") != -1)) {
- if (bean.getClassName().indexOf(".ClassPathXmlApplicationContext") != -1) {
- XMLStreamReader creader = getApplicationContextReader(resolver, value);
- // Read the context definition for the constructor-arg resources
- readContextDefinition(resolver, creader, contextPath, beans, services, references, scaproperties);
- }
- }
}
bean.addCustructorArgs(constructorArg);
} else if (SpringImplementationConstants.REF_ELEMENT.equals(qname)) {
@@ -356,17 +350,8 @@ public class SpringXMLComponentTypeLoader {
} else if (SpringImplementationConstants.VALUE_ELEMENT.equals(qname)) {
String value = reader.getElementText();
// Check if the parent element is a constructor-arg
- if (constructorArg != null) {
+ if (constructorArg != null)
constructorArg.addValue(value);
- // Identify the XML resource specified for the constructor-arg element
- if ((value.indexOf(".xml") != -1)) {
- if (bean.getClassName().indexOf(".ClassPathXmlApplicationContext") != -1) {
- XMLStreamReader creader = getApplicationContextReader(resolver, value);
- // Read the context definition for the constructor-arg resources
- readContextDefinition(resolver, creader, contextPath, beans, services, references, scaproperties);
- }
- }
- }
} // end if
break;
case END_ELEMENT:
@@ -568,10 +553,10 @@ public class SpringXMLComponentTypeLoader {
Class<?> interfaze = resolveClass(resolver, paramType);
// Create a component type reference/property if the constructor-arg element has a
// type attribute OR index attribute declared...
- if ((conArgElement.getType() != null && paramType.equals(conArgElement.getType())) ||
+ if ((conArgElement.getType() != null && paramType.equals(conArgElement.getType())) ||
(conArgElement.getIndex() != -1 && (conArgElement.getIndex() == parameter.getIndex())) ||
(conArgElement.getAutoIndex() == parameter.getIndex()))
- {
+ {
if (parameter.getClassifer().getName().equals("org.osoa.sca.annotations.Reference")) {
Reference theReference = createReference(interfaze, conArgElement.getRef());
componentType.getReferences().add(theReference);
@@ -667,19 +652,19 @@ public class SpringXMLComponentTypeLoader {
* @param locationAttr - the location attribute from the <implementation.spring../> element
* @param cl - the ClassLoader for the Spring implementation
*/
- protected URL getApplicationContextResource(URL url)
+ protected List<URL> getApplicationContextResource(URL url)
throws ContributionReadException {
File manifestFile = null;
File appXmlFile;
File locationFile = null;
+ List<URL> appCtxResources = new ArrayList<URL>();
if (url != null) {
String path = url.getPath();
locationFile = new File(path);
} else {
- throw new ContributionReadException(
- "SpringXMLLoader getApplicationContextResource: " + "unable to find resource file "
- + url);
+ throw new ContributionReadException("SpringXMLComponentTypeLoader getApplicationContextResource: "
+ + "unable to find resource file " + url);
}
if (locationFile.isDirectory()) {
@@ -689,18 +674,23 @@ public class SpringXMLComponentTypeLoader {
Manifest mf = new Manifest(new FileInputStream(manifestFile));
Attributes mainAttrs = mf.getMainAttributes();
String appCtxPath = mainAttrs.getValue("Spring-Context");
- if (appCtxPath != null) {
- appXmlFile = new File(locationFile, appCtxPath);
- if (appXmlFile.exists()) {
- return appXmlFile.toURL();
- }
+ if (appCtxPath != null) {
+ String[] cxtPaths = appCtxPath.split(";");
+ for (String path : cxtPaths) {
+ appXmlFile = new File(locationFile, path);
+ if (appXmlFile.exists()) {
+ appCtxResources.add(appXmlFile.toURI().toURL());
+ }
+ }
+ return appCtxResources;
}
}
// no manifest-specified Spring context, use default
appXmlFile = new File(locationFile, "META-INF" + File.separator + "spring"
+ File.separator + SpringImplementationConstants.APPLICATION_CONTEXT);
if (appXmlFile.exists()) {
- return appXmlFile.toURL();
+ appCtxResources.add(appXmlFile.toURI().toURL());
+ return appCtxResources;
}
} catch (IOException e) {
throw new ContributionReadException("Error reading manifest " + manifestFile);
@@ -715,18 +705,22 @@ public class SpringXMLComponentTypeLoader {
Attributes mainAttrs = mf.getMainAttributes();
String appCtxPath = mainAttrs.getValue("Spring-Context");
if (appCtxPath != null) {
- je = jf.getJarEntry(appCtxPath);
- if (je != null) {
- // TODO return a Spring specific Resource type for jars
- return new URL("jar:" + locationFile.toURI().toURL() + "!/" + appCtxPath);
- }
+ String[] cxtPaths = appCtxPath.split(";");
+ for (String path : cxtPaths) {
+ je = jf.getJarEntry(path);
+ if (je != null) {
+ appCtxResources.add(new URL("jar:" + locationFile.toURI().toURL() + "!/" + appCtxPath));
+ }
+ }
+ return appCtxResources;
}
}
// Look for the default applicaiton-context.xml file, when MANIFEST.MF is absent.
je = jf.getJarEntry("META-INF" + "/" + "spring" + "/" + SpringImplementationConstants.APPLICATION_CONTEXT);
if (je != null) {
- return new URL("jar:" + locationFile.toURI().toURL() + "!/" +
- "META-INF" + "/" + "spring" + "/" + SpringImplementationConstants.APPLICATION_CONTEXT);
+ appCtxResources.add(new URL("jar:" + locationFile.toURI().toURL() + "!/" +
+ "META-INF" + "/" + "spring" + "/" + SpringImplementationConstants.APPLICATION_CONTEXT));
+ return appCtxResources;
}
} catch (IOException e) {
// TODO: create a more appropriate exception type
@@ -736,7 +730,8 @@ public class SpringXMLComponentTypeLoader {
}
else {
if (locationFile.getName().endsWith(".xml")) {
- return url;
+ appCtxResources.add(url);
+ return appCtxResources;
}
else {
// Deal with the directory inside a jar file, in case the contribution itself is a JAR file.
@@ -751,18 +746,23 @@ public class SpringXMLComponentTypeLoader {
Attributes mainAttrs = mf.getMainAttributes();
String appCtxPath = mainAttrs.getValue("Spring-Context");
if (appCtxPath != null) {
- je = jf.getJarEntry(url.getPath().substring(url.getPath().indexOf("!/")+2) + "/" + appCtxPath);
- if (je != null) {
- return new URL("jar:" + url.getPath() + "/" + appCtxPath);
- }
+ String[] cxtPaths = appCtxPath.split(";");
+ for (String path : cxtPaths) {
+ je = jf.getJarEntry(url.getPath().substring(url.getPath().indexOf("!/")+2) + "/" + path);
+ if (je != null) {
+ appCtxResources.add(new URL("jar:" + url.getPath() + "/" + path));
+ return appCtxResources;
+ }
+ }
}
}
// Look for the default applicaiton-context.xml file, when MANIFEST.MF is absent.
je = jf.getJarEntry(url.getPath().substring(url.getPath().indexOf("!/")+2) + "/" +
"META-INF" + "/" + "spring" + "/" + SpringImplementationConstants.APPLICATION_CONTEXT);
if (je != null) {
- return new URL("jar:" + url.getPath() + "/" +
- "META-INF" + "/" + "spring" + "/" + SpringImplementationConstants.APPLICATION_CONTEXT);
+ appCtxResources.add(new URL("jar:" + url.getPath() + "/" +
+ "META-INF" + "/" + "spring" + "/" + SpringImplementationConstants.APPLICATION_CONTEXT));
+ return appCtxResources;
}
}
} catch (IOException e) {
@@ -772,8 +772,8 @@ public class SpringXMLComponentTypeLoader {
}
}
- throw new ContributionReadException("SpringXMLLoader getApplicationContextResource: "
- + "META-INF/spring/" + SpringImplementationConstants.APPLICATION_CONTEXT + "not found");
+ throw new ContributionReadException("SpringXMLComponentTypeLoader getApplicationContextResource: "
+ + "unable to read resource file " + url);
} // end method getApplicationContextResource
/**
diff --git a/branches/sca-java-1.x/modules/implementation-spring/src/main/java/org/apache/tuscany/sca/implementation/spring/invocation/SpringContextStub.java b/branches/sca-java-1.x/modules/implementation-spring/src/main/java/org/apache/tuscany/sca/implementation/spring/invocation/SpringContextStub.java
index 55dd1d6027..290bbff171 100644
--- a/branches/sca-java-1.x/modules/implementation-spring/src/main/java/org/apache/tuscany/sca/implementation/spring/invocation/SpringContextStub.java
+++ b/branches/sca-java-1.x/modules/implementation-spring/src/main/java/org/apache/tuscany/sca/implementation/spring/invocation/SpringContextStub.java
@@ -22,7 +22,7 @@ package org.apache.tuscany.sca.implementation.spring.invocation;
import java.lang.reflect.Constructor;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
-import java.net.URL;
+import java.util.List;
import org.apache.tuscany.sca.core.invocation.ProxyFactory;
import org.apache.tuscany.sca.implementation.java.injection.JavaPropertyValueObjectFactory;
@@ -69,7 +69,7 @@ public class SpringContextStub {
Object stub = stubConstructor.newInstance(new SpringImplementationTie(implementation, component, propertyValueObjectFactory));
Class<?> tieClass = Class.forName("org.apache.tuscany.sca.implementation.spring.runtime.context.SpringContextTie", true, cl);
- Constructor<?> tieConstructor = tieClass.getConstructor(new Class<?>[]{stubClass, URL.class, boolean.class, String.class});
+ Constructor<?> tieConstructor = tieClass.getConstructor(new Class<?>[]{stubClass, List.class, boolean.class, String.class});
this.tie = tieConstructor.newInstance(stub, implementation.getResource(), annotationSupport, versionSupported);
this.startMethod = tieClass.getMethod("start");
diff --git a/branches/sca-java-1.x/modules/implementation-spring/src/main/java/org/apache/tuscany/sca/implementation/spring/xml/SpringImplementationProcessor.java b/branches/sca-java-1.x/modules/implementation-spring/src/main/java/org/apache/tuscany/sca/implementation/spring/xml/SpringImplementationProcessor.java
index a4840cfef6..1d941e2a4f 100644
--- a/branches/sca-java-1.x/modules/implementation-spring/src/main/java/org/apache/tuscany/sca/implementation/spring/xml/SpringImplementationProcessor.java
+++ b/branches/sca-java-1.x/modules/implementation-spring/src/main/java/org/apache/tuscany/sca/implementation/spring/xml/SpringImplementationProcessor.java
@@ -31,6 +31,7 @@ import org.apache.tuscany.sca.assembly.ComponentType;
import org.apache.tuscany.sca.assembly.xml.Constants;
import org.apache.tuscany.sca.assembly.xml.PolicyAttachPointProcessor;
import org.apache.tuscany.sca.contribution.ModelFactoryExtensionPoint;
+import org.apache.tuscany.sca.core.ExtensionPointRegistry;
import org.apache.tuscany.sca.contribution.processor.StAXArtifactProcessor;
import org.apache.tuscany.sca.contribution.resolver.ModelResolver;
import org.apache.tuscany.sca.contribution.service.ContributionReadException;
@@ -66,11 +67,11 @@ public class SpringImplementationProcessor implements StAXArtifactProcessor<Spri
private ModelFactoryExtensionPoint factories;
- public SpringImplementationProcessor(ModelFactoryExtensionPoint modelFactories, Monitor monitor) {
- this.factories = modelFactories;
- this.assemblyFactory = modelFactories.getFactory(AssemblyFactory.class);
- this.javaFactory = modelFactories.getFactory(JavaInterfaceFactory.class);
- this.policyFactory = modelFactories.getFactory(PolicyFactory.class);
+ public SpringImplementationProcessor(ExtensionPointRegistry extensionPoints, Monitor monitor) {
+ this.factories = extensionPoints.getExtensionPoint(ModelFactoryExtensionPoint.class);
+ this.assemblyFactory = factories.getFactory(AssemblyFactory.class);
+ this.javaFactory = factories.getFactory(JavaInterfaceFactory.class);
+ this.policyFactory = factories.getFactory(PolicyFactory.class);
this.policyProcessor = new PolicyAttachPointProcessor(policyFactory);
this.monitor = monitor;
}