Author: mrglavas
Date: Tue Nov  8 05:03:03 2011
New Revision: 1199108

URL: http://svn.apache.org/viewvc?rev=1199108&view=rev
Log:
Comments and PIs are expected to be present in the XDM tree for assertions. 
Make sure we pass them to the validator when the schema version is 1.1. We can 
still bypass the validator when we're in XML Schema 1.0 mode.

Modified:
    
xerces/java/branches/xml-schema-1.1-dev/src/org/apache/xerces/jaxp/validation/StAXValidatorHelper.java

Modified: 
xerces/java/branches/xml-schema-1.1-dev/src/org/apache/xerces/jaxp/validation/StAXValidatorHelper.java
URL: 
http://svn.apache.org/viewvc/xerces/java/branches/xml-schema-1.1-dev/src/org/apache/xerces/jaxp/validation/StAXValidatorHelper.java?rev=1199108&r1=1199107&r2=1199108&view=diff
==============================================================================
--- 
xerces/java/branches/xml-schema-1.1-dev/src/org/apache/xerces/jaxp/validation/StAXValidatorHelper.java
 (original)
+++ 
xerces/java/branches/xml-schema-1.1-dev/src/org/apache/xerces/jaxp/validation/StAXValidatorHelper.java
 Tue Nov  8 05:03:03 2011
@@ -93,6 +93,10 @@ final class StAXValidatorHelper implemen
     private static final String VALIDATION_MANAGER =
         Constants.XERCES_PROPERTY_PREFIX + 
Constants.VALIDATION_MANAGER_PROPERTY;
     
+    /** Property identifier: xml schema version. */
+    private static final String XML_SCHEMA_VERSION =
+        Constants.XERCES_PROPERTY_PREFIX + 
Constants.XML_SCHEMA_VERSION_PROPERTY;
+    
     //
     // Data
     //
@@ -148,13 +152,16 @@ final class StAXValidatorHelper implemen
     /** Current event. **/
     private XMLEvent fCurrentEvent = null;
     
-    /** Fields for start element, end element and characters. **/
+    /** Fields for start element, end element, characters, comments and 
processing instructions. **/
     final QName fElementQName = new QName();
     final QName fAttributeQName = new QName();
     final XMLAttributesImpl fAttributes = new XMLAttributesImpl();
     final ArrayList fDeclaredPrefixes = new ArrayList();
     final XMLString fTempString = new XMLString();
     final XMLStringBuffer fStringBuffer = new XMLStringBuffer();
+    
+    /** Flag indicating whether the schema version is 1.1. */
+    private final boolean fIsXSD11;
 
     public StAXValidatorHelper(XMLSchemaValidatorComponentManager 
componentManager) {
         fComponentManager = componentManager;
@@ -164,6 +171,7 @@ final class StAXValidatorHelper implemen
         fValidationManager = (ValidationManager) 
fComponentManager.getProperty(VALIDATION_MANAGER);
         fNamespaceContext = new JAXPNamespaceContextWrapper(fSymbolTable);
         fNamespaceContext.setDeclaredPrefixes(fDeclaredPrefixes);
+        fIsXSD11 = 
Constants.W3C_XML_SCHEMA11_NS_URI.equals(fComponentManager.getProperty(XML_SCHEMA_VERSION));
     }
     
     /*
@@ -395,11 +403,30 @@ final class StAXValidatorHelper implemen
                             }
                             break;
                         case XMLStreamConstants.PROCESSING_INSTRUCTION:
+                            // The XSD 1.0 validator does nothing with 
processing instructions so bypass it unless it's 1.1.
+                            if (fIsXSD11) {
+                                String data = reader.getPIData();
+                                if (data != null) {
+                                    fTempString.setValues(data.toCharArray(), 
0, data.length());
+                                }
+                                else {
+                                    fTempString.setValues(new char[0], 0, 0);
+                                }
+                                
fSchemaValidator.processingInstruction(reader.getPITarget(), fTempString, null);
+                            }
+                            // Send the processing instruction event directly 
to the StAXDocumentHandler.
                             if (fStAXValidatorHandler != null) {
                                 
fStAXValidatorHandler.processingInstruction(reader);
                             }
                             break;
                         case XMLStreamConstants.COMMENT:
+                            // The XSD 1.0 validator does nothing with 
comments so bypass it unless it's 1.1.
+                            if (fIsXSD11) {
+                                
fTempString.setValues(reader.getTextCharacters(), 
+                                        reader.getTextStart(), 
reader.getTextLength());
+                                fSchemaValidator.comment(fTempString, null);
+                            }
+                            // Send the comment event directly to the 
StAXDocumentHandler.
                             if (fStAXValidatorHandler != null) {
                                 fStAXValidatorHandler.comment(reader);
                             }
@@ -549,11 +576,25 @@ final class StAXValidatorHelper implemen
                             }
                             break;
                         case XMLStreamConstants.PROCESSING_INSTRUCTION:
+                            // The XSD 1.0 validator does nothing with 
processing instructions so bypass it unless it's 1.1.
+                            if (fIsXSD11) {
+                                final ProcessingInstruction pi = 
(ProcessingInstruction) fCurrentEvent;
+                                fillXMLString(fTempString, pi.getData());
+                                
fSchemaValidator.processingInstruction(pi.getTarget(), fTempString, null);
+                            }
+                            // Send the processing instruction event directly 
to the StAXDocumentHandler.
                             if (fStAXValidatorHandler != null) {
                                 
fStAXValidatorHandler.processingInstruction((ProcessingInstruction) 
fCurrentEvent);
                             }
                             break;
                         case XMLStreamConstants.COMMENT:
+                            // The XSD 1.0 validator does nothing with 
comments so bypass it unless it's 1.1.
+                            if (fIsXSD11) {
+                                final Comment c = (Comment) fCurrentEvent;
+                                fillXMLString(fTempString, c.getText());
+                                fSchemaValidator.comment(fTempString, null);
+                            }
+                            // Send the comment event directly to the 
StAXDocumentHandler.
                             if (fStAXValidatorHandler != null) {
                                 fStAXValidatorHandler.comment((Comment) 
fCurrentEvent);
                             }
@@ -634,6 +675,26 @@ final class StAXValidatorHelper implemen
                 }
             }
         }
+        
+        private void fillXMLString(XMLString toFill, String str) {
+            final int length;
+            final char[] strArray;
+            if (str != null) {
+                length = str.length();
+                if (length <= fCharBuffer.length) {
+                    str.getChars(0, length, fCharBuffer, 0);
+                    strArray = fCharBuffer;
+                }
+                else {
+                    strArray = str.toCharArray();
+                }
+            }
+            else {
+                length = 0;
+                strArray = new char[0];
+            }
+            toFill.setValues(strArray, 0, length);
+        }
     }
     
     /**



---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscr...@xerces.apache.org
For additional commands, e-mail: commits-h...@xerces.apache.org

Reply via email to