Patch in XALANJ-2342 is applied to do better error
handling when setting DOM Level 3 Store parameters for
serialization.
diff --git a/src/org/apache/xml/serializer/dom3/LSSerializerImpl.java b/src/org/apache/xml/serializer/dom3/LSSerializerImpl.java
index 56c7aef..6e0fd09 100644
--- a/src/org/apache/xml/serializer/dom3/LSSerializerImpl.java
+++ b/src/org/apache/xml/serializer/dom3/LSSerializerImpl.java
@@ -726,7 +726,21 @@
                 fDOMConfigProperties.setProperty(DOMConstants.S_DOM3_PROPERTIES_NS 

                         + DOMConstants.DOM_DATATYPE_NORMALIZATION, DOMConstants.DOM3_EXPLICIT_FALSE);

             } else {

-                // Setting this to false has no effect

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

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

+                    name.equalsIgnoreCase(DOMConstants.DOM_SCHEMA_LOCATION) ||

+                    name.equalsIgnoreCase(DOMConstants.DOM_SCHEMA_TYPE)) {

+                    String msg = Utils.messages.createMessage(

+                            MsgKey.ER_TYPE_MISMATCH_ERR,

+                            new Object[] { name });

+                    throw new DOMException(DOMException.TYPE_MISMATCH_ERR, msg);

+                }

+                

+                // Parameter is not recognized

+                String msg = Utils.messages.createMessage(

+                        MsgKey.ER_FEATURE_NOT_FOUND,

+                        new Object[] { name });

+                throw new DOMException(DOMException.NOT_FOUND_ERR, msg);

             }

         } // If the parameter value is not a boolean 

         else if (name.equalsIgnoreCase(DOMConstants.DOM_ERROR_HANDLER)) {

@@ -740,13 +754,46 @@
             }

         } else if (

                 name.equalsIgnoreCase(DOMConstants.DOM_SCHEMA_LOCATION)

-                || name.equalsIgnoreCase(DOMConstants.DOM_SCHEMA_TYPE)

-                && value != null) {

-            String msg = Utils.messages.createMessage(

-                    MsgKey.ER_FEATURE_NOT_SUPPORTED,

-                    new Object[] { name });

-            throw new DOMException(DOMException.NOT_SUPPORTED_ERR, msg);

+                || name.equalsIgnoreCase(DOMConstants.DOM_SCHEMA_TYPE)) {

+            if (value != null) {

+                if (!(value instanceof String)) {

+                    String msg = Utils.messages.createMessage(

+                            MsgKey.ER_TYPE_MISMATCH_ERR,

+                            new Object[] { name });

+                    throw new DOMException(DOMException.TYPE_MISMATCH_ERR, msg);

+                }

+                String msg = Utils.messages.createMessage(

+                        MsgKey.ER_FEATURE_NOT_SUPPORTED,

+                        new Object[] { name });

+                throw new DOMException(DOMException.NOT_SUPPORTED_ERR, msg);

+            }

         } else {

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

+            if (name.equalsIgnoreCase(DOMConstants.DOM_COMMENTS) ||

+                    name.equalsIgnoreCase(DOMConstants.DOM_CDATA_SECTIONS) ||

+                    name.equalsIgnoreCase(DOMConstants.DOM_ENTITIES) ||

+                    name.equalsIgnoreCase(DOMConstants.DOM_NAMESPACES) ||

+                    name.equalsIgnoreCase(DOMConstants.DOM_NAMESPACE_DECLARATIONS) ||

+                    name.equalsIgnoreCase(DOMConstants.DOM_SPLIT_CDATA) ||

+                    name.equalsIgnoreCase(DOMConstants.DOM_WELLFORMED) ||

+                    name.equalsIgnoreCase(DOMConstants.DOM_DISCARD_DEFAULT_CONTENT) ||

+                    name.equalsIgnoreCase(DOMConstants.DOM_FORMAT_PRETTY_PRINT) ||

+                    name.equalsIgnoreCase(DOMConstants.DOM_XMLDECL) ||

+                    name.equalsIgnoreCase(DOMConstants.DOM_ELEMENT_CONTENT_WHITESPACE) ||

+                    name.equalsIgnoreCase(DOMConstants.DOM_IGNORE_UNKNOWN_CHARACTER_DENORMALIZATIONS) ||

+                    name.equalsIgnoreCase(DOMConstants.DOM_CANONICAL_FORM) ||

+                    name.equalsIgnoreCase(DOMConstants.DOM_VALIDATE_IF_SCHEMA) ||

+                    name.equalsIgnoreCase(DOMConstants.DOM_VALIDATE) ||

+                    name.equalsIgnoreCase(DOMConstants.DOM_CHECK_CHAR_NORMALIZATION) ||

+                    name.equalsIgnoreCase(DOMConstants.DOM_DATATYPE_NORMALIZATION) ||

+                    name.equalsIgnoreCase(DOMConstants.DOM_INFOSET)) {

+                String msg = Utils.messages.createMessage(

+                        MsgKey.ER_TYPE_MISMATCH_ERR,

+                        new Object[] { name });

+                throw new DOMException(DOMException.TYPE_MISMATCH_ERR, msg);

+            }

+            

+            // Parameter is not recognized

             String msg = Utils.messages.createMessage(

                     MsgKey.ER_FEATURE_NOT_FOUND,

                     new Object[] { name });