From da1e0ca172a7b56cd69205b99a1def0dfabb38eb Mon Sep 17 00:00:00 2001 From: rfeng Date: Thu, 26 Mar 2009 22:52:27 +0000 Subject: Add a flag to control if schema validation should be enabled git-svn-id: http://svn.us.apache.org/repos/asf/tuscany@758911 13f79535-47bb-0310-9956-ffa450edef68 --- .../DefaultValidationSchemaExtensionPoint.java | 61 ++++++++++++++-------- .../processor/ValidationSchemaExtensionPoint.java | 29 ++++++---- .../sca/node/osgi/impl/NodeFactoryImpl.java | 43 +++++++++------ 3 files changed, 84 insertions(+), 49 deletions(-) (limited to 'java') diff --git a/java/sca/modules/contribution/src/main/java/org/apache/tuscany/sca/contribution/processor/DefaultValidationSchemaExtensionPoint.java b/java/sca/modules/contribution/src/main/java/org/apache/tuscany/sca/contribution/processor/DefaultValidationSchemaExtensionPoint.java index 9f4094aa12..d278aae06a 100644 --- a/java/sca/modules/contribution/src/main/java/org/apache/tuscany/sca/contribution/processor/DefaultValidationSchemaExtensionPoint.java +++ b/java/sca/modules/contribution/src/main/java/org/apache/tuscany/sca/contribution/processor/DefaultValidationSchemaExtensionPoint.java @@ -6,15 +6,15 @@ * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at - * + * * http://www.apache.org/licenses/LICENSE-2.0 - * + * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations - * under the License. + * under the License. */ package org.apache.tuscany.sca.contribution.processor; @@ -23,6 +23,7 @@ import java.io.FileNotFoundException; import java.io.IOException; import java.net.URL; import java.util.ArrayList; +import java.util.Collections; import java.util.List; import java.util.Set; @@ -30,66 +31,80 @@ import org.apache.tuscany.sca.extensibility.ServiceDeclaration; import org.apache.tuscany.sca.extensibility.ServiceDiscovery; /** - * Default implementation of an extension point for XML schemas. + * Default implementation of an extension point for XML schemas. * * @version $Rev$ $Date$ */ public class DefaultValidationSchemaExtensionPoint implements ValidationSchemaExtensionPoint { - + private boolean enabled; private List schemas = new ArrayList(); private boolean loaded; - + public void addSchema(String uri) { schemas.add(uri); } - + public void removeSchema(String uri) { schemas.remove(uri); } - + /** * Load schema declarations from META-INF/services/ * org.apache.tuscany.sca.contribution.processor.ValidationSchema files */ private synchronized void loadSchemas() { - if (loaded) + if (loaded || (!enabled)) return; // Get the schema declarations - Set schemaDeclarations; + Set schemaDeclarations; try { - schemaDeclarations = ServiceDiscovery.getInstance().getServiceDeclarations("org.apache.tuscany.sca.contribution.processor.ValidationSchema"); + schemaDeclarations = + ServiceDiscovery.getInstance() + .getServiceDeclarations("org.apache.tuscany.sca.contribution.processor.ValidationSchema"); } catch (IOException e) { throw new IllegalStateException(e); - } - + } + // TODO - temp fix to ensure that the schema tuscany-sca.xsd always comes first String tuscanyScaXsd = null; - + // Find each schema - for (ServiceDeclaration schemaDeclaration: schemaDeclarations) { + for (ServiceDeclaration schemaDeclaration : schemaDeclarations) { URL url = schemaDeclaration.getResource(schemaDeclaration.getClassName()); if (url == null) { throw new IllegalArgumentException(new FileNotFoundException(schemaDeclaration.getClassName())); } - - if (url.toString().contains("tuscany-sca.xsd")){ + + if (url.toString().contains("tuscany-sca-1.1.xsd")) { tuscanyScaXsd = url.toString(); } else { schemas.add(url.toString()); } } - - if (tuscanyScaXsd != null){ + + if (tuscanyScaXsd != null) { schemas.add(0, tuscanyScaXsd); } - + loaded = true; } - + public List getSchemas() { - loadSchemas(); - return schemas; + if (enabled) { + loadSchemas(); + return schemas; + } else { + return Collections.emptyList(); + } + } + + public boolean isEnabled() { + return enabled; + } + + public void setEnabled(boolean enabled) { + this.enabled = enabled; } } diff --git a/java/sca/modules/contribution/src/main/java/org/apache/tuscany/sca/contribution/processor/ValidationSchemaExtensionPoint.java b/java/sca/modules/contribution/src/main/java/org/apache/tuscany/sca/contribution/processor/ValidationSchemaExtensionPoint.java index cc3bb59a5b..67ec55b72e 100644 --- a/java/sca/modules/contribution/src/main/java/org/apache/tuscany/sca/contribution/processor/ValidationSchemaExtensionPoint.java +++ b/java/sca/modules/contribution/src/main/java/org/apache/tuscany/sca/contribution/processor/ValidationSchemaExtensionPoint.java @@ -6,15 +6,15 @@ * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at - * + * * http://www.apache.org/licenses/LICENSE-2.0 - * + * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations - * under the License. + * under the License. */ package org.apache.tuscany.sca.contribution.processor; @@ -28,25 +28,36 @@ import java.util.List; * @version $Rev$ $Date$ */ public interface ValidationSchemaExtensionPoint { - + /** + * Set the flag to control if schema validation should be enabled + * @param enabled + */ + void setEnabled(boolean enabled); + + /** + * Test the schema validation is enabled + * @return + */ + boolean isEnabled(); + /** * Add a schema. - * + * * @param uri the URI of the schema */ void addSchema(String uri); - + /** * Remove a schema. - * + * * @param uri the URI of the schema */ void removeSchema(String uri); - + /** * Returns the list of schemas registered in the extension point. * @return the list of schemas */ List getSchemas(); - + } diff --git a/java/sca/modules/node-impl-osgi/src/main/java/org/apache/tuscany/sca/node/osgi/impl/NodeFactoryImpl.java b/java/sca/modules/node-impl-osgi/src/main/java/org/apache/tuscany/sca/node/osgi/impl/NodeFactoryImpl.java index 053e40b5ac..2e008fa1cc 100644 --- a/java/sca/modules/node-impl-osgi/src/main/java/org/apache/tuscany/sca/node/osgi/impl/NodeFactoryImpl.java +++ b/java/sca/modules/node-impl-osgi/src/main/java/org/apache/tuscany/sca/node/osgi/impl/NodeFactoryImpl.java @@ -6,15 +6,15 @@ * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at -* +* * http://www.apache.org/licenses/LICENSE-2.0 -* +* * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations -* under the License. +* under the License. */ package org.apache.tuscany.sca.node.osgi.impl; @@ -55,6 +55,7 @@ import org.apache.tuscany.sca.contribution.processor.StAXArtifactProcessor; import org.apache.tuscany.sca.contribution.processor.StAXArtifactProcessorExtensionPoint; import org.apache.tuscany.sca.contribution.processor.URLArtifactProcessor; import org.apache.tuscany.sca.contribution.processor.URLArtifactProcessorExtensionPoint; +import org.apache.tuscany.sca.contribution.processor.ValidationSchemaExtensionPoint; import org.apache.tuscany.sca.contribution.resolver.ExtensibleModelResolver; import org.apache.tuscany.sca.contribution.resolver.ModelResolver; import org.apache.tuscany.sca.contribution.resolver.ModelResolverExtensionPoint; @@ -98,7 +99,7 @@ import org.osgi.framework.Bundle; /** * Represents an SCA runtime node. - * + * * @version $Rev$ $Date$ */ public class NodeFactoryImpl { @@ -131,7 +132,7 @@ public class NodeFactoryImpl { private Map nodes = new ConcurrentHashMap(); - /** + /** * Constructs a new Node controller */ public NodeFactoryImpl() { @@ -219,10 +220,17 @@ public class NodeFactoryImpl { } long start = currentTimeMillis(); - // Create extension point registry + // Create extension point registry extensionPoints = new DefaultExtensionPointRegistry(); - // Use the runtime-enabled assembly factory + // Enable schema validation only of the logger level is FINE or higher + ValidationSchemaExtensionPoint schemas = + extensionPoints.getExtensionPoint(ValidationSchemaExtensionPoint.class); + if (schemas != null) { + schemas.setEnabled(logger.isLoggable(Level.FINE)); + } + + // Use the runtime-enabled assembly factory modelFactories = extensionPoints.getExtensionPoint(FactoryExtensionPoint.class); assemblyFactory = new RuntimeAssemblyFactory(); modelFactories.addFactory(assemblyFactory); @@ -230,6 +238,7 @@ public class NodeFactoryImpl { // Create a monitor utilities = extensionPoints.getExtensionPoint(UtilityExtensionPoint.class); MonitorFactory monitorFactory = utilities.getUtility(MonitorFactory.class); + monitor = monitorFactory.createMonitor(); // Initialize the Tuscany module activators @@ -352,10 +361,10 @@ public class NodeFactoryImpl { // resolve any contributions or composites as they may depend on the full // definitions.xml picture - // get all definitions.xml artifacts from contributions and aggregate + // get all definitions.xml artifacts from contributions and aggregate // into the system contribution. In turn add a default import into - // each contribution so that for unresolved items the resolution - // processing will look in the system contribution + // each contribution so that for unresolved items the resolution + // processing will look in the system contribution for (Contribution contribution : workspace.getContributions()) { // aggregate definitions for (Artifact artifact : contribution.getArtifacts()) { @@ -367,19 +376,19 @@ public class NodeFactoryImpl { // create a default import and wire it up to the system contribution // model resolver. This is the trick that makes the resolution processing - // skip over to the system contribution if resolution is unsuccessful + // skip over to the system contribution if resolution is unsuccessful // in the current contribution DefaultImport defaultImport = contributionFactory.createDefaultImport(); defaultImport.setModelResolver(systemContribution.getModelResolver()); contribution.getImports().add(defaultImport); } - // now resolve the system contribution and add the contribution + // now resolve the system contribution and add the contribution // to the workspace contributionProcessor.resolve(systemContribution, workspace.getModelResolver()); workspace.getContributions().add(systemContribution); - // TODO - Now we can calculate applicable policy sets for each composite + // TODO - Now we can calculate applicable policy sets for each composite // Build the contribution dependencies Set resolved = new HashSet(); @@ -444,13 +453,13 @@ public class NodeFactoryImpl { tempComposite.setName(new QName(SCA11_TUSCANY_NS, "_domain_fragment_")); tempComposite.setURI(SCA11_TUSCANY_NS + "_domain_fragment_.composite"); - // Include the node composite in the top-level composite + // Include the node composite in the top-level composite tempComposite.getIncludes().add(composite); /* // The following line may return null, to be investigated XPathFactory xPathFactory = modelFactories.getFactory(XPathFactory.class); - + for (PolicySet policySet : systemDefinitions.getPolicySets()) { if (policySet.getAppliesTo() != null) { XPath xpath = xPathFactory.newXPath(); @@ -489,7 +498,7 @@ public class NodeFactoryImpl { /** * Analyze problems reported by the artifact processors and builders. - * + * * @throws Exception */ private void analyzeProblems() throws Exception { @@ -617,7 +626,7 @@ public class NodeFactoryImpl { serviceName = null; } - // Lookup the component + // Lookup the component Component component = null; for (Component compositeComponent : domainFragementComposite.getIncludes().get(0).getComponents()) { -- cgit v1.2.3