Fields Summary |
---|
private static final String | NAMESPACES_FEATUREFeature identifier: namespaces. |
private static final String | NAMESPACE_PREFIXES_FEATUREFeature identifier: namespace prefixes. |
private static final String | VALIDATION_FEATUREFeature identifier: validation. |
private static final String | XMLSCHEMA_VALIDATION_FEATUREFeature identifier: XML Schema validation |
private static final String | XINCLUDE_FEATUREFeature identifier: XInclude processing |
private static final String | SECURITY_MANAGERProperty identifier: security manager. |
private JAXPSAXParser | xmlReader |
private String | schemaLanguage |
private final Schema | grammar |
private org.apache.xerces.xni.parser.XMLComponent | fSchemaValidator |
private org.apache.xerces.xni.parser.XMLComponentManager | fSchemaValidatorComponentManager |
private org.apache.xerces.impl.validation.ValidationManager | fSchemaValidationManager |
private UnparsedEntityHandler | fUnparsedEntityHandler |
private final ErrorHandler | fInitErrorHandlerInitial ErrorHandler |
private final EntityResolver | fInitEntityResolverInitial EntityResolver |
Constructors Summary |
---|
SAXParserImpl(SAXParserFactoryImpl spf, Hashtable features)Create a SAX parser with the associated features
this(spf, features, false);
|
SAXParserImpl(SAXParserFactoryImpl spf, Hashtable features, boolean secureProcessing)Create a SAX parser with the associated features
// Instantiate a SAXParser directly and not through SAX so that we use the right ClassLoader
xmlReader = new JAXPSAXParser(this);
// JAXP "namespaceAware" == SAX Namespaces feature
// Note: there is a compatibility problem here with default values:
// JAXP default is false while SAX 2 default is true!
xmlReader.setFeature0(NAMESPACES_FEATURE, spf.isNamespaceAware());
// SAX "namespaces" and "namespace-prefixes" features should not
// both be false. We make them opposite for backward compatibility
// since JAXP 1.0 apps may want to receive xmlns* attributes.
xmlReader.setFeature0(NAMESPACE_PREFIXES_FEATURE, !spf.isNamespaceAware());
// Avoid setting the XInclude processing feature if the value is false.
// This will keep the configuration from throwing an exception if it
// does not support XInclude.
if (spf.isXIncludeAware()) {
xmlReader.setFeature0(XINCLUDE_FEATURE, true);
}
// If the secure processing feature is on set a security manager.
if (secureProcessing) {
xmlReader.setProperty0(SECURITY_MANAGER, new SecurityManager());
}
// Set application's features, followed by validation features.
setFeatures(features);
// If validating, provide a default ErrorHandler that prints
// validation errors with a warning telling the user to set an
// ErrorHandler.
if (spf.isValidating()) {
fInitErrorHandler = new DefaultValidationErrorHandler();
xmlReader.setErrorHandler(fInitErrorHandler);
}
else {
fInitErrorHandler = xmlReader.getErrorHandler();
}
xmlReader.setFeature0(VALIDATION_FEATURE, spf.isValidating());
// Get the Schema object from the factory
this.grammar = spf.getSchema();
if (grammar != null) {
XMLParserConfiguration config = xmlReader.getXMLParserConfiguration();
XMLComponent validatorComponent = null;
/** For Xerces grammars, use built-in schema validator. **/
if (grammar instanceof XSGrammarPoolContainer) {
validatorComponent = new XMLSchemaValidator();
fSchemaValidationManager = new ValidationManager();
fUnparsedEntityHandler = new UnparsedEntityHandler(fSchemaValidationManager);
config.setDTDHandler(fUnparsedEntityHandler);
fUnparsedEntityHandler.setDTDHandler(xmlReader);
xmlReader.setDTDSource(fUnparsedEntityHandler);
fSchemaValidatorComponentManager = new SchemaValidatorConfiguration(config,
(XSGrammarPoolContainer) grammar, fSchemaValidationManager);
}
/** For third party grammars, use the JAXP validator component. **/
else {
validatorComponent = new JAXPValidatorComponent(grammar.newValidatorHandler());
fSchemaValidatorComponentManager = config;
}
config.addRecognizedFeatures(validatorComponent.getRecognizedFeatures());
config.addRecognizedProperties(validatorComponent.getRecognizedProperties());
config.setDocumentHandler((XMLDocumentHandler) validatorComponent);
((XMLDocumentSource)validatorComponent).setDocumentHandler(xmlReader);
xmlReader.setDocumentSource((XMLDocumentSource) validatorComponent);
fSchemaValidator = validatorComponent;
}
// Initial EntityResolver
fInitEntityResolver = xmlReader.getEntityResolver();
|
Methods Summary |
---|
public org.apache.xerces.xs.AttributePSVI | getAttributePSVI(int index)
return ((PSVIProvider)xmlReader).getAttributePSVI(index);
|
public org.apache.xerces.xs.AttributePSVI | getAttributePSVIByName(java.lang.String uri, java.lang.String localname)
return ((PSVIProvider)xmlReader).getAttributePSVIByName(uri, localname);
|
public org.apache.xerces.xs.ElementPSVI | getElementPSVI()
return ((PSVIProvider)xmlReader).getElementPSVI();
|
public org.xml.sax.Parser | getParser()
// Xerces2 AbstractSAXParser implements SAX1 Parser
// assert(xmlReader instanceof Parser);
return (Parser) xmlReader;
|
public java.lang.Object | getProperty(java.lang.String name)returns the particular property requested for in the underlying
implementation of org.xml.sax.XMLReader.
return xmlReader.getProperty(name);
|
public javax.xml.validation.Schema | getSchema()
return grammar;
|
public org.xml.sax.XMLReader | getXMLReader()Returns the XMLReader that is encapsulated by the implementation of
this class.
return xmlReader;
|
public boolean | isNamespaceAware()
try {
return xmlReader.getFeature(NAMESPACES_FEATURE);
}
catch (SAXException x) {
throw new IllegalStateException(x.getMessage());
}
|
public boolean | isValidating()
try {
return xmlReader.getFeature(VALIDATION_FEATURE);
}
catch (SAXException x) {
throw new IllegalStateException(x.getMessage());
}
|
public boolean | isXIncludeAware()Gets the XInclude processing mode for this parser
try {
return xmlReader.getFeature(XINCLUDE_FEATURE);
}
catch (SAXException exc) {
return false;
}
|
public void | parse(org.xml.sax.InputSource is, org.xml.sax.helpers.DefaultHandler dh)
if (is == null) {
throw new IllegalArgumentException();
}
if (dh != null) {
xmlReader.setContentHandler(dh);
xmlReader.setEntityResolver(dh);
xmlReader.setErrorHandler(dh);
xmlReader.setDTDHandler(dh);
xmlReader.setDocumentHandler(null);
}
xmlReader.parse(is);
|
public void | parse(org.xml.sax.InputSource is, org.xml.sax.HandlerBase hb)
if (is == null) {
throw new IllegalArgumentException();
}
if (hb != null) {
xmlReader.setDocumentHandler(hb);
xmlReader.setEntityResolver(hb);
xmlReader.setErrorHandler(hb);
xmlReader.setDTDHandler(hb);
xmlReader.setContentHandler(null);
}
xmlReader.parse(is);
|
public void | reset()
try {
/** Restore initial values of features and properties. **/
xmlReader.restoreInitState();
}
catch (SAXException exc) {
// This should never happen. We only store recognized
// features and properties in the hash maps. For now
// just ignore it.
}
/** Restore various handlers. **/
xmlReader.setContentHandler(null);
xmlReader.setDTDHandler(null);
if (xmlReader.getErrorHandler() != fInitErrorHandler) {
xmlReader.setErrorHandler(fInitErrorHandler);
}
if (xmlReader.getEntityResolver() != fInitEntityResolver) {
xmlReader.setEntityResolver(fInitEntityResolver);
}
|
private void | setFeatures(java.util.Hashtable features)Set any features of our XMLReader based on any features set on the
SAXParserFactory.
XXX Does not handle possible conflicts between SAX feature names and
JAXP specific feature names, eg. SAXParserFactory.isValidating()
if (features != null) {
for (Enumeration e = features.keys(); e.hasMoreElements();) {
String feature = (String)e.nextElement();
boolean value = ((Boolean)features.get(feature)).booleanValue();
xmlReader.setFeature0(feature, value);
}
}
|
public void | setProperty(java.lang.String name, java.lang.Object value)Sets the particular property in the underlying implementation of
org.xml.sax.XMLReader.
xmlReader.setProperty(name, value);
|