elena 2003/12/24 08:24:21 Modified: java/src/org/apache/xerces/dom CoreDOMImplementationImpl.java DOMConfigurationImpl.java DOMImplementationImpl.java java/src/org/apache/xerces/impl Constants.java java/src/org/apache/xerces/parsers DOMParserImpl.java java/src/org/apache/xerces/util DOMEntityResolverWrapper.java java/src/org/apache/xml/serialize DOMSerializerImpl.java Log: Fix DOM Level 3 Load and Save /Core implementation bugs, i.e. hasFeature, getParameterLists, make sure we pass stringData from LSInput, etc. Thanks to Neil Delima for fixing several of those bugs. Revision Changes Path 1.29 +40 -25 xml-xerces/java/src/org/apache/xerces/dom/CoreDOMImplementationImpl.java Index: CoreDOMImplementationImpl.java =================================================================== RCS file: /home/cvs/xml-xerces/java/src/org/apache/xerces/dom/CoreDOMImplementationImpl.java,v retrieving revision 1.28 retrieving revision 1.29 diff -u -r1.28 -r1.29 --- CoreDOMImplementationImpl.java 17 Nov 2003 13:48:40 -0000 1.28 +++ CoreDOMImplementationImpl.java 24 Dec 2003 16:24:20 -0000 1.29 @@ -131,30 +131,42 @@ * @return true iff this implementation is compatable with the specified * feature and version. */ - public boolean hasFeature(String feature, String version) { - // Currently, we support only XML Level 1 version 1.0 - boolean anyVersion = version == null || version.length() == 0; - // check if Xalan implementation is around and if yes report true for supporting - // XPath API - if ((feature.equalsIgnoreCase("XPath") || feature.equalsIgnoreCase("+XPath"))&& version.equals("3.0")){ - try{ - Class xpathClass = ObjectFactory.findProviderClass( - "org.apache.xpath.domapi.XPathEvaluatorImpl", - ObjectFactory.findClassLoader(), true); - } - catch (Exception e){ - return false; - } - return true; - } - return ( - feature.equalsIgnoreCase("Core") - && (anyVersion || version.equals("1.0") || version.equals("2.0"))) - || (feature.equalsIgnoreCase("XML") - && (anyVersion || version.equals("1.0") || version.equals("2.0"))) - || (feature.equalsIgnoreCase("LS") - && (anyVersion || version.equals("3.0"))); - } // hasFeature(String,String):boolean + public boolean hasFeature(String feature, String version) { + + boolean anyVersion = version == null || version.length() == 0; + if (feature.startsWith("+")) { + feature = feature.substring(1); + } + // check if Xalan implementation is around and if yes report true for supporting + // XPath API + if ((feature.equalsIgnoreCase("XPath") + || feature.equalsIgnoreCase("+XPath")) + && (anyVersion || version.equals("3.0"))) { + try { + Class xpathClass = + ObjectFactory.findProviderClass( + "org.apache.xpath.domapi.XPathEvaluatorImpl", + ObjectFactory.findClassLoader(), + true); + } catch (Exception e) { + return false; + } + return true; + } + return ( + feature.equalsIgnoreCase("Core") + && (anyVersion + || version.equals("1.0") + || version.equals("2.0") + || version.equals("3.0"))) + || (feature.equalsIgnoreCase("XML") + && (anyVersion + || version.equals("1.0") + || version.equals("2.0") + || version.equals("3.0"))) + || (feature.equalsIgnoreCase("LS") + && (anyVersion || version.equals("3.0"))); + } // hasFeature(String,String):boolean /** @@ -337,7 +349,9 @@ */ public LSParser createLSParser(short mode, String schemaType) throws DOMException { - if (mode == DOMImplementationLS.MODE_ASYNCHRONOUS) { + if (mode != DOMImplementationLS.MODE_SYNCHRONOUS || (schemaType !=null && + !"http://www.w3.org/2001/XMLSchema".equals(schemaType) && + !"http://www.w3.org/TR/REC-xml".equals(schemaType))) { String msg = DOMMessageFormatter.formatMessage( DOMMessageFormatter.DOM_DOMAIN, @@ -358,6 +372,7 @@ schemaType); } } + /** * DOM Level 3 LS CR - Experimental. * Create a new <code>LSSerializer</code> object. 1.15 +4 -4 xml-xerces/java/src/org/apache/xerces/dom/DOMConfigurationImpl.java Index: DOMConfigurationImpl.java =================================================================== RCS file: /home/cvs/xml-xerces/java/src/org/apache/xerces/dom/DOMConfigurationImpl.java,v retrieving revision 1.14 retrieving revision 1.15 diff -u -r1.14 -r1.15 --- DOMConfigurationImpl.java 18 Nov 2003 07:34:36 -0000 1.14 +++ DOMConfigurationImpl.java 24 Dec 2003 16:24:20 -0000 1.15 @@ -829,7 +829,7 @@ } else if ( name.equals(Constants.DOM_NAMESPACE_DECLARATIONS) - || name.equals(Constants.DOM_WHITESPACE_IN_ELEMENT_CONTENT)) { + || name.equals(Constants.DOM_ELEMENT_CONTENT_WHITESPACE)) { return Boolean.TRUE; } else if (name.equals(Constants.DOM_ERROR_HANDLER)) { @@ -914,7 +914,7 @@ return (value.equals(Boolean.TRUE)) ? false : true; }//features whose parameter value can not be set to 'false' else if( name.equals(Constants.DOM_NAMESPACE_DECLARATIONS) - || name.equals(Constants.DOM_WHITESPACE_IN_ELEMENT_CONTENT) + || name.equals(Constants.DOM_ELEMENT_CONTENT_WHITESPACE) || name.equals(SEND_PSVI) ) { return (value.equals(Boolean.TRUE)) ? true : false; @@ -982,7 +982,7 @@ parameters.add(Constants.DOM_WELLFORMED); parameters.add(Constants.DOM_NAMESPACE_DECLARATIONS); - parameters.add(Constants.DOM_WHITESPACE_IN_ELEMENT_CONTENT); + parameters.add(Constants.DOM_ELEMENT_CONTENT_WHITESPACE); parameters.add(Constants.DOM_ERROR_HANDLER); parameters.add(Constants.DOM_SCHEMA_TYPE); 1.30 +20 -41 xml-xerces/java/src/org/apache/xerces/dom/DOMImplementationImpl.java Index: DOMImplementationImpl.java =================================================================== RCS file: /home/cvs/xml-xerces/java/src/org/apache/xerces/dom/DOMImplementationImpl.java,v retrieving revision 1.29 retrieving revision 1.30 diff -u -r1.29 -r1.30 --- DOMImplementationImpl.java 10 Nov 2003 10:08:44 -0000 1.29 +++ DOMImplementationImpl.java 24 Dec 2003 16:24:20 -0000 1.30 @@ -121,46 +121,25 @@ */ public boolean hasFeature(String feature, String version) { - // Currently, we support only XML Level 1 version 1.0 - boolean anyVersion = version == null || version.length() == 0; - // check if Xalan implementation is around and if yes report true for supporting - // XPath API - if ((feature.equalsIgnoreCase("XPath") || feature.equalsIgnoreCase("+XPath"))&& version.equals("3.0")){ - try{ - Class xpathClass = ObjectFactory.findProviderClass( - "org.apache.xpath.domapi.XPathEvaluatorImpl", - ObjectFactory.findClassLoader(), true); - } - catch (Exception e){ - return false; - } - return true; - } - return - (feature.equalsIgnoreCase("Core") - && (anyVersion - || version.equals("1.0") - || version.equals("2.0") - || version.equals("3.0"))) - || (feature.equalsIgnoreCase("XML") - && (anyVersion - || version.equals("1.0") - || version.equals("2.0") - || version.equals("3.0"))) - || (feature.equalsIgnoreCase("Events") - && (anyVersion - || version.equals("2.0"))) - || (feature.equalsIgnoreCase("MutationEvents") - && (anyVersion - || version.equals("2.0"))) - || (feature.equalsIgnoreCase("Traversal") - && (anyVersion - || version.equals("2.0"))) - || (feature.equalsIgnoreCase("Range") - && (anyVersion - || version.equals("2.0"))) - ; - + boolean result = super.hasFeature(feature, version); + if (!result) { + boolean anyVersion = version == null || version.length() == 0; + if (feature.startsWith("+")) { + feature = feature.substring(1); + } + return ( + (feature.equalsIgnoreCase("Events") + && (anyVersion || version.equals("2.0"))) + || (feature.equalsIgnoreCase("MutationEvents") + && (anyVersion || version.equals("2.0"))) + || (feature.equalsIgnoreCase("Traversal") + && (anyVersion || version.equals("2.0"))) + || (feature.equalsIgnoreCase("Range") + && (anyVersion || version.equals("2.0"))) + || (feature.equalsIgnoreCase("MutationEvents") + && (anyVersion || version.equals("2.0")))); + } + return result; } // hasFeature(String,String):boolean 1.36 +5 -4 xml-xerces/java/src/org/apache/xerces/impl/Constants.java Index: Constants.java =================================================================== RCS file: /home/cvs/xml-xerces/java/src/org/apache/xerces/impl/Constants.java,v retrieving revision 1.35 retrieving revision 1.36 diff -u -r1.35 -r1.36 --- Constants.java 13 Nov 2003 22:47:15 -0000 1.35 +++ Constants.java 24 Dec 2003 16:24:21 -0000 1.36 @@ -171,8 +171,8 @@ public static final String DOM_VALIDATE_IF_SCHEMA = "validate-if-schema"; public static final String DOM_VALIDATE = "validate"; - public static final String DOM_WHITESPACE_IN_ELEMENT_CONTENT = - "whitespace-in-element-content"; + public static final String DOM_ELEMENT_CONTENT_WHITESPACE = + "element-content-whitespace"; // DOM Level 3 features defined in Core: public static final String DOM_DISCARD_DEFAULT_CONTENT = "discard-default-content"; @@ -180,13 +180,14 @@ public static final String DOM_CHECK_CHAR_NORMALIZATION = "check-character-normalization"; public static final String DOM_WELLFORMED = "well-formed"; public static final String DOM_SPLIT_CDATA = "split-cdata-sections"; - public static final String DOM_IGNORE_CHAR_DENORMALIZATION = "ignore-unknown-character-denomalizations"; // Load and Save public static final String DOM_FORMAT_PRETTY_PRINT = "format-pretty-print"; public static final String DOM_XMLDECL = "xml-declaration"; public static final String DOM_UNKNOWNCHARS = "unknown-characters"; public static final String DOM_CERTIFIED = "certified"; + public static final String DOM_DISALLOW_DOCTYPE = "disallow-doctype"; + public static final String DOM_IGNORE_UNKNOWN_CHARACTER_DENORMALIZATIONS = "ignore-unknown-character-denormalizations"; // DOM Properties public static final String DOM_RESOURCE_RESOLVER = "resource-resolver"; 1.10 +66 -8 xml-xerces/java/src/org/apache/xerces/parsers/DOMParserImpl.java Index: DOMParserImpl.java =================================================================== RCS file: /home/cvs/xml-xerces/java/src/org/apache/xerces/parsers/DOMParserImpl.java,v retrieving revision 1.9 retrieving revision 1.10 diff -u -r1.9 -r1.10 --- DOMParserImpl.java 19 Nov 2003 00:08:10 -0000 1.9 +++ DOMParserImpl.java 24 Dec 2003 16:24:21 -0000 1.10 @@ -64,6 +64,7 @@ import org.apache.xerces.dom.DOMErrorImpl; import org.apache.xerces.dom.DOMMessageFormatter; +import org.apache.xerces.dom.DOMStringListImpl; import org.apache.xerces.dom3.DOMConfiguration; import org.apache.xerces.dom3.DOMError; import org.apache.xerces.dom3.DOMErrorHandler; @@ -125,7 +126,11 @@ /** Feature identifier: expose schema normalized value */ protected static final String NORMALIZE_DATA = Constants.XERCES_FEATURE_PREFIX + Constants.SCHEMA_NORMALIZED_VALUE; - + + /** Feature identifier: disallow docType Decls. */ + protected static final String DISALLOW_DOCTYPE_DECL_FEATURE = + Constants.XERCES_FEATURE_PREFIX + Constants.DISALLOW_DOCTYPE_DECL_FEATURE; + // internal properties protected static final String SYMBOL_TABLE = Constants.XERCES_PROPERTY_PREFIX + Constants.SYMBOL_TABLE_PROPERTY; @@ -149,6 +154,7 @@ private Vector fSchemaLocations = new Vector (); private String fSchemaLocation = null; + private DOMStringList fRecognizedParameters; // // Constructors @@ -198,6 +204,7 @@ Constants.DOM_SUPPORTED_MEDIATYPES_ONLY, Constants.DOM_CERTIFIED, Constants.DOM_WELLFORMED, + Constants.DOM_IGNORE_UNKNOWN_CHARACTER_DENORMALIZATIONS, }; fConfiguration.addRecognizedFeatures (domRecognizedFeatures); @@ -213,6 +220,7 @@ fConfiguration.setFeature (Constants.DOM_NAMESPACE_DECLARATIONS, true); fConfiguration.setFeature (Constants.DOM_SUPPORTED_MEDIATYPES_ONLY, false); fConfiguration.setFeature (Constants.DOM_WELLFORMED, true); + fConfiguration.setFeature (Constants.DOM_IGNORE_UNKNOWN_CHARACTER_DENORMALIZATIONS, true); // REVISIT: by default Xerces assumes that input is certified. // default is different from the one specified in the DOM spec @@ -327,6 +335,9 @@ else if (name.equals (Constants.DOM_ENTITIES)) { fConfiguration.setFeature (CREATE_ENTITY_REF_NODES, state); } + else if (name.equals (Constants.DOM_DISALLOW_DOCTYPE)) { + fConfiguration.setFeature (DISALLOW_DOCTYPE_DECL_FEATURE, state); + } else if (name.equals (Constants.DOM_SUPPORTED_MEDIATYPES_ONLY) || name.equals (Constants.DOM_CANONICAL_FORM)) { if (state) { // true is not supported @@ -345,6 +356,7 @@ else if (name.equals (Constants.DOM_CDATA_SECTIONS) || name.equals (Constants.DOM_NAMESPACE_DECLARATIONS) || name.equals (Constants.DOM_WELLFORMED) + || name.equals (Constants.DOM_IGNORE_UNKNOWN_CHARACTER_DENORMALIZATIONS) || name.equals (Constants.DOM_INFOSET)) { if (!state) { // false is not supported String msg = @@ -373,7 +385,7 @@ fConfiguration.setFeature (VALIDATION_FEATURE, false); } } - else if (name.equals (Constants.DOM_WHITESPACE_IN_ELEMENT_CONTENT)) { + else if (name.equals (Constants.DOM_ELEMENT_CONTENT_WHITESPACE)) { fConfiguration.setFeature (INCLUDE_IGNORABLE_WHITESPACE, state); } else if (name.equals (Constants.DOM_PSVI)){ @@ -572,15 +584,21 @@ ? Boolean.TRUE : Boolean.FALSE; } - else if (name.equals (Constants.DOM_WHITESPACE_IN_ELEMENT_CONTENT)) { + else if (name.equals (Constants.DOM_ELEMENT_CONTENT_WHITESPACE)) { return (fConfiguration.getFeature (INCLUDE_IGNORABLE_WHITESPACE)) ? Boolean.TRUE : Boolean.FALSE; } + else if (name.equals (Constants.DOM_DISALLOW_DOCTYPE)) { + return (fConfiguration.getFeature (DISALLOW_DOCTYPE_DECL_FEATURE)) + ? Boolean.TRUE + : Boolean.FALSE; + } else if ( name.equals (Constants.DOM_NAMESPACE_DECLARATIONS) || name.equals (Constants.DOM_CDATA_SECTIONS) || name.equals (Constants.DOM_WELLFORMED) + || name.equals (Constants.DOM_IGNORE_UNKNOWN_CHARACTER_DENORMALIZATIONS) || name.equals (Constants.DOM_CANONICAL_FORM) || name.equals (Constants.DOM_SUPPORTED_MEDIATYPES_ONLY) || name.equals (Constants.DOM_INFOSET) @@ -643,7 +661,9 @@ name.equals (Constants.DOM_CDATA_SECTIONS) || name.equals (Constants.DOM_NAMESPACE_DECLARATIONS) || name.equals (Constants.DOM_WELLFORMED) - || name.equals (Constants.DOM_INFOSET) ) { + || name.equals (Constants.DOM_IGNORE_UNKNOWN_CHARACTER_DENORMALIZATIONS) + || name.equals (Constants.DOM_INFOSET) + || name.equals (Constants.DOM_DISALLOW_DOCTYPE) ) { // false is not supported return (state) ? true : false; } @@ -655,7 +675,8 @@ || name.equals (Constants.DOM_NAMESPACES) || name.equals (Constants.DOM_VALIDATE) || name.equals (Constants.DOM_VALIDATE_IF_SCHEMA) - || name.equals (Constants.DOM_WHITESPACE_IN_ELEMENT_CONTENT)) { + || name.equals (Constants.DOM_ELEMENT_CONTENT_WHITESPACE) + || name.equals (Constants.DOM_XMLDECL)) { return true; } @@ -710,8 +731,45 @@ * parameter names defined outside this specification. */ public DOMStringList getParameterNames () { - //REVISIT - return null; + if (fRecognizedParameters == null){ + Vector parameters = new Vector(); + + // REVISIT: add Xerces recognized properties/features + parameters.add(Constants.DOM_NAMESPACES); + parameters.add(Constants.DOM_CDATA_SECTIONS); + parameters.add(Constants.DOM_CANONICAL_FORM); + parameters.add(Constants.DOM_NAMESPACE_DECLARATIONS); + + parameters.add(Constants.DOM_ENTITIES); + parameters.add(Constants.DOM_VALIDATE_IF_SCHEMA); + parameters.add(Constants.DOM_VALIDATE); + parameters.add(Constants.DOM_DATATYPE_NORMALIZATION); + + parameters.add(Constants.DOM_CHARSET_OVERRIDES_XML_ENCODING); + parameters.add(Constants.DOM_CHECK_CHAR_NORMALIZATION); + parameters.add(Constants.DOM_SUPPORTED_MEDIATYPES_ONLY); + parameters.add(Constants.DOM_IGNORE_UNKNOWN_CHARACTER_DENORMALIZATIONS); + + parameters.add(Constants.DOM_NORMALIZE_CHARACTERS); + parameters.add(Constants.DOM_WELLFORMED); + parameters.add(Constants.DOM_INFOSET); + parameters.add(Constants.DOM_DISALLOW_DOCTYPE); + parameters.add(Constants.DOM_ELEMENT_CONTENT_WHITESPACE); + + parameters.add(Constants.DOM_ENTITIES); + parameters.add(Constants.DOM_ELEMENT_CONTENT_WHITESPACE); + parameters.add(Constants.DOM_COMMENTS); + + parameters.add(Constants.DOM_ERROR_HANDLER); + parameters.add(Constants.DOM_RESOURCE_RESOLVER); + parameters.add(Constants.DOM_SCHEMA_LOCATION); + parameters.add(Constants.DOM_SCHEMA_TYPE); + + fRecognizedParameters = new DOMStringListImpl(parameters); + + } + + return fRecognizedParameters; } /** 1.8 +27 -6 xml-xerces/java/src/org/apache/xerces/util/DOMEntityResolverWrapper.java Index: DOMEntityResolverWrapper.java =================================================================== RCS file: /home/cvs/xml-xerces/java/src/org/apache/xerces/util/DOMEntityResolverWrapper.java,v retrieving revision 1.7 retrieving revision 1.8 diff -u -r1.7 -r1.8 --- DOMEntityResolverWrapper.java 17 Nov 2003 13:48:41 -0000 1.7 +++ DOMEntityResolverWrapper.java 24 Dec 2003 16:24:21 -0000 1.8 @@ -69,6 +69,7 @@ import java.io.InputStream; import java.io.IOException; import java.io.Reader; +import java.io.StringReader; /** @@ -141,9 +142,19 @@ // For entity resolution the type of the resource would be XML TYPE // DOM L3 LS spec mention only the XML 1.0 recommendation right now LSInput inputSource = - resourceIdentifier == null ? - fEntityResolver.resolveResource(null, null, null, null, null) : - fEntityResolver.resolveResource( XML_TYPE, resourceIdentifier.getNamespace(), resourceIdentifier.getPublicId(), resourceIdentifier.getLiteralSystemId(), resourceIdentifier.getBaseSystemId()); + resourceIdentifier == null + ? fEntityResolver.resolveResource( + null, + null, + null, + null, + null) + : fEntityResolver.resolveResource( + XML_TYPE, + resourceIdentifier.getNamespace(), + resourceIdentifier.getPublicId(), + resourceIdentifier.getLiteralSystemId(), + resourceIdentifier.getBaseSystemId()); if (inputSource != null) { String publicId = inputSource.getPublicId(); String systemId = inputSource.getSystemId(); @@ -151,10 +162,20 @@ InputStream byteStream = inputSource.getByteStream(); Reader charStream = inputSource.getCharacterStream(); String encoding = inputSource.getEncoding(); + String data = inputSource.getStringData(); XMLInputSource xmlInputSource = new XMLInputSource(publicId, systemId, baseSystemId); - xmlInputSource.setByteStream((InputStream)byteStream); - xmlInputSource.setCharacterStream(charStream); + + if (charStream != null) { + xmlInputSource.setCharacterStream(charStream); + } + if (byteStream != null) { + xmlInputSource.setByteStream((InputStream) byteStream); + } + if (data != null && data.length() != 0) { + xmlInputSource.setCharacterStream( + new StringReader(data)); + } xmlInputSource.setEncoding(encoding); return xmlInputSource; } 1.8 +70 -22 xml-xerces/java/src/org/apache/xml/serialize/DOMSerializerImpl.java Index: DOMSerializerImpl.java =================================================================== RCS file: /home/cvs/xml-xerces/java/src/org/apache/xml/serialize/DOMSerializerImpl.java,v retrieving revision 1.7 retrieving revision 1.8 diff -u -r1.7 -r1.8 --- DOMSerializerImpl.java 18 Nov 2003 14:59:33 -0000 1.7 +++ DOMSerializerImpl.java 24 Dec 2003 16:24:21 -0000 1.8 @@ -69,8 +69,10 @@ import java.lang.reflect.Method; import java.util.Enumeration; import java.util.Hashtable; +import java.util.Vector; import org.apache.xerces.dom.DOMErrorImpl; +import org.apache.xerces.dom.DOMStringListImpl; import org.apache.xerces.dom.DOMMessageFormatter; import org.apache.xerces.dom3.DOMConfiguration; import org.apache.xerces.dom3.DOMError; @@ -111,6 +113,9 @@ // XML 1.1 serializer private XML11Serializer xml11Serializer; + + //Recognized parameters + private DOMStringList fRecognizedParameters; /** * Constructs a new LSSerializer. @@ -162,7 +167,8 @@ || name.equals(Constants.DOM_FORMAT_PRETTY_PRINT) || name.equals(Constants.DOM_NORMALIZE_CHARACTERS) // REVISIT: these must be supported - || name.equals(Constants.DOM_WELLFORMED)) { + || name.equals(Constants.DOM_INFOSET) + || name.equals(Constants.DOM_WELLFORMED)){ // true is not supported if (state){ String msg = DOMMessageFormatter.formatMessage( @@ -172,14 +178,14 @@ throw new DOMException(DOMException.NOT_SUPPORTED_ERR, msg); } } - else if (name.equals(Constants.DOM_INFOSET) - || name.equals(Constants.DOM_NAMESPACE_DECLARATIONS) - || name.equals(Constants.DOM_WHITESPACE_IN_ELEMENT_CONTENT) - || name.equals(Constants.DOM_IGNORE_CHAR_DENORMALIZATION) + else if (name.equals(Constants.DOM_NAMESPACE_DECLARATIONS) + || name.equals(Constants.DOM_ELEMENT_CONTENT_WHITESPACE) + || name.equals(Constants.DOM_IGNORE_UNKNOWN_CHARACTER_DENORMALIZATIONS) // REVISIT: these must be supported || name.equals(Constants.DOM_ENTITIES) || name.equals(Constants.DOM_CDATA_SECTIONS) - || name.equals(Constants.DOM_COMMENTS)) { + || name.equals(Constants.DOM_COMMENTS) + || name.equals(Constants.DOM_IGNORE_UNKNOWN_CHARACTER_DENORMALIZATIONS)) { // false is not supported if (!state){ String msg = DOMMessageFormatter.formatMessage( @@ -208,7 +214,8 @@ } } else if (name.equals(Constants.DOM_ERROR_HANDLER)) { - if (value instanceof DOMErrorHandler) { + + if (value == null || value instanceof DOMErrorHandler) { serializer.fDOMErrorHandler = (DOMErrorHandler) value; } else { @@ -222,7 +229,8 @@ } else if (name.equals(Constants.DOM_RESOURCE_RESOLVER) || name.equals(Constants.DOM_SCHEMA_LOCATION) - || name.equals(Constants.DOM_SCHEMA_TYPE)) { + || name.equals(Constants.DOM_SCHEMA_TYPE) && + value != null) { String msg = DOMMessageFormatter.formatMessage( DOMMessageFormatter.DOM_DOMAIN, "FEATURE_NOT_SUPPORTED", @@ -259,23 +267,25 @@ || name.equals(Constants.DOM_FORMAT_PRETTY_PRINT) || name.equals(Constants.DOM_NORMALIZE_CHARACTERS) // REVISIT: these must be supported - || name.equals(Constants.DOM_WELLFORMED)) { + || name.equals(Constants.DOM_WELLFORMED) + || name.equals(Constants.DOM_INFOSET)) { // true is not supported return !value; } - else if (name.equals(Constants.DOM_INFOSET) - || name.equals(Constants.DOM_NAMESPACE_DECLARATIONS) - || name.equals(Constants.DOM_WHITESPACE_IN_ELEMENT_CONTENT) - || name.equals(Constants.DOM_IGNORE_CHAR_DENORMALIZATION) + else if (name.equals(Constants.DOM_NAMESPACE_DECLARATIONS) + || name.equals(Constants.DOM_ELEMENT_CONTENT_WHITESPACE) + || name.equals(Constants.DOM_IGNORE_UNKNOWN_CHARACTER_DENORMALIZATIONS) // REVISIT: these must be supported || name.equals(Constants.DOM_ENTITIES) || name.equals(Constants.DOM_CDATA_SECTIONS) - || name.equals(Constants.DOM_COMMENTS)) { + || name.equals(Constants.DOM_COMMENTS) + || name.equals(Constants.DOM_IGNORE_UNKNOWN_CHARACTER_DENORMALIZATIONS)) { // false is not supported return value; } } - else if (name.equals(Constants.DOM_ERROR_HANDLER)){ + else if (name.equals(Constants.DOM_ERROR_HANDLER) && + state == null || state instanceof DOMErrorHandler){ return true; } return false; @@ -290,8 +300,44 @@ * parameter names defined outside this specification. */ public DOMStringList getParameterNames() { - //REVISIT - return null; + + if (fRecognizedParameters == null){ + Vector parameters = new Vector(); + + //Add DOM recognized parameters + //REVISIT: Would have been nice to have a list of + //recognized parameters. + parameters.add(Constants.DOM_NAMESPACES); + + parameters.add(Constants.DOM_SPLIT_CDATA); + parameters.add(Constants.DOM_DISCARD_DEFAULT_CONTENT); + parameters.add(Constants.DOM_XMLDECL); + parameters.add(Constants.DOM_CANONICAL_FORM); + parameters.add(Constants.DOM_VALIDATE_IF_SCHEMA); + parameters.add(Constants.DOM_VALIDATE); + parameters.add(Constants.DOM_CHECK_CHAR_NORMALIZATION); + parameters.add(Constants.DOM_DATATYPE_NORMALIZATION); + parameters.add(Constants.DOM_FORMAT_PRETTY_PRINT); + parameters.add(Constants.DOM_NORMALIZE_CHARACTERS); + parameters.add(Constants.DOM_WELLFORMED); + parameters.add(Constants.DOM_INFOSET); + parameters.add(Constants.DOM_NAMESPACE_DECLARATIONS); + parameters.add(Constants.DOM_ELEMENT_CONTENT_WHITESPACE); + parameters.add(Constants.DOM_ENTITIES); + parameters.add(Constants.DOM_CDATA_SECTIONS); + parameters.add(Constants.DOM_COMMENTS); + parameters.add(Constants.DOM_IGNORE_UNKNOWN_CHARACTER_DENORMALIZATIONS); + parameters.add(Constants.DOM_ERROR_HANDLER); + //parameters.add(Constants.DOM_SCHEMA_LOCATION); + //parameters.add(Constants.DOM_SCHEMA_TYPE); + + //Add recognized xerces features and properties + + fRecognizedParameters = new DOMStringListImpl(parameters); + + } + + return fRecognizedParameters; } /** DOM L3-EXPERIMENTAL: @@ -473,7 +519,7 @@ private void checkAllFeatures(XMLSerializer ser) { - if (getParameter(Constants.DOM_WHITESPACE_IN_ELEMENT_CONTENT) == Boolean.TRUE) + if (getParameter(Constants.DOM_ELEMENT_CONTENT_WHITESPACE) == Boolean.TRUE) ser._format.setPreserveSpace(true); else ser._format.setPreserveSpace(false); @@ -487,6 +533,7 @@ ser.fSymbolTable = new SymbolTable(); ser.fFeatures = new Hashtable(); ser.fFeatures.put(Constants.DOM_NAMESPACES, Boolean.TRUE); + ser.fFeatures.put(Constants.DOM_NAMESPACE_DECLARATIONS, Boolean.TRUE); ser.fFeatures.put(Constants.DOM_NORMALIZE_CHARACTERS, Boolean.FALSE); ser.fFeatures.put(Constants.DOM_VALIDATE_IF_SCHEMA, Boolean.FALSE); ser.fFeatures.put(Constants.DOM_VALIDATE, Boolean.FALSE); @@ -494,7 +541,7 @@ ser.fFeatures.put(Constants.DOM_SPLIT_CDATA, Boolean.TRUE); ser.fFeatures.put(Constants.DOM_CDATA_SECTIONS, Boolean.TRUE); ser.fFeatures.put(Constants.DOM_COMMENTS, Boolean.TRUE); - ser.fFeatures.put(Constants.DOM_WHITESPACE_IN_ELEMENT_CONTENT, Boolean.TRUE); + ser.fFeatures.put(Constants.DOM_ELEMENT_CONTENT_WHITESPACE, Boolean.TRUE); ser.fFeatures.put(Constants.DOM_DISCARD_DEFAULT_CONTENT, Boolean.TRUE); ser.fFeatures.put(Constants.DOM_CANONICAL_FORM, Boolean.FALSE); ser.fFeatures.put(Constants.DOM_FORMAT_PRETTY_PRINT, Boolean.FALSE); @@ -503,10 +550,10 @@ ser.fFeatures.put(Constants.DOM_DATATYPE_NORMALIZATION, Boolean.FALSE); ser.fFeatures.put(Constants.DOM_NORMALIZE_CHARACTERS, Boolean.FALSE); ser.fFeatures.put(Constants.DOM_WELLFORMED, Boolean.FALSE); + ser.fFeatures.put(Constants.DOM_IGNORE_UNKNOWN_CHARACTER_DENORMALIZATIONS, Boolean.TRUE); ser.fFeatures.put(Constants.DOM_INFOSET, Boolean.FALSE); ser.fFeatures.put(Constants.DOM_NAMESPACE_DECLARATIONS, Boolean.TRUE); - ser.fFeatures.put(Constants.DOM_WHITESPACE_IN_ELEMENT_CONTENT, Boolean.TRUE); - ser.fFeatures.put(Constants.DOM_IGNORE_CHAR_DENORMALIZATION, Boolean.TRUE); + } // copies all settings that could have been modified @@ -672,6 +719,7 @@ ser.fDOMErrorHandler.handleError(error); } + e.printStackTrace(); return false; } return true;
--------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]