You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@aries.apache.org by dk...@apache.org on 2015/09/03 20:34:56 UTC

svn commit: r1701097 - in /aries/trunk/blueprint: blueprint-core/pom.xml blueprint-core/src/main/java/org/apache/aries/blueprint/container/BlueprintContainerImpl.java blueprint-parser/src/main/java/org/apache/aries/blueprint/parser/Parser.java

Author: dkulp
Date: Thu Sep  3 18:34:55 2015
New Revision: 1701097

URL: http://svn.apache.org/r1701097
Log:
[ARIES-1395] Support validation of structure only, not data content
Patch from Aki Yoshida applied

Modified:
    aries/trunk/blueprint/blueprint-core/pom.xml
    aries/trunk/blueprint/blueprint-core/src/main/java/org/apache/aries/blueprint/container/BlueprintContainerImpl.java
    aries/trunk/blueprint/blueprint-parser/src/main/java/org/apache/aries/blueprint/parser/Parser.java

Modified: aries/trunk/blueprint/blueprint-core/pom.xml
URL: http://svn.apache.org/viewvc/aries/trunk/blueprint/blueprint-core/pom.xml?rev=1701097&r1=1701096&r2=1701097&view=diff
==============================================================================
--- aries/trunk/blueprint/blueprint-core/pom.xml (original)
+++ aries/trunk/blueprint/blueprint-core/pom.xml Thu Sep  3 18:34:55 2015
@@ -91,7 +91,7 @@
         </aries.osgi.include.resource>
         <blueprint.annotation.api.version>1.0.0</blueprint.annotation.api.version>
         <blueprint.api.version>1.0.0</blueprint.api.version>
-        <blueprint.parser.version>1.3.0</blueprint.parser.version>
+        <blueprint.parser.version>1.3.2-SNAPSHOT</blueprint.parser.version>
         <proxy.api.version>1.0.0</proxy.api.version>
         <proxy.impl.version>1.0.3</proxy.impl.version>
         <quiesce.api.version>1.0.0</quiesce.api.version>

Modified: aries/trunk/blueprint/blueprint-core/src/main/java/org/apache/aries/blueprint/container/BlueprintContainerImpl.java
URL: http://svn.apache.org/viewvc/aries/trunk/blueprint/blueprint-core/src/main/java/org/apache/aries/blueprint/container/BlueprintContainerImpl.java?rev=1701097&r1=1701096&r2=1701097&view=diff
==============================================================================
--- aries/trunk/blueprint/blueprint-core/src/main/java/org/apache/aries/blueprint/container/BlueprintContainerImpl.java (original)
+++ aries/trunk/blueprint/blueprint-core/src/main/java/org/apache/aries/blueprint/container/BlueprintContainerImpl.java Thu Sep  3 18:34:55 2015
@@ -94,6 +94,9 @@ import org.osgi.service.blueprint.reflec
 import org.osgi.service.blueprint.reflect.Target;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
+import org.xml.sax.ErrorHandler;
+import org.xml.sax.SAXException;
+import org.xml.sax.SAXParseException;
 
 /**
  * TODO: javadoc
@@ -147,7 +150,7 @@ public class BlueprintContainerImpl
     private Map<String, List<SatisfiableRecipe>> satisfiables;
     private long timeout = 5 * 60 * 1000;
     private boolean waitForDependencies = true;
-    private boolean xmlValidation = true;
+    private String xmlValidation;
     private ScheduledFuture timeoutFuture;
     private final AtomicBoolean scheduled = new AtomicBoolean();
     private List<ServiceRecipe> services;
@@ -220,11 +223,9 @@ public class BlueprintContainerImpl
             waitForDependencies = Boolean.parseBoolean(graceperiod);
         }
 
-        String xmlValidationDirective = paths.get(0).getDirective(BlueprintConstants.XML_VALIDATION);
-        if (xmlValidationDirective != null) {
-            LOGGER.debug("Xml-validation directive: {}", xmlValidationDirective);
-            xmlValidation = Boolean.parseBoolean(xmlValidationDirective);
-        }
+        xmlValidation = paths.get(0).getDirective(BlueprintConstants.XML_VALIDATION);
+        // enabled if null or "true"; structure-only if "structure"; disabled otherwise
+        LOGGER.debug("Xml-validation directive: {}", xmlValidation);
     }
 
     public void schedule() {
@@ -244,7 +245,7 @@ public class BlueprintContainerImpl
             this.processors = new ArrayList<Processor>();
             timeout = 5 * 60 * 1000;
             waitForDependencies = true;
-            xmlValidation = true;
+            xmlValidation = null;
             if (handlerSet != null) {
                 handlerSet.removeListener(this);
                 handlerSet.destroy();
@@ -317,8 +318,10 @@ public class BlueprintContainerImpl
                             return;
                         }
                         resetComponentDefinitionRegistry();
-                        if (xmlValidation) {
+                        if (xmlValidation == null || "true".equals(xmlValidation)) {
                             parser.validate(handlerSet.getSchema());
+                        } else if ("structure".equals(xmlValidation)) {
+                            parser.validate(handlerSet.getSchema(), new ValidationHandler());
                         }
                         parser.populate(handlerSet, componentDefinitionRegistry);
                         state = State.Populated;
@@ -942,4 +945,26 @@ public class BlueprintContainerImpl
             ExecutionContext.Holder.setContext(origContext);
         }
     }
+
+    // this could be parameterized/customized, but for now, hard-coded for ignoring datatype validation
+    private static class ValidationHandler implements ErrorHandler {
+        @Override
+        public void warning(SAXParseException exception) throws SAXException {
+            // ignore
+        }
+        @Override
+        public void error(SAXParseException exception) throws SAXException {
+            final String cvctext = exception.getMessage(); 
+            if (cvctext != null && 
+                (cvctext.startsWith("cvc-datatype-valid.1") || cvctext.startsWith("cvc-attribute.3"))) {
+                return;
+            }
+            throw exception;
+        }
+
+        @Override
+        public void fatalError(SAXParseException exception) throws SAXException {
+            throw exception;
+        }
+    }
 }

Modified: aries/trunk/blueprint/blueprint-parser/src/main/java/org/apache/aries/blueprint/parser/Parser.java
URL: http://svn.apache.org/viewvc/aries/trunk/blueprint/blueprint-parser/src/main/java/org/apache/aries/blueprint/parser/Parser.java?rev=1701097&r1=1701096&r2=1701097&view=diff
==============================================================================
--- aries/trunk/blueprint/blueprint-parser/src/main/java/org/apache/aries/blueprint/parser/Parser.java (original)
+++ aries/trunk/blueprint/blueprint-parser/src/main/java/org/apache/aries/blueprint/parser/Parser.java Thu Sep  3 18:34:55 2015
@@ -88,6 +88,7 @@ import org.w3c.dom.EntityReference;
 import org.w3c.dom.NamedNodeMap;
 import org.w3c.dom.Node;
 import org.w3c.dom.NodeList;
+import org.xml.sax.ErrorHandler;
 import org.xml.sax.InputSource;
 
 /**
@@ -308,8 +309,15 @@ public class Parser {
     }
 
     public void validate(Schema schema) {
+        validate(schema, null);
+    }
+
+    public void validate(Schema schema, ErrorHandler errorHandler) {
         try {
             Validator validator = schema.newValidator();
+            if (errorHandler != null) {
+                validator.setErrorHandler(errorHandler);
+            }
             for (Document doc : this.documents) {
                 validator.validate(new DOMSource(doc));
             }
@@ -1411,5 +1419,4 @@ public class Parser {
         }
         return documentBuilderFactory;
     }
-
 }