下面列出了怎么用org.w3c.dom.DOMErrorHandler的API类实例代码及写法,或者点击链接到github查看源代码。
/**
* Reports a DOM error to the user handler.
*
* If the error is fatal, the processing will be always aborted.
*/
public static final void reportDOMError(DOMErrorHandler errorHandler, DOMErrorImpl error, DOMLocatorImpl locator,
String message, short severity, String type ) {
if( errorHandler!=null ) {
error.reset();
error.fMessage = message;
error.fSeverity = severity;
error.fLocator = locator;
error.fType = type;
error.fRelatedData = locator.fRelatedNode;
if(!errorHandler.handleError(error))
throw abort;
}
if( severity==DOMError.SEVERITY_FATAL_ERROR )
throw abort;
}
/**
* Reports a DOM error to the user handler.
*
* If the error is fatal, the processing will be always aborted.
*/
public static final void reportDOMError(DOMErrorHandler errorHandler, DOMErrorImpl error, DOMLocatorImpl locator,
String message, short severity, String type ) {
if( errorHandler!=null ) {
error.reset();
error.fMessage = message;
error.fSeverity = severity;
error.fLocator = locator;
error.fType = type;
error.fRelatedData = locator.fRelatedNode;
if(!errorHandler.handleError(error))
throw new AbortException();
}
if( severity==DOMError.SEVERITY_FATAL_ERROR )
throw new AbortException();
}
/**
* Reports a DOM error to the user handler.
*
* If the error is fatal, the processing will be always aborted.
*/
public static final void reportDOMError(DOMErrorHandler errorHandler, DOMErrorImpl error, DOMLocatorImpl locator,
String message, short severity, String type ) {
if( errorHandler!=null ) {
error.reset();
error.fMessage = message;
error.fSeverity = severity;
error.fLocator = locator;
error.fType = type;
error.fRelatedData = locator.fRelatedNode;
if(!errorHandler.handleError(error))
throw abort;
}
if( severity==DOMError.SEVERITY_FATAL_ERROR )
throw abort;
}
/**
* Reports a DOM error to the user handler.
*
* If the error is fatal, the processing will be always aborted.
*/
public static final void reportDOMError(DOMErrorHandler errorHandler, DOMErrorImpl error, DOMLocatorImpl locator,
String message, short severity, String type ) {
if( errorHandler!=null ) {
error.reset();
error.fMessage = message;
error.fSeverity = severity;
error.fLocator = locator;
error.fType = type;
error.fRelatedData = locator.fRelatedNode;
if(!errorHandler.handleError(error))
throw abort;
}
if( severity==DOMError.SEVERITY_FATAL_ERROR )
throw abort;
}
public XSParser(LSResourceResolver entityResolver, DOMErrorHandler errorHandler){
System.setProperty(DOMImplementationRegistry.PROPERTY, DOMXSImplementationSourceImpl.class.getName());
DOMImplementationRegistry registry;
try{
registry = DOMImplementationRegistry.newInstance();
}catch(Exception ex){
throw new ImpossibleException(ex);
}
XSImplementationImpl xsImpl = (XSImplementationImpl)registry.getDOMImplementation("XS-Loader");
xsLoader = xsImpl.createXSLoader(null);
DOMConfiguration config = xsLoader.getConfig();
config.setParameter(Constants.DOM_VALIDATE, Boolean.TRUE);
if(entityResolver!=null)
config.setParameter(Constants.DOM_RESOURCE_RESOLVER, entityResolver);
if(errorHandler!=null)
config.setParameter(Constants.DOM_ERROR_HANDLER, errorHandler);
}
/**
* Reports a DOM error to the user handler.
*
* If the error is fatal, the processing will be always aborted.
*/
public static final void reportDOMError(DOMErrorHandler errorHandler, DOMErrorImpl error, DOMLocatorImpl locator,
String message, short severity, String type ) {
if( errorHandler!=null ) {
error.reset();
error.fMessage = message;
error.fSeverity = severity;
error.fLocator = locator;
error.fType = type;
error.fRelatedData = locator.fRelatedNode;
if(!errorHandler.handleError(error))
throw new AbortException();
}
if( severity==DOMError.SEVERITY_FATAL_ERROR )
throw new AbortException();
}
/**
* Reports a DOM error to the user handler.
*
* If the error is fatal, the processing will be always aborted.
*/
public static final void reportDOMError(DOMErrorHandler errorHandler, DOMErrorImpl error, DOMLocatorImpl locator,
String message, short severity, String type ) {
if( errorHandler!=null ) {
error.reset();
error.fMessage = message;
error.fSeverity = severity;
error.fLocator = locator;
error.fType = type;
error.fRelatedData = locator.fRelatedNode;
if(!errorHandler.handleError(error))
throw abort;
}
if( severity==DOMError.SEVERITY_FATAL_ERROR )
throw abort;
}
/**
* Reports a DOM error to the user handler.
*
* If the error is fatal, the processing will be always aborted.
*/
public static final void reportDOMError(DOMErrorHandler errorHandler, DOMErrorImpl error, DOMLocatorImpl locator,
String message, short severity, String type ) {
if( errorHandler!=null ) {
error.reset();
error.fMessage = message;
error.fSeverity = severity;
error.fLocator = locator;
error.fType = type;
error.fRelatedData = locator.fRelatedNode;
if(!errorHandler.handleError(error))
throw new AbortException();
}
if( severity==DOMError.SEVERITY_FATAL_ERROR )
throw new AbortException();
}
/**
* Reports a DOM error to the user handler.
*
* If the error is fatal, the processing will be always aborted.
*/
public static final void reportDOMError(DOMErrorHandler errorHandler, DOMErrorImpl error, DOMLocatorImpl locator,
String message, short severity, String type ) {
if( errorHandler!=null ) {
error.reset();
error.fMessage = message;
error.fSeverity = severity;
error.fLocator = locator;
error.fType = type;
error.fRelatedData = locator.fRelatedNode;
if(!errorHandler.handleError(error))
throw new AbortException();
}
if( severity==DOMError.SEVERITY_FATAL_ERROR )
throw new AbortException();
}
/**
* Constructor.
* @param contentHandler serialHandler The implemention of the SerializationHandler interface
*/
DOM3TreeWalker(
SerializationHandler serialHandler,
DOMErrorHandler errHandler,
LSSerializerFilter filter,
String newLine) {
fSerializer = serialHandler;
//fErrorHandler = errHandler == null ? new DOMErrorHandlerImpl() : errHandler; // Should we be using the default?
fErrorHandler = errHandler;
fFilter = filter;
fLexicalHandler = null;
fNewLine = newLine;
fNSBinder = new NamespaceSupport();
fLocalNSBinder = new NamespaceSupport();
fDOMConfigProperties = fSerializer.getOutputFormat();
fSerializer.setDocumentLocator(fLocator);
initProperties(fDOMConfigProperties);
}
/**
* Reports a DOM error to the user handler.
*
* If the error is fatal, the processing will be always aborted.
*/
public static final void reportDOMError(DOMErrorHandler errorHandler, DOMErrorImpl error, DOMLocatorImpl locator,
String message, short severity, String type ) {
if( errorHandler!=null ) {
error.reset();
error.fMessage = message;
error.fSeverity = severity;
error.fLocator = locator;
error.fType = type;
error.fRelatedData = locator.fRelatedNode;
if(!errorHandler.handleError(error))
throw new AbortException();
}
if( severity==DOMError.SEVERITY_FATAL_ERROR )
throw new AbortException();
}
/**
* Constructor.
* @param contentHandler serialHandler The implemention of the SerializationHandler interface
*/
DOM3TreeWalker(
SerializationHandler serialHandler,
DOMErrorHandler errHandler,
LSSerializerFilter filter,
String newLine) {
fSerializer = serialHandler;
//fErrorHandler = errHandler == null ? new DOMErrorHandlerImpl() : errHandler; // Should we be using the default?
fErrorHandler = errHandler;
fFilter = filter;
fLexicalHandler = null;
fNewLine = newLine;
fNSBinder = new NamespaceSupport();
fLocalNSBinder = new NamespaceSupport();
fDOMConfigProperties = fSerializer.getOutputFormat();
fSerializer.setDocumentLocator(fLocator);
initProperties(fDOMConfigProperties);
}
/**
* Reports a DOM error to the user handler.
*
* If the error is fatal, the processing will be always aborted.
*/
public static final void reportDOMError(DOMErrorHandler errorHandler, DOMErrorImpl error, DOMLocatorImpl locator,
String message, short severity, String type ) {
if( errorHandler!=null ) {
error.reset();
error.fMessage = message;
error.fSeverity = severity;
error.fLocator = locator;
error.fType = type;
error.fRelatedData = locator.fRelatedNode;
if(!errorHandler.handleError(error))
throw abort;
}
if( severity==DOMError.SEVERITY_FATAL_ERROR )
throw abort;
}
public XSLoaderImpl getLoader() {
XSLoaderImpl loader = new XSLoaderImpl();
loader.setParameter("http://apache.org/xml/properties/internal/entity-resolver", resolverExtensionManager);
loader.setParameter(Constants.DOM_ERROR_HANDLER, new DOMErrorHandler() {
@Override
public boolean handleError(DOMError error) {
if (error.getRelatedException() instanceof CacheResourceDownloadingException) {
throw ((CacheResourceDownloadingException) error.getRelatedException());
}
return false;
}
});
return loader;
}
/**
* Checks if setting a parameter to a specific value is supported.
*
* @see org.w3c.dom.DOMConfiguration#canSetParameter(java.lang.String, java.lang.Object)
* @since DOM Level 3
* @param name A String containing the DOMConfiguration parameter name.
* @param value An Object specifying the value of the corresponding parameter.
*/
public boolean canSetParameter(String name, Object value) {
if (value instanceof Boolean){
if ( name.equalsIgnoreCase(DOMConstants.DOM_CDATA_SECTIONS)
|| name.equalsIgnoreCase(DOMConstants.DOM_COMMENTS)
|| name.equalsIgnoreCase(DOMConstants.DOM_ENTITIES)
|| name.equalsIgnoreCase(DOMConstants.DOM_INFOSET)
|| name.equalsIgnoreCase(DOMConstants.DOM_ELEMENT_CONTENT_WHITESPACE)
|| name.equalsIgnoreCase(DOMConstants.DOM_NAMESPACES)
|| name.equalsIgnoreCase(DOMConstants.DOM_NAMESPACE_DECLARATIONS)
|| name.equalsIgnoreCase(DOMConstants.DOM_SPLIT_CDATA)
|| name.equalsIgnoreCase(DOMConstants.DOM_WELLFORMED)
|| name.equalsIgnoreCase(DOMConstants.DOM_DISCARD_DEFAULT_CONTENT)
|| name.equalsIgnoreCase(DOMConstants.DOM_FORMAT_PRETTY_PRINT)
|| name.equalsIgnoreCase(DOMConstants.DOM_XMLDECL)){
// both values supported
return true;
}
else if (name.equalsIgnoreCase(DOMConstants.DOM_CANONICAL_FORM)
|| name.equalsIgnoreCase(DOMConstants.DOM_CHECK_CHAR_NORMALIZATION)
|| name.equalsIgnoreCase(DOMConstants.DOM_DATATYPE_NORMALIZATION)
|| name.equalsIgnoreCase(DOMConstants.DOM_VALIDATE_IF_SCHEMA)
|| name.equalsIgnoreCase(DOMConstants.DOM_VALIDATE)
// || name.equalsIgnoreCase(DOMConstants.DOM_NORMALIZE_CHARACTERS)
) {
// true is not supported
return !((Boolean)value).booleanValue();
}
else if (name.equalsIgnoreCase(DOMConstants.DOM_IGNORE_UNKNOWN_CHARACTER_DENORMALIZATIONS)) {
// false is not supported
return ((Boolean)value).booleanValue();
}
}
else if (name.equalsIgnoreCase(DOMConstants.DOM_ERROR_HANDLER) &&
value == null || value instanceof DOMErrorHandler){
return true;
}
return false;
}
/**
* Constructor.
* @param contentHandler serialHandler The implemention of the SerializationHandler interface
*/
DOM3TreeWalker(
SerializationHandler serialHandler,
DOMErrorHandler errHandler,
LSSerializerFilter filter,
String newLine) {
fSerializer = serialHandler;
//fErrorHandler = errHandler == null ? new DOMErrorHandlerImpl() : errHandler; // Should we be using the default?
fErrorHandler = errHandler;
fFilter = filter;
fLexicalHandler = null;
fNewLine = newLine;
fNSBinder = new NamespaceSupport();
fLocalNSBinder = new NamespaceSupport();
fDOMConfigProperties = fSerializer.getOutputFormat();
fSerializer.setDocumentLocator(fLocator);
initProperties(fDOMConfigProperties);
try {
// Bug see Bugzilla 26741
fLocator.setSystemId(
System.getProperty("user.dir") + File.separator + "dummy.xsl");
} catch (SecurityException se) { // user.dir not accessible from applet
}
}
/**
* Checks if setting a parameter to a specific value is supported.
*
* @see org.w3c.dom.DOMConfiguration#canSetParameter(java.lang.String, java.lang.Object)
* @since DOM Level 3
* @param name A String containing the DOMConfiguration parameter name.
* @param value An Object specifying the value of the corresponding parameter.
*/
public boolean canSetParameter(String name, Object value) {
if (value instanceof Boolean){
if ( name.equalsIgnoreCase(DOMConstants.DOM_CDATA_SECTIONS)
|| name.equalsIgnoreCase(DOMConstants.DOM_COMMENTS)
|| name.equalsIgnoreCase(DOMConstants.DOM_ENTITIES)
|| name.equalsIgnoreCase(DOMConstants.DOM_INFOSET)
|| name.equalsIgnoreCase(DOMConstants.DOM_ELEMENT_CONTENT_WHITESPACE)
|| name.equalsIgnoreCase(DOMConstants.DOM_NAMESPACES)
|| name.equalsIgnoreCase(DOMConstants.DOM_NAMESPACE_DECLARATIONS)
|| name.equalsIgnoreCase(DOMConstants.DOM_SPLIT_CDATA)
|| name.equalsIgnoreCase(DOMConstants.DOM_WELLFORMED)
|| name.equalsIgnoreCase(DOMConstants.DOM_DISCARD_DEFAULT_CONTENT)
|| name.equalsIgnoreCase(DOMConstants.DOM_FORMAT_PRETTY_PRINT)
|| name.equalsIgnoreCase(DOMConstants.DOM_XMLDECL)){
// both values supported
return true;
}
else if (name.equalsIgnoreCase(DOMConstants.DOM_CANONICAL_FORM)
|| name.equalsIgnoreCase(DOMConstants.DOM_CHECK_CHAR_NORMALIZATION)
|| name.equalsIgnoreCase(DOMConstants.DOM_DATATYPE_NORMALIZATION)
|| name.equalsIgnoreCase(DOMConstants.DOM_VALIDATE_IF_SCHEMA)
|| name.equalsIgnoreCase(DOMConstants.DOM_VALIDATE)
// || name.equalsIgnoreCase(DOMConstants.DOM_NORMALIZE_CHARACTERS)
) {
// true is not supported
return !((Boolean)value).booleanValue();
}
else if (name.equalsIgnoreCase(DOMConstants.DOM_IGNORE_UNKNOWN_CHARACTER_DENORMALIZATIONS)) {
// false is not supported
return ((Boolean)value).booleanValue();
}
}
else if (name.equalsIgnoreCase(DOMConstants.DOM_ERROR_HANDLER) &&
value == null || value instanceof DOMErrorHandler){
return true;
}
return false;
}
public boolean canSetParameter (String name, Object value) {
if (value == null){
return true;
}
if(value instanceof Boolean){
boolean state = ((Boolean)value).booleanValue ();
if ( name.equalsIgnoreCase (Constants.DOM_SUPPORTED_MEDIATYPES_ONLY)
|| name.equalsIgnoreCase(Constants.DOM_NORMALIZE_CHARACTERS)
|| name.equalsIgnoreCase(Constants.DOM_CHECK_CHAR_NORMALIZATION )
|| name.equalsIgnoreCase (Constants.DOM_CANONICAL_FORM) ) {
// true is not supported
return (state) ? false : true;
}
else if (name.equalsIgnoreCase (Constants.DOM_WELLFORMED)
|| name.equalsIgnoreCase (Constants.DOM_IGNORE_UNKNOWN_CHARACTER_DENORMALIZATIONS)) {
// false is not supported
return (state) ? true : false;
}
else if (name.equalsIgnoreCase (Constants.DOM_CDATA_SECTIONS)
|| name.equalsIgnoreCase (Constants.DOM_CHARSET_OVERRIDES_XML_ENCODING)
|| name.equalsIgnoreCase (Constants.DOM_COMMENTS)
|| name.equalsIgnoreCase (Constants.DOM_DATATYPE_NORMALIZATION)
|| name.equalsIgnoreCase (Constants.DOM_DISALLOW_DOCTYPE)
|| name.equalsIgnoreCase (Constants.DOM_ENTITIES)
|| name.equalsIgnoreCase (Constants.DOM_INFOSET)
|| name.equalsIgnoreCase (Constants.DOM_NAMESPACES)
|| name.equalsIgnoreCase (Constants.DOM_NAMESPACE_DECLARATIONS)
|| name.equalsIgnoreCase (Constants.DOM_VALIDATE)
|| name.equalsIgnoreCase (Constants.DOM_VALIDATE_IF_SCHEMA)
|| name.equalsIgnoreCase (Constants.DOM_ELEMENT_CONTENT_WHITESPACE)
|| name.equalsIgnoreCase (Constants.DOM_XMLDECL)) {
return true;
}
// Recognize Xerces features.
try {
String normalizedName;
if (name.equalsIgnoreCase(NAMESPACE_GROWTH)) {
normalizedName = NAMESPACE_GROWTH;
}
else if (name.equalsIgnoreCase(TOLERATE_DUPLICATES)) {
normalizedName = TOLERATE_DUPLICATES;
}
else {
normalizedName = name.toLowerCase(Locale.ENGLISH);
}
fConfiguration.getFeature(normalizedName);
return true;
}
catch (XMLConfigurationException e) {
return false;
}
}
else { // check properties
if (name.equalsIgnoreCase (Constants.DOM_ERROR_HANDLER)) {
if (value instanceof DOMErrorHandler || value == null) {
return true;
}
return false;
}
else if (name.equalsIgnoreCase (Constants.DOM_RESOURCE_RESOLVER)) {
if (value instanceof LSResourceResolver || value == null) {
return true;
}
return false;
}
else if (name.equalsIgnoreCase (Constants.DOM_SCHEMA_TYPE)) {
if ((value instanceof String
&& (value.equals (Constants.NS_XMLSCHEMA)
|| value.equals (Constants.NS_DTD))) || value == null) {
return true;
}
return false;
}
else if (name.equalsIgnoreCase (Constants.DOM_SCHEMA_LOCATION)) {
if (value instanceof String || value == null)
return true;
return false;
}
else if (name.equalsIgnoreCase (DOCUMENT_CLASS_NAME)){
return true;
}
return false;
}
}
public DOMErrorHandlerWrapper(DOMErrorHandler domErrorHandler) {
fDomErrorHandler = domErrorHandler;
}
/**
* DOM Level 3 WD - Experimental.
* Check if setting a parameter to a specific value is supported.
*
* @param name The name of the parameter to check.
*
* @param value An object. if null, the returned value is true.
*
* @return true if the parameter could be successfully set to the
* specified value, or false if the parameter is not recognized or
* the requested value is not supported. This does not change the
* current value of the parameter itself.
*/
public boolean canSetParameter(String name, Object value) {
if (value == null){
//if null, the returned value is true.
//REVISIT: I dont like this --- even for unrecognized parameter it would
//return 'true'. I think it should return false in that case.
// Application will be surprised to find that setParameter throws not
//recognized exception when canSetParameter returns 'true' Then what is the use
//of having canSetParameter ??? - nb.
return true ;
}
if( value instanceof Boolean ){
//features whose parameter value can be set either 'true' or 'false'
// or they accept any boolean value -- so we just need to check that
// its a boolean value..
if (name.equalsIgnoreCase(Constants.DOM_COMMENTS)
|| name.equalsIgnoreCase(Constants.DOM_DATATYPE_NORMALIZATION)
|| name.equalsIgnoreCase(Constants.DOM_CDATA_SECTIONS)
|| name.equalsIgnoreCase(Constants.DOM_ENTITIES)
|| name.equalsIgnoreCase(Constants.DOM_SPLIT_CDATA)
|| name.equalsIgnoreCase(Constants.DOM_NAMESPACES)
|| name.equalsIgnoreCase(Constants.DOM_VALIDATE)
|| name.equalsIgnoreCase(Constants.DOM_WELLFORMED)
|| name.equalsIgnoreCase(Constants.DOM_INFOSET)
|| name.equalsIgnoreCase(Constants.DOM_NAMESPACE_DECLARATIONS)
) {
return true;
}//features whose parameter value can not be set to 'true'
else if (
name.equalsIgnoreCase(Constants.DOM_NORMALIZE_CHARACTERS)
|| name.equalsIgnoreCase(Constants.DOM_CANONICAL_FORM)
|| name.equalsIgnoreCase(Constants.DOM_VALIDATE_IF_SCHEMA)
|| name.equalsIgnoreCase(Constants.DOM_CHECK_CHAR_NORMALIZATION)
) {
return (value.equals(Boolean.TRUE)) ? false : true;
}//features whose parameter value can not be set to 'false'
else if( name.equalsIgnoreCase(Constants.DOM_ELEMENT_CONTENT_WHITESPACE)
|| name.equalsIgnoreCase(SEND_PSVI)
) {
return (value.equals(Boolean.TRUE)) ? true : false;
}// if name is not among the above listed above -- its not recognized. return false
else {
return false ;
}
}
else if (name.equalsIgnoreCase(Constants.DOM_ERROR_HANDLER)) {
return (value instanceof DOMErrorHandler) ? true : false ;
}
else if (name.equalsIgnoreCase(Constants.DOM_RESOURCE_RESOLVER)) {
return (value instanceof LSResourceResolver) ? true : false ;
}
else if (name.equalsIgnoreCase(Constants.DOM_SCHEMA_LOCATION)) {
return (value instanceof String) ? true : false ;
}
else if (name.equalsIgnoreCase(Constants.DOM_SCHEMA_TYPE)) {
// REVISIT: should null value be supported?
//as of now we are only supporting W3C XML Schema
return ( (value instanceof String) && value.equals(Constants.NS_XMLSCHEMA) ) ? true : false ;
}
else if (name.equalsIgnoreCase(SYMBOL_TABLE)){
// Xerces Symbol Table
return (value instanceof SymbolTable) ? true : false ;
}
else if (name.equalsIgnoreCase (GRAMMAR_POOL)){
return (value instanceof XMLGrammarPool) ? true : false ;
}
else {
//false if the parameter is not recognized or the requested value is not supported.
return false ;
}
}
public DOMErrorHandlerWrapper(DOMErrorHandler domErrorHandler) {
fDomErrorHandler = domErrorHandler;
}
/** Sets the DOM error handler. */
public void setErrorHandler(DOMErrorHandler errorHandler) {
fDomErrorHandler = errorHandler;
}
public DOMErrorHandler getErrorHandler(){
return fDomErrorHandler;
}
/** DOM L3-EXPERIMENTAL:
* Check if parameter can be set
*/
public boolean canSetParameter(String name, Object state) {
if (state == null) {
return true;
}
if (state instanceof Boolean) {
boolean value = ((Boolean) state).booleanValue();
if (name.equalsIgnoreCase(Constants.DOM_NAMESPACES)
|| name.equalsIgnoreCase(Constants.DOM_SPLIT_CDATA)
|| name.equalsIgnoreCase(Constants.DOM_DISCARD_DEFAULT_CONTENT)
|| name.equalsIgnoreCase(Constants.DOM_XMLDECL)
|| name.equalsIgnoreCase(Constants.DOM_WELLFORMED)
|| name.equalsIgnoreCase(Constants.DOM_INFOSET)
|| name.equalsIgnoreCase(Constants.DOM_ENTITIES)
|| name.equalsIgnoreCase(Constants.DOM_CDATA_SECTIONS)
|| name.equalsIgnoreCase(Constants.DOM_COMMENTS)
|| name.equalsIgnoreCase(Constants.DOM_NAMESPACE_DECLARATIONS)
|| name.equalsIgnoreCase(Constants.DOM_FORMAT_PRETTY_PRINT)) {
// both values supported
return true;
} else if (name.equalsIgnoreCase(Constants.DOM_CANONICAL_FORM)
|| name.equalsIgnoreCase(Constants.DOM_VALIDATE_IF_SCHEMA)
|| name.equalsIgnoreCase(Constants.DOM_VALIDATE)
|| name.equalsIgnoreCase(Constants.DOM_CHECK_CHAR_NORMALIZATION)
|| name.equalsIgnoreCase(Constants.DOM_DATATYPE_NORMALIZATION)) {
// || name.equalsIgnoreCase(Constants.DOM_NORMALIZE_CHARACTERS)) {
// true is not supported
return !value;
} else if (name.equalsIgnoreCase(Constants.DOM_ELEMENT_CONTENT_WHITESPACE)
|| name.equalsIgnoreCase(Constants.DOM_IGNORE_UNKNOWN_CHARACTER_DENORMALIZATIONS)) {
// false is not supported
return value;
}
} else if (name.equalsIgnoreCase(Constants.DOM_ERROR_HANDLER) &&
state == null || state instanceof DOMErrorHandler) {
return true;
}
return false;
}
public boolean canSetParameter (String name, Object value) {
if (value == null){
return true;
}
if(value instanceof Boolean){
boolean state = ((Boolean)value).booleanValue ();
if ( name.equalsIgnoreCase (Constants.DOM_SUPPORTED_MEDIATYPES_ONLY)
|| name.equalsIgnoreCase(Constants.DOM_NORMALIZE_CHARACTERS)
|| name.equalsIgnoreCase(Constants.DOM_CHECK_CHAR_NORMALIZATION )
|| name.equalsIgnoreCase (Constants.DOM_CANONICAL_FORM) ) {
// true is not supported
return (state) ? false : true;
}
else if (name.equalsIgnoreCase (Constants.DOM_WELLFORMED)
|| name.equalsIgnoreCase (Constants.DOM_IGNORE_UNKNOWN_CHARACTER_DENORMALIZATIONS)) {
// false is not supported
return (state) ? true : false;
}
else if (name.equalsIgnoreCase (Constants.DOM_CDATA_SECTIONS)
|| name.equalsIgnoreCase (Constants.DOM_CHARSET_OVERRIDES_XML_ENCODING)
|| name.equalsIgnoreCase (Constants.DOM_COMMENTS)
|| name.equalsIgnoreCase (Constants.DOM_DATATYPE_NORMALIZATION)
|| name.equalsIgnoreCase (Constants.DOM_DISALLOW_DOCTYPE)
|| name.equalsIgnoreCase (Constants.DOM_ENTITIES)
|| name.equalsIgnoreCase (Constants.DOM_INFOSET)
|| name.equalsIgnoreCase (Constants.DOM_NAMESPACES)
|| name.equalsIgnoreCase (Constants.DOM_NAMESPACE_DECLARATIONS)
|| name.equalsIgnoreCase (Constants.DOM_VALIDATE)
|| name.equalsIgnoreCase (Constants.DOM_VALIDATE_IF_SCHEMA)
|| name.equalsIgnoreCase (Constants.DOM_ELEMENT_CONTENT_WHITESPACE)
|| name.equalsIgnoreCase (Constants.DOM_XMLDECL)) {
return true;
}
// Recognize Xerces features.
try {
String normalizedName;
if (name.equalsIgnoreCase(NAMESPACE_GROWTH)) {
normalizedName = NAMESPACE_GROWTH;
}
else if (name.equalsIgnoreCase(TOLERATE_DUPLICATES)) {
normalizedName = TOLERATE_DUPLICATES;
}
else {
normalizedName = name.toLowerCase(Locale.ENGLISH);
}
fConfiguration.getFeature(normalizedName);
return true;
}
catch (XMLConfigurationException e) {
return false;
}
}
else { // check properties
if (name.equalsIgnoreCase (Constants.DOM_ERROR_HANDLER)) {
if (value instanceof DOMErrorHandler || value == null) {
return true;
}
return false;
}
else if (name.equalsIgnoreCase (Constants.DOM_RESOURCE_RESOLVER)) {
if (value instanceof LSResourceResolver || value == null) {
return true;
}
return false;
}
else if (name.equalsIgnoreCase (Constants.DOM_SCHEMA_TYPE)) {
if ((value instanceof String
&& (value.equals (Constants.NS_XMLSCHEMA)
|| value.equals (Constants.NS_DTD))) || value == null) {
return true;
}
return false;
}
else if (name.equalsIgnoreCase (Constants.DOM_SCHEMA_LOCATION)) {
if (value instanceof String || value == null)
return true;
return false;
}
else if (name.equalsIgnoreCase (DOCUMENT_CLASS_NAME)){
return true;
}
return false;
}
}
/**
* DOM Level 3 WD - Experimental.
* Check if setting a parameter to a specific value is supported.
*
* @param name The name of the parameter to check.
*
* @param value An object. if null, the returned value is true.
*
* @return true if the parameter could be successfully set to the
* specified value, or false if the parameter is not recognized or
* the requested value is not supported. This does not change the
* current value of the parameter itself.
*/
public boolean canSetParameter(String name, Object value) {
if (value == null){
//if null, the returned value is true.
//REVISIT: I dont like this --- even for unrecognized parameter it would
//return 'true'. I think it should return false in that case.
// Application will be surprised to find that setParameter throws not
//recognized exception when canSetParameter returns 'true' Then what is the use
//of having canSetParameter ??? - nb.
return true ;
}
if( value instanceof Boolean ){
//features whose parameter value can be set either 'true' or 'false'
// or they accept any boolean value -- so we just need to check that
// its a boolean value..
if (name.equalsIgnoreCase(Constants.DOM_COMMENTS)
|| name.equalsIgnoreCase(Constants.DOM_DATATYPE_NORMALIZATION)
|| name.equalsIgnoreCase(Constants.DOM_CDATA_SECTIONS)
|| name.equalsIgnoreCase(Constants.DOM_ENTITIES)
|| name.equalsIgnoreCase(Constants.DOM_SPLIT_CDATA)
|| name.equalsIgnoreCase(Constants.DOM_NAMESPACES)
|| name.equalsIgnoreCase(Constants.DOM_VALIDATE)
|| name.equalsIgnoreCase(Constants.DOM_WELLFORMED)
|| name.equalsIgnoreCase(Constants.DOM_INFOSET)
|| name.equalsIgnoreCase(Constants.DOM_NAMESPACE_DECLARATIONS)
) {
return true;
}//features whose parameter value can not be set to 'true'
else if (
name.equalsIgnoreCase(Constants.DOM_NORMALIZE_CHARACTERS)
|| name.equalsIgnoreCase(Constants.DOM_CANONICAL_FORM)
|| name.equalsIgnoreCase(Constants.DOM_VALIDATE_IF_SCHEMA)
|| name.equalsIgnoreCase(Constants.DOM_CHECK_CHAR_NORMALIZATION)
) {
return (value.equals(Boolean.TRUE)) ? false : true;
}//features whose parameter value can not be set to 'false'
else if( name.equalsIgnoreCase(Constants.DOM_ELEMENT_CONTENT_WHITESPACE)
|| name.equalsIgnoreCase(SEND_PSVI)
) {
return (value.equals(Boolean.TRUE)) ? true : false;
}// if name is not among the above listed above -- its not recognized. return false
else {
return false ;
}
}
else if (name.equalsIgnoreCase(Constants.DOM_ERROR_HANDLER)) {
return (value instanceof DOMErrorHandler) ? true : false ;
}
else if (name.equalsIgnoreCase(Constants.DOM_RESOURCE_RESOLVER)) {
return (value instanceof LSResourceResolver) ? true : false ;
}
else if (name.equalsIgnoreCase(Constants.DOM_SCHEMA_LOCATION)) {
return (value instanceof String) ? true : false ;
}
else if (name.equalsIgnoreCase(Constants.DOM_SCHEMA_TYPE)) {
// REVISIT: should null value be supported?
//as of now we are only supporting W3C XML Schema
return ( (value instanceof String) && value.equals(Constants.NS_XMLSCHEMA) ) ? true : false ;
}
else if (name.equalsIgnoreCase(SYMBOL_TABLE)){
// Xerces Symbol Table
return (value instanceof SymbolTable) ? true : false ;
}
else if (name.equalsIgnoreCase (GRAMMAR_POOL)){
return (value instanceof XMLGrammarPool) ? true : false ;
}
else {
//false if the parameter is not recognized or the requested value is not supported.
return false ;
}
}
public DOMErrorHandlerWrapper(DOMErrorHandler domErrorHandler) {
fDomErrorHandler = domErrorHandler;
}
void tryToParseSchemas(XmlSchemaCollection collection, DOMErrorHandler handler)
throws Exception {
final List<DOMLSInput> inputs = new ArrayList<>();
final Map<String, LSInput> resolverMap = new HashMap<>();
for (XmlSchema schema : collection.getXmlSchemas()) {
if (XMLConstants.W3C_XML_SCHEMA_NS_URI.equals(schema.getTargetNamespace())) {
continue;
}
Document document = new XmlSchemaSerializer().serializeSchema(schema, false)[0];
DOMLSInput input = new DOMLSInput(document, schema.getTargetNamespace());
resolverMap.put(schema.getTargetNamespace(), input);
inputs.add(input);
}
try {
Object schemaLoader = findMethod(impl, "createXSLoader").invoke(impl, new Object[1]);
DOMConfiguration config = (DOMConfiguration)findMethod(schemaLoader, "getConfig").invoke(schemaLoader);
config.setParameter("validate", Boolean.TRUE);
config.setParameter("error-handler", handler);
config.setParameter("resource-resolver", new LSResourceResolver() {
public LSInput resolveResource(String type, String namespaceURI, String publicId,
String systemId, String baseURI) {
return resolverMap.get(namespaceURI);
}
});
Method m = findMethod(schemaLoader, "loadInputList");
String name = m.getParameterTypes()[0].getName() + "Impl";
name = name.replace("xs.LS", "impl.xs.util.LS");
Class<?> c = Class.forName(name);
Object inputList = c.getConstructor(LSInput[].class, Integer.TYPE)
.newInstance(inputs.toArray(new LSInput[0]), inputs.size());
m.invoke(schemaLoader, inputList);
} catch (InvocationTargetException e) {
throw (Exception)e.getTargetException();
}
}
public DOMErrorHandler getErrorHandler(){
return fDomErrorHandler;
}
/** DOM L3-EXPERIMENTAL:
* Check if parameter can be set
*/
public boolean canSetParameter(String name, Object state) {
if (state == null) {
return true;
}
if (state instanceof Boolean) {
boolean value = ((Boolean) state).booleanValue();
if (name.equalsIgnoreCase(Constants.DOM_NAMESPACES)
|| name.equalsIgnoreCase(Constants.DOM_SPLIT_CDATA)
|| name.equalsIgnoreCase(Constants.DOM_DISCARD_DEFAULT_CONTENT)
|| name.equalsIgnoreCase(Constants.DOM_XMLDECL)
|| name.equalsIgnoreCase(Constants.DOM_WELLFORMED)
|| name.equalsIgnoreCase(Constants.DOM_INFOSET)
|| name.equalsIgnoreCase(Constants.DOM_ENTITIES)
|| name.equalsIgnoreCase(Constants.DOM_CDATA_SECTIONS)
|| name.equalsIgnoreCase(Constants.DOM_COMMENTS)
|| name.equalsIgnoreCase(Constants.DOM_NAMESPACE_DECLARATIONS)
|| name.equalsIgnoreCase(Constants.DOM_FORMAT_PRETTY_PRINT)) {
// both values supported
return true;
} else if (name.equalsIgnoreCase(Constants.DOM_CANONICAL_FORM)
|| name.equalsIgnoreCase(Constants.DOM_VALIDATE_IF_SCHEMA)
|| name.equalsIgnoreCase(Constants.DOM_VALIDATE)
|| name.equalsIgnoreCase(Constants.DOM_CHECK_CHAR_NORMALIZATION)
|| name.equalsIgnoreCase(Constants.DOM_DATATYPE_NORMALIZATION)) {
// || name.equalsIgnoreCase(Constants.DOM_NORMALIZE_CHARACTERS)) {
// true is not supported
return !value;
} else if (name.equalsIgnoreCase(Constants.DOM_ELEMENT_CONTENT_WHITESPACE)
|| name.equalsIgnoreCase(Constants.DOM_IGNORE_UNKNOWN_CHARACTER_DENORMALIZATIONS)) {
// false is not supported
return value;
}
} else if (name.equalsIgnoreCase(Constants.DOM_ERROR_HANDLER) &&
state == null || state instanceof DOMErrorHandler) {
return true;
}
return false;
}