diff options
Diffstat (limited to 'sca-java-2.x/trunk/modules/deployment/src')
-rw-r--r-- | sca-java-2.x/trunk/modules/deployment/src/main/java/org/apache/tuscany/sca/deployment/impl/DeployerImpl.java | 51 |
1 files changed, 50 insertions, 1 deletions
diff --git a/sca-java-2.x/trunk/modules/deployment/src/main/java/org/apache/tuscany/sca/deployment/impl/DeployerImpl.java b/sca-java-2.x/trunk/modules/deployment/src/main/java/org/apache/tuscany/sca/deployment/impl/DeployerImpl.java index a510219501..b356df0f35 100644 --- a/sca-java-2.x/trunk/modules/deployment/src/main/java/org/apache/tuscany/sca/deployment/impl/DeployerImpl.java +++ b/sca-java-2.x/trunk/modules/deployment/src/main/java/org/apache/tuscany/sca/deployment/impl/DeployerImpl.java @@ -43,6 +43,7 @@ import org.apache.tuscany.sca.assembly.builder.BuilderContext; 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.definitions.xml.DefinitionsExtensionPoint; 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 Deployer { 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 Deployer { 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 Deployer { 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 Deployer { 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 Deployer { 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 Deployer { 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; } |