Committing the patch in XALANJ-2343 which
cleans up (and fixes some bugs) in the setting and
use of DOM 3 serialization parameters.
diff --git a/src/org/apache/xml/serializer/dom3/DOM3TreeWalker.java b/src/org/apache/xml/serializer/dom3/DOM3TreeWalker.java
index c172122..0b62423 100644
--- a/src/org/apache/xml/serializer/dom3/DOM3TreeWalker.java
+++ b/src/org/apache/xml/serializer/dom3/DOM3TreeWalker.java
@@ -2037,7 +2037,7 @@
             DOMConstants.S_XERCES_PROPERTIES_NS + DOMConstants.S_XML_VERSION,

             "");

         s_propKeys.put(DOMConstants.S_XSL_OUTPUT_ENCODING, "");

-        s_propKeys.put(OutputPropertiesFactory.S_KEY_ENTITIES, "");

+        s_propKeys.put(DOMConstants.S_XERCES_PROPERTIES_NS + DOMConstants.DOM_ENTITIES, "");

     }

 

     /**

@@ -2125,12 +2125,15 @@
                         if (encoding != null) {

                             fSerializer.setEncoding(encoding);

                         }

-                    } else if ((OutputPropertiesFactory.S_KEY_ENTITIES).equals(key)) {

-                        // Retreive the value of the XML Encoding attribute

-                        String entities = properties.getProperty(key);

-                        if (DOMConstants.S_XSL_VALUE_ENTITIES.equals(entities)) {

+                    } else if ((DOMConstants.S_XERCES_PROPERTIES_NS

+                            + DOMConstants.DOM_ENTITIES).equals(key)) {

+                        // Preserve entity references in the document

+                        if ((properties.getProperty(key).endsWith("yes"))) {

                             fSerializer.setDTDEntityExpansion(false);

                         }

+                        else {

+                            fSerializer.setDTDEntityExpansion(true);

+                        }

                     } else {

                         // We shouldn't get here, ever, now what?

                     }

diff --git a/src/org/apache/xml/serializer/dom3/LSSerializerImpl.java b/src/org/apache/xml/serializer/dom3/LSSerializerImpl.java
index 6e0fd09..acac6fc 100644
--- a/src/org/apache/xml/serializer/dom3/LSSerializerImpl.java
+++ b/src/org/apache/xml/serializer/dom3/LSSerializerImpl.java
@@ -282,8 +282,8 @@
         fDOMConfigProperties.setProperty(DOMConstants.S_DOM3_PROPERTIES_NS

                 + DOMConstants.DOM_ENTITIES, DOMConstants.DOM3_DEFAULT_TRUE);

         // preserve entities

-        fDOMConfigProperties.setProperty(

-                OutputPropertiesFactory.S_KEY_ENTITIES, DOMConstants.S_XSL_VALUE_ENTITIES);

+        fDOMConfigProperties.setProperty(DOMConstants.S_XERCES_PROPERTIES_NS

+                + DOMConstants.DOM_ENTITIES, DOMConstants.DOM3_DEFAULT_TRUE);

 

         // error-handler

         // Should we set our default ErrorHandler

@@ -310,8 +310,8 @@
             fDOMConfigProperties.setProperty(DOMConstants.S_DOM3_PROPERTIES_NS

                     + DOMConstants.DOM_ENTITIES, DOMConstants.DOM3_DEFAULT_FALSE);

             // preserve entities

-            fDOMConfigProperties.setProperty(

-                    OutputPropertiesFactory.S_KEY_ENTITIES, "");

+            fDOMConfigProperties.setProperty(DOMConstants.S_XERCES_PROPERTIES_NS

+                    + DOMConstants.DOM_ENTITIES, DOMConstants.DOM3_DEFAULT_FALSE);

             fDOMConfigProperties.setProperty(DOMConstants.S_DOM3_PROPERTIES_NS

                     + DOMConstants.DOM_CDATA_SECTIONS,

                     DOMConstants.DOM3_DEFAULT_FALSE);

@@ -550,10 +550,14 @@
                     fDOMConfigProperties.setProperty(DOMConstants.S_DOM3_PROPERTIES_NS 

                             + DOMConstants.DOM_ENTITIES, DOMConstants.DOM3_EXPLICIT_TRUE);

                     fDOMConfigProperties.setProperty(

-                            OutputPropertiesFactory.S_KEY_ENTITIES, DOMConstants.S_XSL_VALUE_ENTITIES);

+                            DOMConstants.S_XERCES_PROPERTIES_NS

+                            + DOMConstants.DOM_ENTITIES, DOMConstants.DOM3_EXPLICIT_TRUE);

                 } else {

                     fDOMConfigProperties.setProperty(DOMConstants.S_DOM3_PROPERTIES_NS 

                             + DOMConstants.DOM_ENTITIES, DOMConstants.DOM3_EXPLICIT_FALSE);

+                    fDOMConfigProperties.setProperty(

+                            DOMConstants.S_XERCES_PROPERTIES_NS

+                            + DOMConstants.DOM_ENTITIES, DOMConstants.DOM3_EXPLICIT_FALSE);

                 }

             } else if (name.equalsIgnoreCase(DOMConstants.DOM_NAMESPACES)) {

                 fFeatures = state ? fFeatures | NAMESPACES : fFeatures

@@ -690,6 +694,7 @@
                     } */

                 }

             } else if (name.equalsIgnoreCase(DOMConstants.DOM_INFOSET)) {

+                // infoset

                 if (state) {

                     fFeatures &= ~ENTITIES;

                     fFeatures &= ~CDATA;

@@ -700,31 +705,30 @@
                     fFeatures |= WELLFORMED;

                     fFeatures |= ELEM_CONTENT_WHITESPACE;

                     fFeatures |= COMMENTS;

+                    

+                    fDOMConfigProperties.setProperty(DOMConstants.S_DOM3_PROPERTIES_NS 

+                            + DOMConstants.DOM_NAMESPACES, DOMConstants.DOM3_EXPLICIT_TRUE); 

+                    fDOMConfigProperties.setProperty(DOMConstants.S_DOM3_PROPERTIES_NS 

+                            + DOMConstants.DOM_NAMESPACE_DECLARATIONS, DOMConstants.DOM3_EXPLICIT_TRUE);

+                    fDOMConfigProperties.setProperty(DOMConstants.S_DOM3_PROPERTIES_NS 

+                            + DOMConstants.DOM_COMMENTS, DOMConstants.DOM3_EXPLICIT_TRUE);

+                    fDOMConfigProperties.setProperty(DOMConstants.S_DOM3_PROPERTIES_NS 

+                            + DOMConstants.DOM_ELEMENT_CONTENT_WHITESPACE, DOMConstants.DOM3_EXPLICIT_TRUE);

+                    fDOMConfigProperties.setProperty(DOMConstants.S_DOM3_PROPERTIES_NS 

+                            + DOMConstants.DOM_WELLFORMED, DOMConstants.DOM3_EXPLICIT_TRUE);

+                    

+                    fDOMConfigProperties.setProperty(DOMConstants.S_DOM3_PROPERTIES_NS 

+                            + DOMConstants.DOM_ENTITIES, DOMConstants.DOM3_EXPLICIT_FALSE);

+                    fDOMConfigProperties.setProperty(DOMConstants.S_XERCES_PROPERTIES_NS

+                            + DOMConstants.DOM_ENTITIES, DOMConstants.DOM3_EXPLICIT_FALSE);

+                    

+                    fDOMConfigProperties.setProperty(DOMConstants.S_DOM3_PROPERTIES_NS 

+                            + DOMConstants.DOM_CDATA_SECTIONS, DOMConstants.DOM3_EXPLICIT_FALSE);

+                    fDOMConfigProperties.setProperty(DOMConstants.S_DOM3_PROPERTIES_NS 

+                            + DOMConstants.DOM_VALIDATE_IF_SCHEMA, DOMConstants.DOM3_EXPLICIT_FALSE);            

+                    fDOMConfigProperties.setProperty(DOMConstants.S_DOM3_PROPERTIES_NS 

+                            + DOMConstants.DOM_DATATYPE_NORMALIZATION, DOMConstants.DOM3_EXPLICIT_FALSE);

                 }

-                

-                // infoset

-                fDOMConfigProperties.setProperty(DOMConstants.S_DOM3_PROPERTIES_NS 

-                        + DOMConstants.DOM_NAMESPACES, DOMConstants.DOM3_EXPLICIT_TRUE); 

-                fDOMConfigProperties.setProperty(DOMConstants.S_DOM3_PROPERTIES_NS 

-                        + DOMConstants.DOM_NAMESPACE_DECLARATIONS, DOMConstants.DOM3_EXPLICIT_TRUE);

-                fDOMConfigProperties.setProperty(DOMConstants.S_DOM3_PROPERTIES_NS 

-                        + DOMConstants.DOM_COMMENTS, DOMConstants.DOM3_EXPLICIT_TRUE);

-                fDOMConfigProperties.setProperty(DOMConstants.S_DOM3_PROPERTIES_NS 

-                        + DOMConstants.DOM_ELEMENT_CONTENT_WHITESPACE, DOMConstants.DOM3_EXPLICIT_TRUE);

-                fDOMConfigProperties.setProperty(DOMConstants.S_DOM3_PROPERTIES_NS 

-                        + DOMConstants.DOM_WELLFORMED, DOMConstants.DOM3_EXPLICIT_TRUE);

-                

-                fDOMConfigProperties.setProperty(DOMConstants.S_DOM3_PROPERTIES_NS 

-                        + DOMConstants.DOM_ENTITIES, DOMConstants.DOM3_EXPLICIT_FALSE);

-                fDOMConfigProperties.setProperty(

-                        OutputPropertiesFactory.S_KEY_ENTITIES, "");

-                

-                fDOMConfigProperties.setProperty(DOMConstants.S_DOM3_PROPERTIES_NS 

-                        + DOMConstants.DOM_CDATA_SECTIONS, DOMConstants.DOM3_EXPLICIT_FALSE);

-                fDOMConfigProperties.setProperty(DOMConstants.S_DOM3_PROPERTIES_NS 

-                        + DOMConstants.DOM_VALIDATE_IF_SCHEMA, DOMConstants.DOM3_EXPLICIT_FALSE);            

-                fDOMConfigProperties.setProperty(DOMConstants.S_DOM3_PROPERTIES_NS 

-                        + DOMConstants.DOM_DATATYPE_NORMALIZATION, DOMConstants.DOM3_EXPLICIT_FALSE);

             } else {

                 // If this is a non-boolean parameter a type mismatch should be thrown.

                 if (name.equalsIgnoreCase(DOMConstants.DOM_ERROR_HANDLER) ||