diff --git a/tests/XSerializerTest/XSerializerHandlers.cpp b/tests/XSerializerTest/XSerializerHandlers.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..cc76f3f5ac0e2246458c1197c6807adc1d7da4a9
--- /dev/null
+++ b/tests/XSerializerTest/XSerializerHandlers.cpp
@@ -0,0 +1,157 @@
+/*
+ * The Apache Software License, Version 1.1
+ *
+ * Copyright (c) 2003 The Apache Software Foundation.  All rights
+ * reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in
+ *    the documentation and/or other materials provided with the
+ *    distribution.
+ *
+ * 3. The end-user documentation included with the redistribution,
+ *    if any, must include the following acknowledgment:
+ *       "This product includes software developed by the
+ *        Apache Software Foundation (http://www.apache.org/)."
+ *    Alternately, this acknowledgment may appear in the software itself,
+ *    if and wherever such third-party acknowledgments normally appear.
+ *
+ * 4. The names "Xerces" and "Apache Software Foundation" must
+ *    not be used to endorse or promote products derived from this
+ *    software without prior written permission. For written
+ *    permission, please contact apache\@apache.org.
+ *
+ * 5. Products derived from this software may not be called "Apache",
+ *    nor may "Apache" appear in their name, without prior written
+ *    permission of the Apache Software Foundation.
+ *
+ * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
+ * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
+ * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
+ * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+ * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+ * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+ * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ * ====================================================================
+ *
+ * This software consists of voluntary contributions made by many
+ * individuals on behalf of the Apache Software Foundation, and was
+ * originally based on software copyright (c) 1999, International
+ * Business Machines, Inc., http://www.ibm.com .  For more information
+ * on the Apache Software Foundation, please see
+ * <http://www.apache.org/>.
+ */
+
+/*
+ * $Id$
+ * $Log$
+ * Revision 1.1  2003/12/16 16:57:58  peiyongz
+ * XSerializerHanders
+ *
+ *
+ */
+
+// ---------------------------------------------------------------------------
+//  Includes
+// ---------------------------------------------------------------------------
+#include "XSerializerTest.hpp"
+
+#include <xercesc/sax2/Attributes.hpp>
+#include <xercesc/sax/SAXParseException.hpp>
+#include <xercesc/sax/SAXException.hpp>
+
+// ---------------------------------------------------------------------------
+//  XSerializerHandlers: Constructors and Destructor
+// ---------------------------------------------------------------------------
+XSerializerHandlers::XSerializerHandlers() :
+
+    fElementCount(0)
+    , fAttrCount(0)
+    , fCharacterCount(0)
+    , fSpaceCount(0)
+    , fSawErrors(false)
+{
+}
+
+XSerializerHandlers::~XSerializerHandlers()
+{
+}
+
+// ---------------------------------------------------------------------------
+//  XSerializerHandlers: Implementation of the SAX DocumentHandler interface
+// ---------------------------------------------------------------------------
+void XSerializerHandlers::startElement(const XMLCh* const uri
+                                   , const XMLCh* const localname
+                                   , const XMLCh* const qname
+                                   , const Attributes& attrs)
+{
+    fElementCount++;
+    fAttrCount += attrs.getLength();
+}
+
+void XSerializerHandlers::characters(  const   XMLCh* const    chars
+								    , const unsigned int    length)
+{
+    fCharacterCount += length;
+}
+
+void XSerializerHandlers::ignorableWhitespace( const   XMLCh* const chars
+										    , const unsigned int length)
+{
+    fSpaceCount += length;
+}
+
+void XSerializerHandlers::resetDocument()
+{
+    fAttrCount = 0;
+    fCharacterCount = 0;
+    fElementCount = 0;
+    fSpaceCount = 0;
+}
+
+
+// ---------------------------------------------------------------------------
+//  XSerializerHandlers: Overrides of the SAX ErrorHandler interface
+// ---------------------------------------------------------------------------
+void XSerializerHandlers::error(const SAXParseException& e)
+{
+    fSawErrors = true;
+    XERCES_STD_QUALIFIER cerr << "\nError at file " << StrX(e.getSystemId())
+		 << ", line " << e.getLineNumber()
+		 << ", char " << e.getColumnNumber()
+         << "\n  Message: " << StrX(e.getMessage()) << XERCES_STD_QUALIFIER endl;
+}
+
+void XSerializerHandlers::fatalError(const SAXParseException& e)
+{
+    fSawErrors = true;
+    XERCES_STD_QUALIFIER cerr << "\nFatal Error at file " << StrX(e.getSystemId())
+		 << ", line " << e.getLineNumber()
+		 << ", char " << e.getColumnNumber()
+         << "\n  Message: " << StrX(e.getMessage()) << XERCES_STD_QUALIFIER endl;
+}
+
+void XSerializerHandlers::warning(const SAXParseException& e)
+{
+    XERCES_STD_QUALIFIER cerr << "\nWarning at file " << StrX(e.getSystemId())
+		 << ", line " << e.getLineNumber()
+		 << ", char " << e.getColumnNumber()
+         << "\n  Message: " << StrX(e.getMessage()) << XERCES_STD_QUALIFIER endl;
+}
+
+void XSerializerHandlers::resetErrors()
+{
+    fSawErrors = false;
+}
diff --git a/tests/XSerializerTest/XSerializerHandlers.hpp b/tests/XSerializerTest/XSerializerHandlers.hpp
new file mode 100644
index 0000000000000000000000000000000000000000..565e65fc194280129e6a524e051cd611406c001c
--- /dev/null
+++ b/tests/XSerializerTest/XSerializerHandlers.hpp
@@ -0,0 +1,156 @@
+/*
+ * The Apache Software License, Version 1.1
+ *
+ * Copyright (c) 2003 The Apache Software Foundation.  All rights
+ * reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in
+ *    the documentation and/or other materials provided with the
+ *    distribution.
+ *
+ * 3. The end-user documentation included with the redistribution,
+ *    if any, must include the following acknowledgment:
+ *       "This product includes software developed by the
+ *        Apache Software Foundation (http://www.apache.org/)."
+ *    Alternately, this acknowledgment may appear in the software itself,
+ *    if and wherever such third-party acknowledgments normally appear.
+ *
+ * 4. The names "Xerces" and "Apache Software Foundation" must
+ *    not be used to endorse or promote products derived from this
+ *    software without prior written permission. For written
+ *    permission, please contact apache\@apache.org.
+ *
+ * 5. Products derived from this software may not be called "Apache",
+ *    nor may "Apache" appear in their name, without prior written
+ *    permission of the Apache Software Foundation.
+ *
+ * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
+ * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
+ * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
+ * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+ * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+ * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+ * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ * ====================================================================
+ *
+ * This software consists of voluntary contributions made by many
+ * individuals on behalf of the Apache Software Foundation, and was
+ * originally based on software copyright (c) 1999, International
+ * Business Machines, Inc., http://www.ibm.com .  For more information
+ * on the Apache Software Foundation, please see
+ * <http://www.apache.org/>.
+ */
+
+/*
+ * $Id$
+ * $Log$
+ * Revision 1.1  2003/12/16 16:57:58  peiyongz
+ * XSerializerHanders
+ *
+ *
+ */
+
+#if !defined(XSERIALIZER_HANDLER_HPP)
+#define XSERIALIZER_HANDLER_HPP
+
+// ---------------------------------------------------------------------------
+//  Includes
+// ---------------------------------------------------------------------------
+#include <xercesc/sax2/Attributes.hpp>
+#include <xercesc/sax2/DefaultHandler.hpp>
+
+XERCES_CPP_NAMESPACE_USE
+
+class XSerializerHandlers : public DefaultHandler
+{
+public:
+    // -----------------------------------------------------------------------
+    //  Constructors and Destructor
+    // -----------------------------------------------------------------------
+    XSerializerHandlers();
+    ~XSerializerHandlers();
+
+
+    // -----------------------------------------------------------------------
+    //  Getter methods
+    // -----------------------------------------------------------------------
+    unsigned int getElementCount() const
+    {
+        return fElementCount;
+    }
+
+    unsigned int getAttrCount() const
+    {
+        return fAttrCount;
+    }
+
+    unsigned int getCharacterCount() const
+    {
+        return fCharacterCount;
+    }
+
+    bool getSawErrors() const
+    {
+        return fSawErrors;
+    }
+
+    unsigned int getSpaceCount() const
+    {
+        return fSpaceCount;
+    }
+
+
+    // -----------------------------------------------------------------------
+    //  Handlers for the SAX ContentHandler interface
+    // -----------------------------------------------------------------------
+    void startElement(const XMLCh* const uri, const XMLCh* const localname, const XMLCh* const qname, const Attributes& attrs);
+    void characters(const XMLCh* const chars, const unsigned int length);
+    void ignorableWhitespace(const XMLCh* const chars, const unsigned int length);
+    void resetDocument();
+
+
+    // -----------------------------------------------------------------------
+    //  Handlers for the SAX ErrorHandler interface
+    // -----------------------------------------------------------------------
+	void warning(const SAXParseException& exception);
+    void error(const SAXParseException& exception);
+    void fatalError(const SAXParseException& exception);
+    void resetErrors();
+
+
+private:
+    // -----------------------------------------------------------------------
+    //  Private data members
+    //
+    //  fAttrCount
+    //  fCharacterCount
+    //  fElementCount
+    //  fSpaceCount
+    //      These are just counters that are run upwards based on the input
+    //      from the document handlers.
+    //
+    //  fSawErrors
+    //      This is set by the error handlers, and is queryable later to
+    //      see if any errors occured.
+    // -----------------------------------------------------------------------
+    unsigned int    fAttrCount;
+    unsigned int    fCharacterCount;
+    unsigned int    fElementCount;
+    unsigned int    fSpaceCount;
+    bool            fSawErrors;
+};
+
+#endif