elena 2003/06/10 06:41:29 Modified: java/src/org/apache/xml/serialize DOMWriterImpl.java XMLSerializer.java Log: Fixing setParameter/canSetParameter: http://nagoya.apache.org/bugzilla/show_bug.cgi?id=20636 Revision Changes Path 1.14 +104 -67 xml-xerces/java/src/org/apache/xml/serialize/DOMWriterImpl.java Index: DOMWriterImpl.java =================================================================== RCS file: /home/cvs/xml-xerces/java/src/org/apache/xml/serialize/DOMWriterImpl.java,v retrieving revision 1.13 retrieving revision 1.14 diff -u -r1.13 -r1.14 --- DOMWriterImpl.java 13 May 2003 13:23:48 -0000 1.13 +++ DOMWriterImpl.java 10 Jun 2003 13:41:29 -0000 1.14 @@ -131,33 +131,70 @@ public void setParameter(String name, Object value) throws DOMException { if (serializer.fFeatures.containsKey(name)) { // This is a feature - if (value == Boolean.TRUE || value == Boolean.FALSE){ - if (canSetParameter(name, value)) { + if (value instanceof Boolean){ + boolean state = ((Boolean)value).booleanValue(); + if (name.equals(Constants.DOM_XMLDECL)){ + serializer._format.setOmitXMLDeclaration(!state); serializer.fFeatures.put(name, value); - if (name.equals(Constants.DOM_XMLDECL)) { - serializer._format.setOmitXMLDeclaration( - !((Boolean) value).booleanValue()); + } + else if (name.equals(Constants.DOM_NAMESPACES)){ + serializer.fNamespaces = state; + serializer.fFeatures.put(name, value); + } + else if (name.equals(Constants.DOM_SPLIT_CDATA) + || name.equals(Constants.DOM_DISCARD_DEFAULT_CONTENT)){ + // both values supported + serializer.fFeatures.put(name, value); + } + else if (name.equals(Constants.DOM_CANONICAL_FORM) + || name.equals(Constants.DOM_VALIDATE_IF_SCHEMA) + || name.equals(Constants.DOM_VALIDATE) + || name.equals(Constants.DOM_CHECK_CHAR_NORMALIZATION) + || name.equals(Constants.DOM_DATATYPE_NORMALIZATION) + || name.equals(Constants.DOM_FORMAT_PRETTY_PRINT) + || name.equals(Constants.DOM_NORMALIZE_CHARACTERS) + // REVISIT: these must be supported + || name.equals(Constants.DOM_WELLFORMED)) { + // true is not supported + if (state){ + String msg = DOMMessageFormatter.formatMessage( + DOMMessageFormatter.DOM_DOMAIN, + "FEATURE_NOT_SUPPORTED", + new Object[] { name }); + 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) + // REVISIT: these must be supported + || name.equals(Constants.DOM_ENTITIES) + || name.equals(Constants.DOM_CDATA_SECTIONS) + || name.equals(Constants.DOM_COMMENTS)) { + // false is not supported + if (!state){ + String msg = DOMMessageFormatter.formatMessage( + DOMMessageFormatter.DOM_DOMAIN, + "FEATURE_NOT_SUPPORTED", + new Object[] { name }); + throw new DOMException(DOMException.NOT_SUPPORTED_ERR, msg); } - else if (name.equals(Constants.DOM_NAMESPACES)){ - serializer.fNamespaces = (value==Boolean.TRUE)?true:false; - } } else { String msg = DOMMessageFormatter.formatMessage( DOMMessageFormatter.DOM_DOMAIN, - "FEATURE_NOT_SUPPORTED", + "FEATURE_NOT_FOUND", new Object[] { name }); throw new DOMException(DOMException.NOT_SUPPORTED_ERR, msg); } } - else { - // REVISIT: should be TYPE_MISMATCH - String msg = DOMMessageFormatter.formatMessage( - DOMMessageFormatter.DOM_DOMAIN, - "FEATURE_NOT_SUPPORTED", - new Object[] { name }); - throw new DOMException(DOMException.NOT_SUPPORTED_ERR, msg); - } + // REVISIT: modify error exception to TYPE_MISMATCH + String msg = DOMMessageFormatter.formatMessage( + DOMMessageFormatter.DOM_DOMAIN, + "FEATURE_NOT_SUPPORTED", + new Object[] { name }); + throw new DOMException(DOMException.NOT_FOUND_ERR, msg); } else if (name.equals(Constants.DOM_ERROR_HANDLER)) { if (value instanceof DOMErrorHandler) { @@ -169,7 +206,7 @@ DOMMessageFormatter.DOM_DOMAIN, "FEATURE_NOT_SUPPORTED", new Object[] { name }); - throw new DOMException(DOMException.NOT_SUPPORTED_ERR, msg); + throw new DOMException(DOMException.NOT_FOUND_ERR, msg); } } else if (name.equals(Constants.DOM_ENTITY_RESOLVER) @@ -194,29 +231,42 @@ * Check if parameter can be set */ public boolean canSetParameter(String name, Object state) { - if (name.equals(Constants.DOM_NORMALIZE_CHARACTERS) - && state == Boolean.TRUE){ - return false; - } - else if (name.equals(Constants.DOM_VALIDATE) && state == Boolean.TRUE) { - return false; - } - else if (name.equals(Constants.DOM_WHITESPACE_IN_ELEMENT_CONTENT) - && state == Boolean.FALSE) { - return false; - } - else if (name.equals(Constants.DOM_CANONICAL_FORM) - && state == Boolean.TRUE) { - return false; + if (state instanceof Boolean){ + boolean value = ((Boolean)state).booleanValue(); + if (name.equals(Constants.DOM_NAMESPACES) + || name.equals(Constants.DOM_SPLIT_CDATA) + || name.equals(Constants.DOM_DISCARD_DEFAULT_CONTENT) + || name.equals(Constants.DOM_XMLDECL)){ + // both values supported + return true; + } + else if (name.equals(Constants.DOM_CANONICAL_FORM) + || name.equals(Constants.DOM_VALIDATE_IF_SCHEMA) + || name.equals(Constants.DOM_VALIDATE) + || name.equals(Constants.DOM_CHECK_CHAR_NORMALIZATION) + || name.equals(Constants.DOM_DATATYPE_NORMALIZATION) + || name.equals(Constants.DOM_FORMAT_PRETTY_PRINT) + || name.equals(Constants.DOM_NORMALIZE_CHARACTERS) + // REVISIT: these must be supported + || name.equals(Constants.DOM_WELLFORMED)) { + // 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) + // REVISIT: these must be supported + || name.equals(Constants.DOM_ENTITIES) + || name.equals(Constants.DOM_CDATA_SECTIONS) + || name.equals(Constants.DOM_COMMENTS)) { + // false is not supported + return value; + } } - else if (name.equals(Constants.DOM_FORMAT_PRETTY_PRINT) - && state == Boolean.TRUE) { - return false; + else if (name.equals(Constants.DOM_ERROR_HANDLER)){ + return true; } - else if (serializer.fFeatures.get(name)!=null || - name.equals(Constants.DOM_ERROR_HANDLER)){ - return true; - } return false; } @@ -284,29 +334,6 @@ } /** - * The error handler that will receive error notifications during - * serialization. The node where the error occured is passed to this - * error handler, any modification to nodes from within an error - * callback should be avoided since this will result in undefined, - * implementation dependent behavior. - */ - public DOMErrorHandler getErrorHandler() { - return serializer.fDOMErrorHandler; - } - - /** - * DOM L3 EXPERIMENTAL: - * The error handler that will receive error notifications during - * serialization. The node where the error occured is passed to this - * error handler, any modification to nodes from within an error - * callback should be avoided since this will result in undefined, - * implementation dependent behavior. - */ - public void setErrorHandler(DOMErrorHandler errorHandler) { - serializer.fDOMErrorHandler = errorHandler; - } - - /** * DOM L3 EXPERIMENTAL: * Write out the specified node as described above in the description of * <code>DOMWriter</code>. Writing a Document or Entity node produces a @@ -538,17 +565,27 @@ ser.fLocalNSBinder = new NamespaceSupport(); ser.fSymbolTable = new SymbolTable(); ser.fFeatures = new Hashtable(); - ser.fFeatures.put(Constants.NAMESPACES_FEATURE, Boolean.TRUE); + ser.fFeatures.put(Constants.DOM_NAMESPACES, Boolean.TRUE); ser.fFeatures.put(Constants.DOM_NORMALIZE_CHARACTERS, Boolean.FALSE); - ser.fFeatures.put(Constants.DOM_SPLIT_CDATA, Boolean.TRUE); + ser.fFeatures.put(Constants.DOM_VALIDATE_IF_SCHEMA, Boolean.FALSE); ser.fFeatures.put(Constants.DOM_VALIDATE, Boolean.FALSE); - ser.fFeatures.put(Constants.DOM_ENTITIES, Boolean.FALSE); + ser.fFeatures.put(Constants.DOM_ENTITIES, Boolean.TRUE); + 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_DISCARD_DEFAULT_CONTENT, Boolean.TRUE); ser.fFeatures.put(Constants.DOM_CANONICAL_FORM, Boolean.FALSE); ser.fFeatures.put(Constants.DOM_FORMAT_PRETTY_PRINT, Boolean.FALSE); ser.fFeatures.put(Constants.DOM_XMLDECL, Boolean.TRUE); - ser.fFeatures.put(Constants.DOM_UNKNOWNCHARS, Boolean.TRUE); + ser.fFeatures.put(Constants.DOM_CHECK_CHAR_NORMALIZATION, Boolean.FALSE); + 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_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 1.52 +3 -2 xml-xerces/java/src/org/apache/xml/serialize/XMLSerializer.java Index: XMLSerializer.java =================================================================== RCS file: /home/cvs/xml-xerces/java/src/org/apache/xml/serialize/XMLSerializer.java,v retrieving revision 1.51 retrieving revision 1.52 diff -u -r1.51 -r1.52 --- XMLSerializer.java 30 May 2003 13:35:44 -0000 1.51 +++ XMLSerializer.java 10 Jun 2003 13:41:29 -0000 1.52 @@ -81,6 +81,7 @@ import org.apache.xerces.dom.DOMMessageFormatter; import org.apache.xerces.dom3.DOMError; +import org.apache.xerces.impl.Constants; import org.apache.xerces.util.NamespaceSupport; import org.apache.xerces.util.SymbolTable; import org.apache.xerces.util.XMLChar; @@ -1157,7 +1158,7 @@ private void printAttribute (String name, String value, boolean isSpecified) throws IOException{ if (isSpecified || (fFeatures != null && - !((Boolean)fFeatures.get("discard-default-content")).booleanValue())) { + !((Boolean)fFeatures.get(Constants.DOM_DISCARD_DEFAULT_CONTENT)).booleanValue())) { _printer.printSpace(); _printer.printText( name ); _printer.printText( "=\"" );
--------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]