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