Author: mrglavas
Date: Mon Nov 7 13:14:30 2011
New Revision: 1198720
URL: http://svn.apache.org/viewvc?rev=1198720&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 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/ValidatorHandlerImpl.java
Modified:
xerces/java/branches/xml-schema-1.1-dev/src/org/apache/xerces/jaxp/validation/ValidatorHandlerImpl.java
URL:
http://svn.apache.org/viewvc/xerces/java/branches/xml-schema-1.1-dev/src/org/apache/xerces/jaxp/validation/ValidatorHandlerImpl.java?rev=1198720&r1=1198719&r2=1198720&view=diff
==============================================================================
---
xerces/java/branches/xml-schema-1.1-dev/src/org/apache/xerces/jaxp/validation/ValidatorHandlerImpl.java
(original)
+++
xerces/java/branches/xml-schema-1.1-dev/src/org/apache/xerces/jaxp/validation/ValidatorHandlerImpl.java
Mon Nov 7 13:14:30 2011
@@ -90,7 +90,7 @@ import org.xml.sax.ext.LexicalHandler;
* @version $Id$
*/
final class ValidatorHandlerImpl extends ValidatorHandler implements
- DTDHandler, EntityState, PSVIProvider, ValidatorHelper, XMLDocumentHandler
{
+ DTDHandler, EntityState, LexicalHandler, PSVIProvider, ValidatorHelper,
XMLDocumentHandler {
// feature identifiers
@@ -181,11 +181,15 @@ final class ValidatorHandlerImpl extends
private final AttributesProxy fAttrAdapter = new
AttributesProxy(fAttributes);
private final XMLString fTempString = new XMLString();
+ /** Flag indicating whether the schema version is 1.1. */
+ private final boolean fIsXSD11;
+
//
// User Objects
//
private ContentHandler fContentHandler = null;
+ private LexicalHandler fLexicalHandler = null;
/*
* Constructors
@@ -206,6 +210,7 @@ final class ValidatorHandlerImpl extends
fSchemaValidator = (XMLSchemaValidator)
fComponentManager.getProperty(SCHEMA_VALIDATOR);
fSymbolTable = (SymbolTable)
fComponentManager.getProperty(SYMBOL_TABLE);
fValidationManager = (ValidationManager)
fComponentManager.getProperty(VALIDATION_MANAGER);
+ fIsXSD11 =
Constants.W3C_XML_SCHEMA11_NS_URI.equals(fComponentManager.getProperty(XML_SCHEMA_VERSION));
}
/*
@@ -389,16 +394,7 @@ final class ValidatorHandlerImpl extends
public void comment(XMLString text, Augmentations augs) throws
XNIException {}
public void processingInstruction(String target, XMLString data,
- Augmentations augs) throws XNIException {
- if (fContentHandler != null) {
- try {
- fContentHandler.processingInstruction(target, data.toString());
- }
- catch (SAXException e) {
- throw new XNIException(e);
- }
- }
- }
+ Augmentations augs) throws XNIException {}
public void startElement(QName element, XMLAttributes attributes,
Augmentations augs) throws XNIException {
@@ -652,11 +648,17 @@ final class ValidatorHandlerImpl extends
public void processingInstruction(String target, String data)
throws SAXException {
- /**
- * Processing instructions do not participate in schema validation,
- * so just forward the event to the application's content
- * handler.
- */
+ // The XSD 1.0 validator does nothing with processing instructions so
bypass it unless it's 1.1.
+ if (fIsXSD11) {
+ if (data != null) {
+ fTempString.setValues(data.toCharArray(), 0, data.length());
+ }
+ else {
+ fTempString.setValues(new char[0], 0, 0);
+ }
+ fSchemaValidator.processingInstruction(target, fTempString, null);
+ }
+ // Send the processing instruction event directly to the application's
ContentHandler.
if (fContentHandler != null) {
fContentHandler.processingInstruction(target, data);
}
@@ -686,6 +688,59 @@ final class ValidatorHandlerImpl extends
}
/*
+ * LexicalHandler methods
+ */
+
+ public void comment(char[] ch, int start, int length) throws SAXException {
+ // The XSD 1.0 validator does nothing with comments so bypass it
unless it's 1.1.
+ if (fIsXSD11) {
+ fTempString.setValues(ch, start, length);
+ fSchemaValidator.comment(fTempString, null);
+ }
+ // Send the comment event directly to the application's LexicalHandler.
+ if (fLexicalHandler != null) {
+ fLexicalHandler.comment(ch, start, length);
+ }
+ }
+
+ public void endCDATA() throws SAXException {
+ if (fLexicalHandler != null) {
+ fLexicalHandler.endCDATA();
+ }
+ }
+
+ public void endDTD() throws SAXException {
+ if (fLexicalHandler != null) {
+ fLexicalHandler.endDTD();
+ }
+ }
+
+ public void endEntity(String name) throws SAXException {
+ if (fLexicalHandler != null) {
+ fLexicalHandler.endEntity(name);
+ }
+ }
+
+ public void startCDATA() throws SAXException {
+ if (fLexicalHandler != null) {
+ fLexicalHandler.startCDATA();
+ }
+ }
+
+ public void startDTD(String name, String publicId, String systemId)
+ throws SAXException {
+ if (fLexicalHandler != null) {
+ fLexicalHandler.startDTD(name, publicId, systemId);
+ }
+ }
+
+ public void startEntity(String name) throws SAXException {
+ if (fLexicalHandler != null) {
+ fLexicalHandler.startEntity(name);
+ }
+ }
+
+ /*
* ValidatorHelper methods
*/
@@ -704,6 +759,7 @@ final class ValidatorHandlerImpl extends
lh = (LexicalHandler) ch;
}
setContentHandler(ch);
+ fLexicalHandler = lh;
}
XMLReader reader = null;
@@ -751,7 +807,7 @@ final class ValidatorHandlerImpl extends
reader.setContentHandler(this);
reader.setDTDHandler(this);
try {
- reader.setProperty(LEXICAL_HANDLER, lh);
+ reader.setProperty(LEXICAL_HANDLER, fIsXSD11 ? this : lh);
}
// Ignore the exception if the lexical handler cannot be set.
catch (SAXException exc) {}
@@ -760,8 +816,9 @@ final class ValidatorHandlerImpl extends
reader.parse(is);
}
finally {
- // Release the reference to user's ContentHandler ASAP
+ // Release the reference to user's ContentHandler and
LexicalHandler ASAP
setContentHandler(null);
+ fLexicalHandler = null;
// Disconnect the validator and other objects from the
XMLReader
if (reader != null) {
try {
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]