You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@xerces.apache.org by el...@apache.org on 2003/12/24 17:24:21 UTC
cvs commit: xml-xerces/java/src/org/apache/xml/serialize DOMSerializerImpl.java
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: xerces-cvs-unsubscribe@xml.apache.org
For additional commands, e-mail: xerces-cvs-help@xml.apache.org