com.sun.msv.verifier
Class Verifier

java.lang.Object
  extended by com.sun.msv.verifier.AbstractVerifier
      extended by com.sun.msv.verifier.Verifier
All Implemented Interfaces:
IDContextProvider2, IVerifier, org.iso_relax.verifier.VerifierHandler, org.relaxng.datatype.ValidationContext, ContentHandler, DTDHandler
Direct Known Subclasses:
IDConstraintChecker, TypeDetector

public class Verifier
extends AbstractVerifier
implements IVerifier

SAX ContentHandler that verifies incoming SAX event stream. This object can be reused to validate multiple documents. Just be careful NOT to use the same object to validate more than one documents at the same time.

Author:
Kohsuke KAWAGUCHI

Field Summary
protected  Acceptor current
           
protected  DocumentDeclaration docDecl
          Schema object against which the validation will be done
static String ERR_DUPLICATE_ID
           
static String ERR_MISSING_ATTRIBUTE
           
static String ERR_UNCOMPLETED_CONTENT
           
static String ERR_UNEXPECTED_ATTRIBUTE
           
static String ERR_UNEXPECTED_ELEMENT
           
static String ERR_UNEXPECTED_STARTTAG
           
static String ERR_UNEXPECTED_TEXT
           
static String ERR_UNSOLD_IDREF
           
protected  ErrorHandler errorHandler
          Error handler
protected  boolean hadError
          This flag will be set to true if an error is found
protected  int panicLevel
          Panic level.
 
Fields inherited from class com.sun.msv.verifier.AbstractVerifier
dummyLocator, idrefs, ids, locator, namespaceSupport, performIDcheck
 
Constructor Summary
Verifier(DocumentDeclaration documentDecl, ErrorHandler errorHandler)
           
 
Method Summary
 void characters(char[] buf, int start, int len)
           
 void endDocument()
           
 void endElement(String namespaceUri, String localName, String qName)
           
protected  org.relaxng.datatype.Datatype[] feedAttribute(Acceptor child, String uri, String localName, String qName, String value)
           
 Object getCurrentElementType()
          returns current element type.
 ErrorHandler getErrorHandler()
           
 org.relaxng.datatype.Datatype[] getLastCharacterType()
          gets DataType that validated the last characters.
 void ignorableWhitespace(char[] buf, int start, int len)
           
protected  void init()
           
 boolean isValid()
          checks if the document was valid.
static String localizeMessage(String propertyName, Object[] args)
           
 void onDuplicateId(String id)
          this method is called when a duplicate id value is found.
protected  ValidityViolation onError(String msg, ErrorInfo ei)
           
protected  ValidityViolation onError(StringRef ref, String defaultMsg, ErrorInfo ei)
          signals an error.
protected  void onNextAcceptorReady(StartTagInfo sti, Acceptor nextAcceptor)
          this method is called from the startElement method after the tag name is processed and the child acceptor is created.
 void setErrorHandler(ErrorHandler handler)
           
 void setPanicMode(boolean usePanicMode)
          Turns on/off the panic mode.
 void startDocument()
           
 void startElement(String namespaceUri, String localName, String qName, Attributes atts)
           
protected  void verifyText()
           
 
Methods inherited from class com.sun.msv.verifier.AbstractVerifier
endPrefixMapping, getBaseUri, getLocator, isNotation, isUnparsedEntity, notationDecl, onID, processingInstruction, resolveNamespacePrefix, setDocumentLocator, skippedEntity, startPrefixMapping, unparsedEntityDecl
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 
Methods inherited from interface com.sun.msv.verifier.IVerifier
getLocator
 
Methods inherited from interface org.xml.sax.ContentHandler
endPrefixMapping, processingInstruction, setDocumentLocator, skippedEntity, startPrefixMapping
 

Field Detail

current

protected Acceptor current

errorHandler

protected ErrorHandler errorHandler
Error handler


hadError

protected boolean hadError
This flag will be set to true if an error is found


docDecl

protected final DocumentDeclaration docDecl
Schema object against which the validation will be done


panicLevel

protected int panicLevel
Panic level. If the level is non-zero, createChildAcceptors will silently recover from error. This effectively suppresses spurious error messages. This value is set to INITIAL_PANIC_LEVEL when first an error is encountered, and is decreased by successful stepForward and createChildAcceptor. This value is also propagated to child acceptors.


ERR_UNEXPECTED_TEXT

public static final String ERR_UNEXPECTED_TEXT
See Also:
Constant Field Values

ERR_UNEXPECTED_ATTRIBUTE

public static final String ERR_UNEXPECTED_ATTRIBUTE
See Also:
Constant Field Values

ERR_MISSING_ATTRIBUTE

public static final String ERR_MISSING_ATTRIBUTE
See Also:
Constant Field Values

ERR_UNEXPECTED_STARTTAG

public static final String ERR_UNEXPECTED_STARTTAG
See Also:
Constant Field Values

ERR_UNCOMPLETED_CONTENT

public static final String ERR_UNCOMPLETED_CONTENT
See Also:
Constant Field Values

ERR_UNEXPECTED_ELEMENT

public static final String ERR_UNEXPECTED_ELEMENT
See Also:
Constant Field Values

ERR_UNSOLD_IDREF

public static final String ERR_UNSOLD_IDREF
See Also:
Constant Field Values

ERR_DUPLICATE_ID

public static final String ERR_DUPLICATE_ID
See Also:
Constant Field Values
Constructor Detail

Verifier

public Verifier(DocumentDeclaration documentDecl,
                ErrorHandler errorHandler)
Method Detail

getErrorHandler

public final ErrorHandler getErrorHandler()
Specified by:
getErrorHandler in interface IVerifier

setErrorHandler

public final void setErrorHandler(ErrorHandler handler)
Specified by:
setErrorHandler in interface IVerifier

isValid

public final boolean isValid()
Description copied from interface: IVerifier
checks if the document was valid. This method may not be called before verification was completed.

Specified by:
isValid in interface IVerifier
Specified by:
isValid in interface org.iso_relax.verifier.VerifierHandler

setPanicMode

public final void setPanicMode(boolean usePanicMode)
Description copied from interface: IVerifier
Turns on/off the panic mode. Panic mode is on by default. Turning it on is good for general use. It prevents false error messages to appear.

However, turning it off is sometimes useful, when you are sure that the structure of the document is almost valid (e.g., validating a document generated by an application or when you are sure about the validity of the structure and only interested in validating datatypes,)

Specified by:
setPanicMode in interface IVerifier

getLastCharacterType

public org.relaxng.datatype.Datatype[] getLastCharacterType()
Description copied from interface: IVerifier
gets DataType that validated the last characters.

This method works correctly only when called immediately after startElement and endElement method. When called, this method returns DataType object that validated the last character literals.

For RELAX NG grammar, this method can return an array of length 2 or more. This happens when the last character matches <list> pattern. In that case, each type corresponds to each token (where tokens are the white-space separation of the last characters).

For any other grammar, this method always returns an array of length 1 (or null, if the type assignment failed).

So when you are using VerifierFilter, you can call this method only in your startElement and endElement method.

Specified by:
getLastCharacterType in interface IVerifier
Returns:
null if type-assignment was not possible.

verifyText

protected void verifyText()
                   throws SAXException
Throws:
SAXException

startElement

public void startElement(String namespaceUri,
                         String localName,
                         String qName,
                         Attributes atts)
                  throws SAXException
Specified by:
startElement in interface ContentHandler
Overrides:
startElement in class AbstractVerifier
Throws:
SAXException

onNextAcceptorReady

protected void onNextAcceptorReady(StartTagInfo sti,
                                   Acceptor nextAcceptor)
                            throws SAXException
this method is called from the startElement method after the tag name is processed and the child acceptor is created.

This method is called before the attributes are consumed.

derived class can use this method to do something useful.

Throws:
SAXException

feedAttribute

protected org.relaxng.datatype.Datatype[] feedAttribute(Acceptor child,
                                                        String uri,
                                                        String localName,
                                                        String qName,
                                                        String value)
                                                 throws SAXException
Throws:
SAXException

endElement

public void endElement(String namespaceUri,
                       String localName,
                       String qName)
                throws SAXException
Specified by:
endElement in interface ContentHandler
Overrides:
endElement in class AbstractVerifier
Throws:
SAXException

onError

protected ValidityViolation onError(StringRef ref,
                                    String defaultMsg,
                                    ErrorInfo ei)
                             throws SAXException
signals an error. This method can be overrided by the derived class to provide different behavior.

Throws:
SAXException

onError

protected ValidityViolation onError(String msg,
                                    ErrorInfo ei)
                             throws SAXException
Throws:
SAXException

getCurrentElementType

public Object getCurrentElementType()
Description copied from interface: IVerifier
returns current element type. Actual java type depends on the implementation. This method works correctly only when called immediately after handling startElement event.

Specified by:
getCurrentElementType in interface IVerifier
Returns:
null this method returns null when it doesn't support type-assignment feature, or type-assignment is impossible for the current element (for example due to the ambiguous grammar).

characters

public void characters(char[] buf,
                       int start,
                       int len)
                throws SAXException
Specified by:
characters in interface ContentHandler
Throws:
SAXException

ignorableWhitespace

public void ignorableWhitespace(char[] buf,
                                int start,
                                int len)
                         throws SAXException
Specified by:
ignorableWhitespace in interface ContentHandler
Throws:
SAXException

init

protected void init()
Overrides:
init in class AbstractVerifier

startDocument

public void startDocument()
                   throws SAXException
Specified by:
startDocument in interface ContentHandler
Throws:
SAXException

endDocument

public void endDocument()
                 throws SAXException
Specified by:
endDocument in interface ContentHandler
Throws:
SAXException

onDuplicateId

public void onDuplicateId(String id)
Description copied from class: AbstractVerifier
this method is called when a duplicate id value is found.

Specified by:
onDuplicateId in class AbstractVerifier

localizeMessage

public static String localizeMessage(String propertyName,
                                     Object[] args)


MSV