Author: slaws
Date: Tue May 11 18:40:54 2010
New Revision: 943224
URL: http://svn.apache.org/viewvc?rev=943224&view=rev
Log:
TUSCANY-3553 - add the SCA spec schema to the system contribution so that users
can use SCA schema in property types. I don't know why people would want to do
that but this capability seems to be the intention of the spec. This slows down
the loading of any contributions that use these types, as the schema are
loaded, but has little affect if you don't. I'm still looking at whether the
local scheme optimization I added is effective but decided to check in as this
fault is stopping the otests from running properly currently.
Modified:
tuscany/sca-java-2.x/trunk/modules/deployment/META-INF/MANIFEST.MF
tuscany/sca-java-2.x/trunk/modules/deployment/pom.xml
tuscany/sca-java-2.x/trunk/modules/deployment/src/main/java/org/apache/tuscany/sca/deployment/impl/DeployerImpl.java
tuscany/sca-java-2.x/trunk/modules/xsd/src/main/java/org/apache/tuscany/sca/xsd/xml/XSDModelResolver.java
Modified: tuscany/sca-java-2.x/trunk/modules/deployment/META-INF/MANIFEST.MF
URL:
http://svn.apache.org/viewvc/tuscany/sca-java-2.x/trunk/modules/deployment/META-INF/MANIFEST.MF?rev=943224&r1=943223&r2=943224&view=diff
==============================================================================
--- tuscany/sca-java-2.x/trunk/modules/deployment/META-INF/MANIFEST.MF
(original)
+++ tuscany/sca-java-2.x/trunk/modules/deployment/META-INF/MANIFEST.MF Tue May
11 18:40:54 2010
@@ -30,6 +30,7 @@ Import-Package: javax.xml.namespace,
javax.xml.stream,
org.apache.tuscany.sca.assembly;version="2.0.0",
org.apache.tuscany.sca.assembly.builder;version="2.0.0",
+ org.apache.tuscany.sca.assembly.xsd;version="2.0.0",
org.apache.tuscany.sca.common.java.io;version="2.0.0",
org.apache.tuscany.sca.common.xml.stax;version="2.0.0",
org.apache.tuscany.sca.contribution;version="2.0.0",
@@ -43,6 +44,7 @@ Import-Package: javax.xml.namespace,
org.apache.tuscany.sca.definitions.xml;version="2.0.0",
org.apache.tuscany.sca.deployment;version="2.0.0",
org.apache.tuscany.sca.monitor;version="2.0.0",
+ org.apache.tuscany.sca.xsd;version="2.0.0",
org.oasisopen.sca.annotation;version="2.0.0";resolution:=optional
Bundle-SymbolicName: org.apache.tuscany.sca.deployment
Bundle-DocURL: http://www.apache.org/
Modified: tuscany/sca-java-2.x/trunk/modules/deployment/pom.xml
URL:
http://svn.apache.org/viewvc/tuscany/sca-java-2.x/trunk/modules/deployment/pom.xml?rev=943224&r1=943223&r2=943224&view=diff
==============================================================================
--- tuscany/sca-java-2.x/trunk/modules/deployment/pom.xml (original)
+++ tuscany/sca-java-2.x/trunk/modules/deployment/pom.xml Tue May 11 18:40:54
2010
@@ -52,16 +52,21 @@
<dependency>
<groupId>org.apache.tuscany.sca</groupId>
- <artifactId>tuscany-builder</artifactId>
+ <artifactId>tuscany-assembly-xsd</artifactId>
<version>2.0-SNAPSHOT</version>
- <scope>runtime</scope>
- </dependency>
+ </dependency>
<dependency>
<groupId>org.apache.tuscany.sca</groupId>
- <artifactId>tuscany-assembly-xsd</artifactId>
+ <artifactId>tuscany-xsd</artifactId>
<version>2.0-SNAPSHOT</version>
- <scope>test</scope>
+ </dependency>
+
+ <dependency>
+ <groupId>org.apache.tuscany.sca</groupId>
+ <artifactId>tuscany-builder</artifactId>
+ <version>2.0-SNAPSHOT</version>
+ <scope>runtime</scope>
</dependency>
<dependency>
@@ -69,7 +74,9 @@
<artifactId>tuscany-implementation-java</artifactId>
<version>2.0-SNAPSHOT</version>
<scope>test</scope>
- </dependency>
+ </dependency>
+
+
</dependencies>
Modified:
tuscany/sca-java-2.x/trunk/modules/deployment/src/main/java/org/apache/tuscany/sca/deployment/impl/DeployerImpl.java
URL:
http://svn.apache.org/viewvc/tuscany/sca-java-2.x/trunk/modules/deployment/src/main/java/org/apache/tuscany/sca/deployment/impl/DeployerImpl.java?rev=943224&r1=943223&r2=943224&view=diff
==============================================================================
---
tuscany/sca-java-2.x/trunk/modules/deployment/src/main/java/org/apache/tuscany/sca/deployment/impl/DeployerImpl.java
(original)
+++
tuscany/sca-java-2.x/trunk/modules/deployment/src/main/java/org/apache/tuscany/sca/deployment/impl/DeployerImpl.java
Tue May 11 18:40:54 2010
@@ -43,6 +43,7 @@ import org.apache.tuscany.sca.assembly.b
import org.apache.tuscany.sca.assembly.builder.BuilderExtensionPoint;
import org.apache.tuscany.sca.assembly.builder.CompositeBuilder;
import org.apache.tuscany.sca.assembly.builder.CompositeBuilderException;
+import org.apache.tuscany.sca.assembly.xsd.Constants;
import org.apache.tuscany.sca.common.xml.stax.StAXHelper;
import org.apache.tuscany.sca.contribution.Artifact;
import org.apache.tuscany.sca.contribution.Contribution;
@@ -77,6 +78,8 @@ import org.apache.tuscany.sca.definition
import org.apache.tuscany.sca.deployment.Deployer;
import org.apache.tuscany.sca.monitor.Monitor;
import org.apache.tuscany.sca.monitor.MonitorFactory;
+import org.apache.tuscany.sca.xsd.XSDFactory;
+import org.apache.tuscany.sca.xsd.XSDefinition;
/**
*
@@ -98,11 +101,14 @@ public class DeployerImpl implements Dep
protected Definitions systemDefinitions;
protected ExtensibleURLArtifactProcessor artifactProcessor;
protected ExtensibleStAXArtifactProcessor staxProcessor;
+ protected ValidationSchemaExtensionPoint validationSchema;
protected MonitorFactory monitorFactory;
protected static final String DEPLOYER_IMPL_VALIDATION_MESSAGES =
"org.apache.tuscany.sca.deployment.impl.deployer-impl-validation-messages";
+
+ public static final QName XSD = new
QName("http://www.w3.org/2001/XMLSchema", "schema");
/**
* @param registry
@@ -301,6 +307,9 @@ public class DeployerImpl implements Dep
compositeBuilder =
compositeBuilders.getCompositeBuilder("org.apache.tuscany.sca.assembly.builder.CompositeBuilder");
+ // get the validation schema
+ validationSchema =
registry.getExtensionPoint(ValidationSchemaExtensionPoint.class);
+
loadSystemContribution(new
ProcessorContext(monitorFactory.createMonitor()));
inited = true;
@@ -341,7 +350,7 @@ public class DeployerImpl implements Dep
artifact.setLocation("Derived");
artifact.setModel(systemDefinitions);
artifacts.add(artifact);
-
+
// now resolve and add the system contribution
try {
contributionProcessor.resolve(systemContribution, modelResolver,
context);
@@ -355,6 +364,7 @@ public class DeployerImpl implements Dep
Contribution contribution = contributionFactory.createContribution();
contribution.setURI(systemContribution.getURI());
contribution.setLocation(systemContribution.getLocation());
+
ModelResolver modelResolver = new
ExtensibleModelResolver(contribution, modelResolvers, modelFactories);
contribution.setModelResolver(modelResolver);
contribution.setUnresolved(true);
@@ -362,6 +372,7 @@ public class DeployerImpl implements Dep
DefinitionsFactory definitionsFactory =
modelFactories.getFactory(DefinitionsFactory.class);
Definitions definitions = definitionsFactory.createDefinitions();
DefinitionsUtil.aggregate(systemDefinitions, definitions, monitor);
+
// create an artifact to represent the system defintions and
// add it to the contribution
List<Artifact> artifacts = contribution.getArtifacts();
@@ -370,6 +381,44 @@ public class DeployerImpl implements Dep
artifact.setLocation("Derived");
artifact.setModel(definitions);
artifacts.add(artifact);
+
+ // create resolver entries to represent the SCA schema. We don't
create artifacts
+ // in the contribution as the XSD schema are only actually loaded on
demand
+ // so as long as they are in the model resolver we are set. We do it
on the clone
+ // so that every copy of the system contribution has the schema
+ ProcessorContext context = new ProcessorContext(monitor);
+ XSDFactory xsdFactory = modelFactories.getFactory(XSDFactory.class);
+ List<String> scaSchemas = validationSchema.getSchemas();
+ for (String scaSchemaLocation : scaSchemas){
+ try {
+ URL scaSchemaURL = new URL(scaSchemaLocation);
+ String namespace = staxHelper.readAttribute(scaSchemaURL, XSD,
"targetNamespace");
+
+ // if this is the SCA schema store it in the system
contribution
+ if (namespace.equals(Constants.SCA11_TUSCANY_NS)){
+
+ // add the schema to the model resolver under the Tuscany
namespace
+ XSDefinition scaSchema = xsdFactory.createXSDefinition();
+ scaSchema.setUnresolved(true);
+ scaSchema.setNamespace(namespace);
+ scaSchema.setLocation(scaSchemaURL.toURI());
+ scaSchema.setUnresolved(false);
+// modelResolver.addModel(scaSchema, context);
+
+ // we know that the SCA schema's are referenced form the
Tuscany schemas so
+ // register the schema under the SCA namsepace too
+ scaSchema = xsdFactory.createXSDefinition();
+ scaSchema.setUnresolved(true);
+ scaSchema.setNamespace(Constants.SCA11_NS);
+ scaSchema.setLocation(scaSchemaURL.toURI());
+ scaSchema.setUnresolved(false);
+ modelResolver.addModel(scaSchema, context);
+ }
+ } catch (Exception ex) {
+ throw new IllegalStateException(ex);
+ }
+ }
+
return contribution;
}
Modified:
tuscany/sca-java-2.x/trunk/modules/xsd/src/main/java/org/apache/tuscany/sca/xsd/xml/XSDModelResolver.java
URL:
http://svn.apache.org/viewvc/tuscany/sca-java-2.x/trunk/modules/xsd/src/main/java/org/apache/tuscany/sca/xsd/xml/XSDModelResolver.java?rev=943224&r1=943223&r2=943224&view=diff
==============================================================================
---
tuscany/sca-java-2.x/trunk/modules/xsd/src/main/java/org/apache/tuscany/sca/xsd/xml/XSDModelResolver.java
(original)
+++
tuscany/sca-java-2.x/trunk/modules/xsd/src/main/java/org/apache/tuscany/sca/xsd/xml/XSDModelResolver.java
Tue May 11 18:40:54 2010
@@ -29,6 +29,7 @@ import java.util.HashMap;
import java.util.List;
import java.util.Map;
+import org.apache.tuscany.sca.assembly.xsd.Constants;
import org.apache.tuscany.sca.common.xml.XMLDocumentHelper;
import org.apache.tuscany.sca.contribution.Artifact;
import org.apache.tuscany.sca.contribution.Contribution;
@@ -365,7 +366,14 @@ public class XSDModelResolver implements
return new InputSource(schemaLocation);
}
} else {
- url = new URL(new URL(baseUri), schemaLocation);
+ // look to see whether Tuscany has a local version of the
+ // required schema. It can load the local version rather
+ // than going out to the network in order to improve
performance
+ url = Constants.CACHED_XSDS.get(targetNamespace);
+
+ if (url == null) {
+ url = new URL(new URL(baseUri), schemaLocation);
+ }
}
return XMLDocumentHelper.getInputSource(url);
} catch (IOException e) {