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


Reply via email to