You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@dubbo.apache.org by hu...@apache.org on 2018/07/15 10:23:13 UTC

[incubator-dubbo] branch 2.6.x updated: remove hessian-lite of 2.6.x and use https://github.com/dubbo/hessian-lite (#2073)

This is an automated email from the ASF dual-hosted git repository.

huxing pushed a commit to branch 2.6.x
in repository https://gitbox.apache.org/repos/asf/incubator-dubbo.git


The following commit(s) were added to refs/heads/2.6.x by this push:
     new 00bad2e  remove hessian-lite of 2.6.x and use https://github.com/dubbo/hessian-lite  (#2073)
00bad2e is described below

commit 00bad2e89b5e501eb39b1d58c334c127a7303642
Author: Xin Wang <xi...@gmail.com>
AuthorDate: Sun Jul 15 18:23:06 2018 +0800

    remove hessian-lite of 2.6.x and use https://github.com/dubbo/hessian-lite  (#2073)
    
    * remove hessian-lite
    * add hessian-lite dependency to dependencies-bom/pom.xml
---
 all/pom.xml                                        |    3 +-
 bom/pom.xml                                        |    5 +-
 dependencies-bom/pom.xml                           |    7 +-
 hessian-lite/pom.xml                               |   28 -
 .../com/caucho/hessian/HessianException.java       |   81 -
 .../caucho/hessian/io/AbstractDeserializer.java    |  150 -
 .../caucho/hessian/io/AbstractHessianInput.java    |  457 ---
 .../caucho/hessian/io/AbstractHessianOutput.java   |  515 ---
 .../caucho/hessian/io/AbstractHessianResolver.java |   65 -
 .../hessian/io/AbstractListDeserializer.java       |   67 -
 .../caucho/hessian/io/AbstractMapDeserializer.java |   74 -
 .../com/caucho/hessian/io/AbstractSerializer.java  |   64 -
 .../hessian/io/AbstractSerializerFactory.java      |   72 -
 .../com/caucho/hessian/io/ArrayDeserializer.java   |  158 -
 .../com/caucho/hessian/io/ArraySerializer.java     |   93 -
 .../com/caucho/hessian/io/BasicDeserializer.java   |  607 ----
 .../com/caucho/hessian/io/BasicSerializer.java     |  274 --
 .../com/caucho/hessian/io/BeanDeserializer.java    |  286 --
 .../com/caucho/hessian/io/BeanSerializer.java      |  310 --
 .../caucho/hessian/io/BeanSerializerFactory.java   |   80 -
 .../caucho/hessian/io/BigIntegerDeserializer.java  |   32 -
 .../com/caucho/hessian/io/CalendarHandle.java      |   90 -
 .../com/caucho/hessian/io/CalendarSerializer.java  |   76 -
 .../com/caucho/hessian/io/ClassDeserializer.java   |  158 -
 .../com/caucho/hessian/io/ClassSerializer.java     |   84 -
 .../caucho/hessian/io/CollectionDeserializer.java  |  161 -
 .../caucho/hessian/io/CollectionSerializer.java    |  105 -
 .../alibaba/com/caucho/hessian/io/Deflation.java   |  201 --
 .../com/caucho/hessian/io/Deserializer.java        |  109 -
 .../com/caucho/hessian/io/EnumDeserializer.java    |  136 -
 .../com/caucho/hessian/io/EnumSerializer.java      |  106 -
 .../com/caucho/hessian/io/EnumSetHandler.java      |   39 -
 .../com/caucho/hessian/io/EnumSetSerializer.java   |   48 -
 .../caucho/hessian/io/EnumerationDeserializer.java |   83 -
 .../caucho/hessian/io/EnumerationSerializer.java   |   83 -
 .../com/caucho/hessian/io/EnvelopeFactory.java     |   56 -
 .../caucho/hessian/io/ExtSerializerFactory.java    |  103 -
 .../com/caucho/hessian/io/Hessian2Constants.java   |  145 -
 .../com/caucho/hessian/io/Hessian2Input.java       | 3615 --------------------
 .../com/caucho/hessian/io/Hessian2Output.java      | 1537 ---------
 .../caucho/hessian/io/Hessian2StreamingInput.java  |  160 -
 .../caucho/hessian/io/Hessian2StreamingOutput.java |  101 -
 .../caucho/hessian/io/HessianDebugInputStream.java |  164 -
 .../hessian/io/HessianDebugOutputStream.java       |  159 -
 .../com/caucho/hessian/io/HessianDebugState.java   | 2204 ------------
 .../com/caucho/hessian/io/HessianEnvelope.java     |   78 -
 .../caucho/hessian/io/HessianFieldException.java   |   81 -
 .../com/caucho/hessian/io/HessianHandle.java       |   55 -
 .../com/caucho/hessian/io/HessianInput.java        | 1712 ---------
 .../com/caucho/hessian/io/HessianInputFactory.java |   95 -
 .../com/caucho/hessian/io/HessianOutput.java       |  931 -----
 .../hessian/io/HessianProtocolException.java       |  105 -
 .../com/caucho/hessian/io/HessianRemote.java       |  125 -
 .../com/caucho/hessian/io/HessianRemoteObject.java |   58 -
 .../caucho/hessian/io/HessianRemoteResolver.java   |   62 -
 .../caucho/hessian/io/HessianSerializerInput.java  |  178 -
 .../caucho/hessian/io/HessianSerializerOutput.java |  143 -
 .../caucho/hessian/io/HessianServiceException.java |   87 -
 .../com/caucho/hessian/io/IOExceptionWrapper.java  |   75 -
 .../caucho/hessian/io/InputStreamDeserializer.java |   65 -
 .../caucho/hessian/io/InputStreamSerializer.java   |   79 -
 .../com/caucho/hessian/io/IteratorSerializer.java  |   83 -
 .../com/caucho/hessian/io/JavaDeserializer.java    |  754 ----
 .../com/caucho/hessian/io/JavaSerializer.java      |  419 ---
 .../com/caucho/hessian/io/LocaleHandle.java        |   90 -
 .../com/caucho/hessian/io/LocaleSerializer.java    |   75 -
 .../com/caucho/hessian/io/MapDeserializer.java     |  184 -
 .../com/caucho/hessian/io/MapSerializer.java       |  102 -
 .../com/caucho/hessian/io/ObjectDeserializer.java  |   96 -
 .../com/caucho/hessian/io/RemoteSerializer.java    |   63 -
 .../alibaba/com/caucho/hessian/io/Serializer.java  |   59 -
 .../com/caucho/hessian/io/SerializerFactory.java   |  687 ----
 .../com/caucho/hessian/io/SqlDateDeserializer.java |  131 -
 .../com/caucho/hessian/io/SqlDateSerializer.java   |   86 -
 .../hessian/io/StackTraceElementDeserializer.java  |   64 -
 .../caucho/hessian/io/StringValueDeserializer.java |  128 -
 .../caucho/hessian/io/StringValueSerializer.java   |   85 -
 .../com/caucho/hessian/io/ThrowableSerializer.java |   70 -
 .../com/caucho/hessian/io/ValueDeserializer.java   |   93 -
 .../caucho/hessian/io/java8/DurationHandle.java    |   58 -
 .../com/caucho/hessian/io/java8/InstantHandle.java |   58 -
 .../hessian/io/java8/Java8TimeSerializer.java      |   56 -
 .../caucho/hessian/io/java8/LocalDateHandle.java   |   60 -
 .../hessian/io/java8/LocalDateTimeHandle.java      |   58 -
 .../caucho/hessian/io/java8/LocalTimeHandle.java   |   64 -
 .../caucho/hessian/io/java8/MonthDayHandle.java    |   57 -
 .../hessian/io/java8/OffsetDateTimeHandle.java     |   59 -
 .../caucho/hessian/io/java8/OffsetTimeHandle.java  |   58 -
 .../com/caucho/hessian/io/java8/PeriodHandle.java  |   61 -
 .../com/caucho/hessian/io/java8/YearHandle.java    |   55 -
 .../caucho/hessian/io/java8/YearMonthHandle.java   |   57 -
 .../com/caucho/hessian/io/java8/ZoneIdHandle.java  |   55 -
 .../caucho/hessian/io/java8/ZoneIdSerializer.java  |   42 -
 .../caucho/hessian/io/java8/ZoneOffsetHandle.java  |   54 -
 .../hessian/io/java8/ZonedDateTimeHandle.java      |   69 -
 .../caucho/hessian/security/X509Encryption.java    |  379 --
 .../com/caucho/hessian/security/X509Signature.java |  396 ---
 .../com/caucho/hessian/util/IdentityIntMap.java    |  244 --
 .../alibaba/com/caucho/hessian/util/IntMap.java    |  244 --
 .../caucho/hessian/io/Hessian1StringShortTest.java |  210 --
 .../com/caucho/hessian/io/Hessian2EnumSetTest.java |   56 -
 .../caucho/hessian/io/Hessian2StringShortTest.java |  210 --
 .../hessian/io/HessianJavaSerializeTest.java       |   67 -
 .../caucho/hessian/io/LocaleSerializerTest.java    |   45 -
 .../caucho/hessian/io/SerializerFactoryTest.java   |  102 -
 .../alibaba/com/caucho/hessian/io/TestClass.java   |   22 -
 .../caucho/hessian/io/base/SerializeTestBase.java  |   72 -
 .../com/caucho/hessian/io/beans/BaseUser.java      |   43 -
 .../com/caucho/hessian/io/beans/GrandsonUser.java  |   35 -
 .../hessian/io/beans/Hessian2StringShortType.java  |   36 -
 .../com/caucho/hessian/io/beans/PersonType.java    |   70 -
 .../com/caucho/hessian/io/beans/SubUser.java       |   35 -
 .../alibaba/com/caucho/hessian/io/beans/Type.java  |   21 -
 .../hessian/io/java8/Java8TimeSerializerTest.java  |  203 --
 pom.xml                                            |    3 -
 115 files changed, 12 insertions(+), 23751 deletions(-)

diff --git a/all/pom.xml b/all/pom.xml
index 0a90faa..afc1ed6 100644
--- a/all/pom.xml
+++ b/all/pom.xml
@@ -29,6 +29,7 @@
     <description>The all in one project of dubbo</description>
     <properties>
         <skip_maven_deploy>false</skip_maven_deploy>
+        <hessian_lite_version>3.2.3</hessian_lite_version>
     </properties>
     <dependencies>
         <dependency>
@@ -328,7 +329,7 @@
         <dependency>
             <groupId>com.alibaba</groupId>
             <artifactId>hessian-lite</artifactId>
-            <version>3.2.3</version>
+            <version>${hessian_lite_version}</version>
             <scope>compile</scope>
             <optional>true</optional>
         </dependency>
diff --git a/bom/pom.xml b/bom/pom.xml
index 4b2a39a..66c14d4 100644
--- a/bom/pom.xml
+++ b/bom/pom.xml
@@ -2,6 +2,9 @@
 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
 
     <modelVersion>4.0.0</modelVersion>
+    <properties>
+        <hessian_lite_version>3.2.3</hessian_lite_version>
+    </properties>
 
     <parent>
         <groupId>org.sonatype.oss</groupId>
@@ -281,7 +284,7 @@
             <dependency>
                 <groupId>com.alibaba</groupId>
                 <artifactId>hessian-lite</artifactId>
-                <version>3.2.3</version>
+                <version>${hessian_lite_version}</version>
             </dependency>
         </dependencies>
     </dependencyManagement>
diff --git a/dependencies-bom/pom.xml b/dependencies-bom/pom.xml
index c8526d5..e9a3f80 100644
--- a/dependencies-bom/pom.xml
+++ b/dependencies-bom/pom.xml
@@ -111,6 +111,7 @@
 
         <jaxb_version>2.2.7</jaxb_version>
         <activation_version>1.2.0</activation_version>
+        <hessian_lite_version>3.2.3</hessian_lite_version>
     </properties>
 
     <dependencyManagement>
@@ -352,7 +353,11 @@
                 <artifactId>javax.activation</artifactId>
                 <version>${activation_version}</version>
             </dependency>
-
+            <dependency>
+                <groupId>com.alibaba</groupId>
+                <artifactId>hessian-lite</artifactId>
+                <version>${hessian_lite_version}</version>
+            </dependency>
             <!-- Test lib -->
             <dependency>
                 <groupId>org.apache.curator</groupId>
diff --git a/hessian-lite/pom.xml b/hessian-lite/pom.xml
deleted file mode 100644
index 911e726..0000000
--- a/hessian-lite/pom.xml
+++ /dev/null
@@ -1,28 +0,0 @@
-<!--
-  Licensed to the Apache Software Foundation (ASF) under one or more
-  contributor license agreements.  See the NOTICE file distributed with
-  this work for additional information regarding copyright ownership.
-  The ASF licenses this file to You under the Apache License, Version 2.0
-  (the "License"); you may not use this file except in compliance with
-  the License.  You may obtain a copy of the License at
-
-      http://www.apache.org/licenses/LICENSE-2.0
-
-  Unless required by applicable law or agreed to in writing, software
-  distributed under the License is distributed on an "AS IS" BASIS,
-  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-  See the License for the specific language governing permissions and
-  limitations under the License.
-  -->
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
-    <modelVersion>4.0.0</modelVersion>
-    <parent>
-        <groupId>com.alibaba</groupId>
-        <artifactId>dubbo-parent</artifactId>
-        <version>2.6.3-SNAPSHOT</version>
-    </parent>
-    <artifactId>hessian-lite</artifactId>
-    <packaging>jar</packaging>
-    <version>3.2.3</version>
-    <name>Hessian Lite(Alibaba embed version)</name>
-</project>
diff --git a/hessian-lite/src/main/java/com/alibaba/com/caucho/hessian/HessianException.java b/hessian-lite/src/main/java/com/alibaba/com/caucho/hessian/HessianException.java
deleted file mode 100644
index f16146c..0000000
--- a/hessian-lite/src/main/java/com/alibaba/com/caucho/hessian/HessianException.java
+++ /dev/null
@@ -1,81 +0,0 @@
-/*
- * Copyright (c) 2001-2008 Caucho Technology, Inc.  All rights reserved.
- *
- * The Apache Software License, Version 1.1
- *
- * 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 acknowlegement:
- *       "This product includes software developed by the
- *        Caucho Technology (http://www.caucho.com/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "Hessian", "Resin", and "Caucho" must not be used to
- *    endorse or promote products derived from this software without prior
- *    written permission. For written permission, please contact
- *    info@caucho.com.
- *
- * 5. Products derived from this software may not be called "Resin"
- *    nor may "Resin" appear in their names without prior written
- *    permission of Caucho Technology.
- *
- * 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 CAUCHO TECHNOLOGY 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.
- *
- * @author Scott Ferguson
- */
-
-package com.alibaba.com.caucho.hessian;
-
-/**
- * Base runtime exception for Hessian exceptions.
- */
-public class HessianException extends RuntimeException {
-    /**
-     * Zero-arg constructor.
-     */
-    public HessianException() {
-    }
-
-    /**
-     * Create the exception.
-     */
-    public HessianException(String message) {
-        super(message);
-    }
-
-    /**
-     * Create the exception.
-     */
-    public HessianException(String message, Throwable rootCause) {
-        super(message, rootCause);
-    }
-
-    /**
-     * Create the exception.
-     */
-    public HessianException(Throwable rootCause) {
-        super(rootCause);
-    }
-}
diff --git a/hessian-lite/src/main/java/com/alibaba/com/caucho/hessian/io/AbstractDeserializer.java b/hessian-lite/src/main/java/com/alibaba/com/caucho/hessian/io/AbstractDeserializer.java
deleted file mode 100644
index 1946f4a..0000000
--- a/hessian-lite/src/main/java/com/alibaba/com/caucho/hessian/io/AbstractDeserializer.java
+++ /dev/null
@@ -1,150 +0,0 @@
-/*
- * Copyright (c) 2001-2004 Caucho Technology, Inc.  All rights reserved.
- *
- * The Apache Software License, Version 1.1
- *
- * 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 acknowlegement:
- *       "This product includes software developed by the
- *        Caucho Technology (http://www.caucho.com/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "Burlap", "Resin", and "Caucho" must not be used to
- *    endorse or promote products derived from this software without prior
- *    written permission. For written permission, please contact
- *    info@caucho.com.
- *
- * 5. Products derived from this software may not be called "Resin"
- *    nor may "Resin" appear in their names without prior written
- *    permission of Caucho Technology.
- *
- * 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 CAUCHO TECHNOLOGY 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.
- *
- * @author Scott Ferguson
- */
-
-package com.alibaba.com.caucho.hessian.io;
-
-import java.io.IOException;
-
-/**
- * Deserializing an object.
- */
-abstract public class AbstractDeserializer implements Deserializer {
-    @Override
-    public Class getType() {
-        return Object.class;
-    }
-
-    @Override
-    public Object readObject(AbstractHessianInput in)
-            throws IOException {
-        Object obj = in.readObject();
-
-        String className = getClass().getName();
-
-        if (obj != null)
-            throw error(className + ": unexpected object " + obj.getClass().getName() + " (" + obj + ")");
-        else
-            throw error(className + ": unexpected null value");
-    }
-
-    @Override
-    public Object readList(AbstractHessianInput in, int length)
-            throws IOException {
-        throw new UnsupportedOperationException(String.valueOf(this));
-    }
-
-    @Override
-    public Object readList(AbstractHessianInput in, int length, Class<?> expectType) throws IOException {
-        if (expectType == null) {
-            return readList(in, length);
-        }
-        throw new UnsupportedOperationException(String.valueOf(this));
-    }
-
-    @Override
-    public Object readLengthList(AbstractHessianInput in, int length)
-            throws IOException {
-        throw new UnsupportedOperationException(String.valueOf(this));
-    }
-
-    @Override
-    public Object readLengthList(AbstractHessianInput in, int length, Class<?> expectType) throws IOException {
-        if (expectType == null) {
-            return readLengthList(in, length);
-        }
-        throw new UnsupportedOperationException(String.valueOf(this));
-    }
-
-    @Override
-    public Object readMap(AbstractHessianInput in)
-            throws IOException {
-        Object obj = in.readObject();
-
-        String className = getClass().getName();
-
-        if (obj != null)
-            throw error(className + ": unexpected object " + obj.getClass().getName() + " (" + obj + ")");
-        else
-            throw error(className + ": unexpected null value");
-    }
-
-    @Override
-    public Object readMap(AbstractHessianInput in, Class<?> expectKeyType, Class<?> expectValueType) throws IOException {
-        if (expectKeyType == null && expectValueType == null) {
-            return readMap(in);
-        }
-        throw new UnsupportedOperationException(String.valueOf(this));
-    }
-
-    @Override
-    public Object readObject(AbstractHessianInput in, String[] fieldNames)
-            throws IOException {
-        throw new UnsupportedOperationException(String.valueOf(this));
-    }
-
-    protected HessianProtocolException error(String msg) {
-        return new HessianProtocolException(msg);
-    }
-
-    protected String codeName(int ch) {
-        if (ch < 0)
-            return "end of file";
-        else
-            return "0x" + Integer.toHexString(ch & 0xff);
-    }
-
-    protected SerializerFactory findSerializerFactory(AbstractHessianInput in) {
-        SerializerFactory serializerFactory = null;
-        if (in instanceof Hessian2Input) {
-            serializerFactory = ((Hessian2Input) in).findSerializerFactory();
-        } else if (in instanceof HessianInput) {
-            serializerFactory = ((HessianInput) in).getSerializerFactory();
-        }
-        return serializerFactory == null ? new SerializerFactory() : serializerFactory;
-    }
-}
diff --git a/hessian-lite/src/main/java/com/alibaba/com/caucho/hessian/io/AbstractHessianInput.java b/hessian-lite/src/main/java/com/alibaba/com/caucho/hessian/io/AbstractHessianInput.java
deleted file mode 100644
index 1d63fec..0000000
--- a/hessian-lite/src/main/java/com/alibaba/com/caucho/hessian/io/AbstractHessianInput.java
+++ /dev/null
@@ -1,457 +0,0 @@
-/*
- * Copyright (c) 2001-2004 Caucho Technology, Inc.  All rights reserved.
- *
- * The Apache Software License, Version 1.1
- *
- * 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 acknowlegement:
- *       "This product includes software developed by the
- *        Caucho Technology (http://www.caucho.com/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "Burlap", "Resin", and "Caucho" must not be used to
- *    endorse or promote products derived from this software without prior
- *    written permission. For written permission, please contact
- *    info@caucho.com.
- *
- * 5. Products derived from this software may not be called "Resin"
- *    nor may "Resin" appear in their names without prior written
- *    permission of Caucho Technology.
- *
- * 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 CAUCHO TECHNOLOGY 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.
- *
- * @author Scott Ferguson
- */
-
-package com.alibaba.com.caucho.hessian.io;
-
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.Reader;
-import java.util.List;
-
-/**
- * Abstract base class for Hessian requests.  Hessian users should only
- * need to use the methods in this class.
- * <p>
- * <pre>
- * AbstractHessianInput in = ...; // get input
- * String value;
- *
- * in.startReply();         // read reply header
- * value = in.readString(); // read string value
- * in.completeReply();      // read reply footer
- * </pre>
- */
-abstract public class AbstractHessianInput {
-    private HessianRemoteResolver resolver;
-
-    /**
-     * Initialize the Hessian stream with the underlying input stream.
-     */
-    public void init(InputStream is) {
-    }
-
-    /**
-     * Returns the call's method
-     */
-    abstract public String getMethod();
-
-    /**
-     * Sets the resolver used to lookup remote objects.
-     */
-    public HessianRemoteResolver getRemoteResolver() {
-        return resolver;
-    }
-
-    /**
-     * Sets the resolver used to lookup remote objects.
-     */
-    public void setRemoteResolver(HessianRemoteResolver resolver) {
-        this.resolver = resolver;
-    }
-
-    /**
-     * Sets the serializer factory.
-     */
-    public void setSerializerFactory(SerializerFactory ser) {
-    }
-
-    /**
-     * Reads the call
-     * <p>
-     * <pre>
-     * c major minor
-     * </pre>
-     */
-    abstract public int readCall()
-            throws IOException;
-
-    /**
-     * For backward compatibility with HessianSkeleton
-     */
-    public void skipOptionalCall()
-            throws IOException {
-    }
-
-    /**
-     * Reads a header, returning null if there are no headers.
-     * <p>
-     * <pre>
-     * H b16 b8 value
-     * </pre>
-     */
-    abstract public String readHeader()
-            throws IOException;
-
-    /**
-     * Starts reading the call
-     * <p>
-     * <p>A successful completion will have a single value:
-     * <p>
-     * <pre>
-     * m b16 b8 method
-     * </pre>
-     */
-    abstract public String readMethod()
-            throws IOException;
-
-    /**
-     * Reads the number of method arguments
-     *
-     * @return -1 for a variable length (hessian 1.0)
-     */
-    public int readMethodArgLength()
-            throws IOException {
-        return -1;
-    }
-
-    /**
-     * Starts reading the call, including the headers.
-     * <p>
-     * <p>The call expects the following protocol data
-     * <p>
-     * <pre>
-     * c major minor
-     * m b16 b8 method
-     * </pre>
-     */
-    abstract public void startCall()
-            throws IOException;
-
-    /**
-     * Completes reading the call
-     * <p>
-     * <p>The call expects the following protocol data
-     * <p>
-     * <pre>
-     * Z
-     * </pre>
-     */
-    abstract public void completeCall()
-            throws IOException;
-
-    /**
-     * Reads a reply as an object.
-     * If the reply has a fault, throws the exception.
-     */
-    abstract public Object readReply(Class expectedClass)
-            throws Throwable;
-
-    /**
-     * Starts reading the reply
-     * <p>
-     * <p>A successful completion will have a single value:
-     * <p>
-     * <pre>
-     * r
-     * v
-     * </pre>
-     */
-    abstract public void startReply()
-            throws Throwable;
-
-    /**
-     * Completes reading the call
-     * <p>
-     * <p>A successful completion will have a single value:
-     * <p>
-     * <pre>
-     * z
-     * </pre>
-     */
-    abstract public void completeReply()
-            throws IOException;
-
-    /**
-     * Reads a boolean
-     * <p>
-     * <pre>
-     * T
-     * F
-     * </pre>
-     */
-    abstract public boolean readBoolean()
-            throws IOException;
-
-    /**
-     * Reads a null
-     * <p>
-     * <pre>
-     * N
-     * </pre>
-     */
-    abstract public void readNull()
-            throws IOException;
-
-    /**
-     * Reads an integer
-     * <p>
-     * <pre>
-     * I b32 b24 b16 b8
-     * </pre>
-     */
-    abstract public int readInt()
-            throws IOException;
-
-    /**
-     * Reads a long
-     * <p>
-     * <pre>
-     * L b64 b56 b48 b40 b32 b24 b16 b8
-     * </pre>
-     */
-    abstract public long readLong()
-            throws IOException;
-
-    /**
-     * Reads a double.
-     * <p>
-     * <pre>
-     * D b64 b56 b48 b40 b32 b24 b16 b8
-     * </pre>
-     */
-    abstract public double readDouble()
-            throws IOException;
-
-    /**
-     * Reads a date.
-     * <p>
-     * <pre>
-     * T b64 b56 b48 b40 b32 b24 b16 b8
-     * </pre>
-     */
-    abstract public long readUTCDate()
-            throws IOException;
-
-    /**
-     * Reads a string encoded in UTF-8
-     * <p>
-     * <pre>
-     * s b16 b8 non-final string chunk
-     * S b16 b8 final string chunk
-     * </pre>
-     */
-    abstract public String readString()
-            throws IOException;
-
-    /**
-     * Reads an XML node encoded in UTF-8
-     * <p>
-     * <pre>
-     * x b16 b8 non-final xml chunk
-     * X b16 b8 final xml chunk
-     * </pre>
-     */
-    public org.w3c.dom.Node readNode()
-            throws IOException {
-        throw new UnsupportedOperationException(getClass().getSimpleName());
-    }
-
-    /**
-     * Starts reading a string.  All the characters must be read before
-     * calling the next method.  The actual characters will be read with
-     * the reader's read() or read(char [], int, int).
-     * <p>
-     * <pre>
-     * s b16 b8 non-final string chunk
-     * S b16 b8 final string chunk
-     * </pre>
-     */
-    abstract public Reader getReader()
-            throws IOException;
-
-    /**
-     * Starts reading a byte array using an input stream.  All the bytes
-     * must be read before calling the following method.
-     * <p>
-     * <pre>
-     * b b16 b8 non-final binary chunk
-     * B b16 b8 final binary chunk
-     * </pre>
-     */
-    abstract public InputStream readInputStream()
-            throws IOException;
-
-    /**
-     * Reads a byte array.
-     * <p>
-     * <pre>
-     * b b16 b8 non-final binary chunk
-     * B b16 b8 final binary chunk
-     * </pre>
-     */
-    abstract public byte[] readBytes()
-            throws IOException;
-
-    /**
-     * Reads an arbitrary object from the input stream.
-     *
-     * @param expectedClass the expected class if the protocol doesn't supply it.
-     */
-    abstract public Object readObject(Class expectedClass)
-            throws IOException;
-
-    /**
-     * Reads an arbitrary object from the input stream.
-     *
-     * @param expectedClass the expected class if the protocol doesn't supply it.
-     * @param expectedTypes the runtime type hints, eg: expectedClass equals Map, expectedTypes can
-     *                      equals String.class, Short.class
-     */
-    public Object readObject(Class expectedClass, Class<?>... expectedTypes)
-            throws IOException {
-        throw new UnsupportedOperationException(String.valueOf(this));
-    }
-
-    /**
-     * Reads an arbitrary object from the input stream.
-     */
-    abstract public Object readObject()
-            throws IOException;
-
-    /**
-     * Reads an arbitrary object from the input stream.
-     *
-     * @param expectedTypes the runtime type hints, eg: expectedTypes can
-     *                      equals String.class, Short.class for HashMap
-     */
-    public Object readObject(List<Class<?>> expectedTypes)
-            throws IOException {
-        throw new UnsupportedOperationException(String.valueOf(this));
-    }
-
-    /**
-     * Reads a remote object reference to the stream.  The type is the
-     * type of the remote interface.
-     * <p>
-     * <code><pre>
-     * 'r' 't' b16 b8 type url
-     * </pre></code>
-     */
-    abstract public Object readRemote()
-            throws IOException;
-
-    /**
-     * Reads a reference
-     * <p>
-     * <pre>
-     * R b32 b24 b16 b8
-     * </pre>
-     */
-    abstract public Object readRef()
-            throws IOException;
-
-    /**
-     * Adds an object reference.
-     */
-    abstract public int addRef(Object obj)
-            throws IOException;
-
-    /**
-     * Sets an object reference.
-     */
-    abstract public void setRef(int i, Object obj)
-            throws IOException;
-
-    /**
-     * Resets the references for streaming.
-     */
-    public void resetReferences() {
-    }
-
-    /**
-     * Reads the start of a list
-     */
-    abstract public int readListStart()
-            throws IOException;
-
-    /**
-     * Reads the length of a list.
-     */
-    abstract public int readLength()
-            throws IOException;
-
-    /**
-     * Reads the start of a map
-     */
-    abstract public int readMapStart()
-            throws IOException;
-
-    /**
-     * Reads an object type.
-     */
-    abstract public String readType()
-            throws IOException;
-
-    /**
-     * Returns true if the data has ended.
-     */
-    abstract public boolean isEnd()
-            throws IOException;
-
-    /**
-     * Read the end byte
-     */
-    abstract public void readEnd()
-            throws IOException;
-
-    /**
-     * Read the end byte
-     */
-    abstract public void readMapEnd()
-            throws IOException;
-
-    /**
-     * Read the end byte
-     */
-    abstract public void readListEnd()
-            throws IOException;
-
-    public void close()
-            throws IOException {
-    }
-}
diff --git a/hessian-lite/src/main/java/com/alibaba/com/caucho/hessian/io/AbstractHessianOutput.java b/hessian-lite/src/main/java/com/alibaba/com/caucho/hessian/io/AbstractHessianOutput.java
deleted file mode 100644
index 6021408..0000000
--- a/hessian-lite/src/main/java/com/alibaba/com/caucho/hessian/io/AbstractHessianOutput.java
+++ /dev/null
@@ -1,515 +0,0 @@
-/*
- * Copyright (c) 2001-2008 Caucho Technology, Inc.  All rights reserved.
- *
- * The Apache Software License, Version 1.1
- *
- * 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 acknowlegement:
- *       "This product includes software developed by the
- *        Caucho Technology (http://www.caucho.com/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "Hessian", "Resin", and "Caucho" must not be used to
- *    endorse or promote products derived from this software without prior
- *    written permission. For written permission, please contact
- *    info@caucho.com.
- *
- * 5. Products derived from this software may not be called "Resin"
- *    nor may "Resin" appear in their names without prior written
- *    permission of Caucho Technology.
- *
- * 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 CAUCHO TECHNOLOGY 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.
- *
- * @author Scott Ferguson
- */
-
-package com.alibaba.com.caucho.hessian.io;
-
-import java.io.IOException;
-import java.io.OutputStream;
-
-/**
- * Abstract output stream for Hessian requests.
- * <p>
- * <pre>
- * OutputStream os = ...; // from http connection
- * AbstractOutput out = new HessianSerializerOutput(os);
- * String value;
- *
- * out.startCall("hello");  // start hello call
- * out.writeString("arg1"); // write a string argument
- * out.completeCall();      // complete the call
- * </pre>
- */
-abstract public class AbstractHessianOutput {
-    // serializer factory
-    protected SerializerFactory _serializerFactory;
-
-    /**
-     * Gets the serializer factory.
-     */
-    public SerializerFactory getSerializerFactory() {
-        return _serializerFactory;
-    }
-
-    /**
-     * Sets the serializer factory.
-     */
-    public void setSerializerFactory(SerializerFactory factory) {
-        _serializerFactory = factory;
-    }
-
-    /**
-     * Gets the serializer factory.
-     */
-    public final SerializerFactory findSerializerFactory() {
-        SerializerFactory factory = _serializerFactory;
-
-        if (factory == null)
-            _serializerFactory = factory = new SerializerFactory();
-
-        return factory;
-    }
-
-    /**
-     * Initialize the output with a new underlying stream.
-     */
-    public void init(OutputStream os) {
-    }
-
-    /**
-     * Writes a complete method call.
-     */
-    public void call(String method, Object[] args)
-            throws IOException {
-        int length = args != null ? args.length : 0;
-
-        startCall(method, length);
-
-        for (int i = 0; i < length; i++)
-            writeObject(args[i]);
-
-        completeCall();
-    }
-
-    /**
-     * Starts the method call:
-     * <p>
-     * <code><pre>
-     * C
-     * </pre></code>
-     *
-     * @param method the method name to call.
-     */
-    abstract public void startCall()
-            throws IOException;
-
-    /**
-     * Starts the method call:
-     * <p>
-     * <code><pre>
-     * C string int
-     * </pre></code>
-     *
-     * @param method the method name to call.
-     */
-    abstract public void startCall(String method, int length)
-            throws IOException;
-
-    /**
-     * For Hessian 2.0, use the Header envelope instead
-     *
-     * @deprecated
-     */
-    public void writeHeader(String name)
-            throws IOException {
-        throw new UnsupportedOperationException(getClass().getSimpleName());
-    }
-
-    /**
-     * Writes the method tag.
-     * <p>
-     * <code><pre>
-     * string
-     * </pre></code>
-     *
-     * @param method the method name to call.
-     */
-    abstract public void writeMethod(String method)
-            throws IOException;
-
-    /**
-     * Completes the method call:
-     * <p>
-     * <code><pre>
-     * </pre></code>
-     */
-    abstract public void completeCall()
-            throws IOException;
-
-    /**
-     * Writes a boolean value to the stream.  The boolean will be written
-     * with the following syntax:
-     * <p>
-     * <code><pre>
-     * T
-     * F
-     * </pre></code>
-     *
-     * @param value the boolean value to write.
-     */
-    abstract public void writeBoolean(boolean value)
-            throws IOException;
-
-    /**
-     * Writes an integer value to the stream.  The integer will be written
-     * with the following syntax:
-     * <p>
-     * <code><pre>
-     * I b32 b24 b16 b8
-     * </pre></code>
-     *
-     * @param value the integer value to write.
-     */
-    abstract public void writeInt(int value)
-            throws IOException;
-
-    /**
-     * Writes a long value to the stream.  The long will be written
-     * with the following syntax:
-     * <p>
-     * <code><pre>
-     * L b64 b56 b48 b40 b32 b24 b16 b8
-     * </pre></code>
-     *
-     * @param value the long value to write.
-     */
-    abstract public void writeLong(long value)
-            throws IOException;
-
-    /**
-     * Writes a double value to the stream.  The double will be written
-     * with the following syntax:
-     * <p>
-     * <code><pre>
-     * D b64 b56 b48 b40 b32 b24 b16 b8
-     * </pre></code>
-     *
-     * @param value the double value to write.
-     */
-    abstract public void writeDouble(double value)
-            throws IOException;
-
-    /**
-     * Writes a date to the stream.
-     * <p>
-     * <code><pre>
-     * T  b64 b56 b48 b40 b32 b24 b16 b8
-     * </pre></code>
-     *
-     * @param time the date in milliseconds from the epoch in UTC
-     */
-    abstract public void writeUTCDate(long time)
-            throws IOException;
-
-    /**
-     * Writes a null value to the stream.
-     * The null will be written with the following syntax
-     * <p>
-     * <code><pre>
-     * N
-     * </pre></code>
-     *
-     * @param value the string value to write.
-     */
-    abstract public void writeNull()
-            throws IOException;
-
-    /**
-     * Writes a string value to the stream using UTF-8 encoding.
-     * The string will be written with the following syntax:
-     * <p>
-     * <code><pre>
-     * S b16 b8 string-value
-     * </pre></code>
-     * <p>
-     * If the value is null, it will be written as
-     * <p>
-     * <code><pre>
-     * N
-     * </pre></code>
-     *
-     * @param value the string value to write.
-     */
-    abstract public void writeString(String value)
-            throws IOException;
-
-    /**
-     * Writes a string value to the stream using UTF-8 encoding.
-     * The string will be written with the following syntax:
-     * <p>
-     * <code><pre>
-     * S b16 b8 string-value
-     * </pre></code>
-     * <p>
-     * If the value is null, it will be written as
-     * <p>
-     * <code><pre>
-     * N
-     * </pre></code>
-     *
-     * @param value the string value to write.
-     */
-    abstract public void writeString(char[] buffer, int offset, int length)
-            throws IOException;
-
-    /**
-     * Writes a byte array to the stream.
-     * The array will be written with the following syntax:
-     * <p>
-     * <code><pre>
-     * B b16 b18 bytes
-     * </pre></code>
-     * <p>
-     * If the value is null, it will be written as
-     * <p>
-     * <code><pre>
-     * N
-     * </pre></code>
-     *
-     * @param value the string value to write.
-     */
-    abstract public void writeBytes(byte[] buffer)
-            throws IOException;
-
-    /**
-     * Writes a byte array to the stream.
-     * The array will be written with the following syntax:
-     * <p>
-     * <code><pre>
-     * B b16 b18 bytes
-     * </pre></code>
-     * <p>
-     * If the value is null, it will be written as
-     * <p>
-     * <code><pre>
-     * N
-     * </pre></code>
-     *
-     * @param value the string value to write.
-     */
-    abstract public void writeBytes(byte[] buffer, int offset, int length)
-            throws IOException;
-
-    /**
-     * Writes a byte buffer to the stream.
-     */
-    abstract public void writeByteBufferStart()
-            throws IOException;
-
-    /**
-     * Writes a byte buffer to the stream.
-     * <p>
-     * <code><pre>
-     * b b16 b18 bytes
-     * </pre></code>
-     *
-     * @param value the string value to write.
-     */
-    abstract public void writeByteBufferPart(byte[] buffer,
-                                             int offset,
-                                             int length)
-            throws IOException;
-
-    /**
-     * Writes the last chunk of a byte buffer to the stream.
-     * <p>
-     * <code><pre>
-     * b b16 b18 bytes
-     * </pre></code>
-     *
-     * @param value the string value to write.
-     */
-    abstract public void writeByteBufferEnd(byte[] buffer,
-                                            int offset,
-                                            int length)
-            throws IOException;
-
-    /**
-     * Writes a reference.
-     * <p>
-     * <code><pre>
-     * Q int
-     * </pre></code>
-     *
-     * @param value the integer value to write.
-     */
-    abstract protected void writeRef(int value)
-            throws IOException;
-
-    /**
-     * Removes a reference.
-     */
-    abstract public boolean removeRef(Object obj)
-            throws IOException;
-
-    /**
-     * Replaces a reference from one object to another.
-     */
-    abstract public boolean replaceRef(Object oldRef, Object newRef)
-            throws IOException;
-
-    /**
-     * Adds an object to the reference list.  If the object already exists,
-     * writes the reference, otherwise, the caller is responsible for
-     * the serialization.
-     * <p>
-     * <code><pre>
-     * R b32 b24 b16 b8
-     * </pre></code>
-     *
-     * @param object the object to add as a reference.
-     * @return true if the object has already been written.
-     */
-    abstract public boolean addRef(Object object)
-            throws IOException;
-
-    /**
-     * Resets the references for streaming.
-     */
-    public void resetReferences() {
-    }
-
-    /**
-     * Writes a generic object to the output stream.
-     */
-    abstract public void writeObject(Object object)
-            throws IOException;
-
-    /**
-     * Writes the list header to the stream.  List writers will call
-     * <code>writeListBegin</code> followed by the list contents and then
-     * call <code>writeListEnd</code>.
-     * <p>
-     * <code><pre>
-     * V
-     *   x13 java.util.ArrayList   # type
-     *   x93                       # length=3
-     *   x91                       # 1
-     *   x92                       # 2
-     *   x93                       # 3
-     * &lt;/list>
-     * </pre></code>
-     */
-    abstract public boolean writeListBegin(int length, String type)
-            throws IOException;
-
-    /**
-     * Writes the tail of the list to the stream.
-     */
-    abstract public void writeListEnd()
-            throws IOException;
-
-    /**
-     * Writes the map header to the stream.  Map writers will call
-     * <code>writeMapBegin</code> followed by the map contents and then
-     * call <code>writeMapEnd</code>.
-     * <p>
-     * <code><pre>
-     * M type (<key> <value>)* Z
-     * </pre></code>
-     */
-    abstract public void writeMapBegin(String type)
-            throws IOException;
-
-    /**
-     * Writes the tail of the map to the stream.
-     */
-    abstract public void writeMapEnd()
-            throws IOException;
-
-    /**
-     * Writes the object header to the stream (for Hessian 2.0), or a
-     * Map for Hessian 1.0.  Object writers will call
-     * <code>writeObjectBegin</code> followed by the map contents and then
-     * call <code>writeObjectEnd</code>.
-     * <p>
-     * <code><pre>
-     * C type int <key>*
-     * C int <value>*
-     * </pre></code>
-     *
-     * @return true if the object has already been defined.
-     */
-    public int writeObjectBegin(String type)
-            throws IOException {
-        writeMapBegin(type);
-
-        return -2;
-    }
-
-    /**
-     * Writes the end of the class.
-     */
-    public void writeClassFieldLength(int len)
-            throws IOException {
-    }
-
-    /**
-     * Writes the tail of the object to the stream.
-     */
-    public void writeObjectEnd()
-            throws IOException {
-    }
-
-    public void writeReply(Object o)
-            throws IOException {
-        startReply();
-        writeObject(o);
-        completeReply();
-    }
-
-
-    public void startReply()
-            throws IOException {
-    }
-
-    public void completeReply()
-            throws IOException {
-    }
-
-    public void writeFault(String code, String message, Object detail)
-            throws IOException {
-    }
-
-    public void flush()
-            throws IOException {
-    }
-
-    public void close()
-            throws IOException {
-    }
-}
diff --git a/hessian-lite/src/main/java/com/alibaba/com/caucho/hessian/io/AbstractHessianResolver.java b/hessian-lite/src/main/java/com/alibaba/com/caucho/hessian/io/AbstractHessianResolver.java
deleted file mode 100644
index 72a9822..0000000
--- a/hessian-lite/src/main/java/com/alibaba/com/caucho/hessian/io/AbstractHessianResolver.java
+++ /dev/null
@@ -1,65 +0,0 @@
-/*
- * Copyright (c) 2001-2004 Caucho Technology, Inc.  All rights reserved.
- *
- * The Apache Software License, Version 1.1
- *
- * 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 acknowlegement:
- *       "This product includes software developed by the
- *        Caucho Technology (http://www.caucho.com/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "Hessian", "Resin", and "Caucho" must not be used to
- *    endorse or promote products derived from this software without prior
- *    written permission. For written permission, please contact
- *    info@caucho.com.
- *
- * 5. Products derived from this software may not be called "Resin"
- *    nor may "Resin" appear in their names without prior written
- *    permission of Caucho Technology.
- *
- * 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 CAUCHO TECHNOLOGY 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.
- *
- * @author Scott Ferguson
- */
-
-package com.alibaba.com.caucho.hessian.io;
-
-import java.io.IOException;
-
-/**
- * Looks up remote objects.  The default just returns a HessianRemote object.
- */
-public class AbstractHessianResolver implements HessianRemoteResolver {
-    /**
-     * Looks up a proxy object.
-     */
-    @Override
-    public Object lookup(String type, String url)
-            throws IOException {
-        return new HessianRemote(type, url);
-    }
-}
diff --git a/hessian-lite/src/main/java/com/alibaba/com/caucho/hessian/io/AbstractListDeserializer.java b/hessian-lite/src/main/java/com/alibaba/com/caucho/hessian/io/AbstractListDeserializer.java
deleted file mode 100644
index f578d29..0000000
--- a/hessian-lite/src/main/java/com/alibaba/com/caucho/hessian/io/AbstractListDeserializer.java
+++ /dev/null
@@ -1,67 +0,0 @@
-/*
- * Copyright (c) 2001-2004 Caucho Technology, Inc.  All rights reserved.
- *
- * The Apache Software License, Version 1.1
- *
- * 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 acknowlegement:
- *       "This product includes software developed by the
- *        Caucho Technology (http://www.caucho.com/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "Hessian", "Resin", and "Caucho" must not be used to
- *    endorse or promote products derived from this software without prior
- *    written permission. For written permission, please contact
- *    info@caucho.com.
- *
- * 5. Products derived from this software may not be called "Resin"
- *    nor may "Resin" appear in their names without prior written
- *    permission of Caucho Technology.
- *
- * 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 CAUCHO TECHNOLOGY 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.
- *
- * @author Scott Ferguson
- */
-
-package com.alibaba.com.caucho.hessian.io;
-
-import java.io.IOException;
-
-/**
- * Deserializing a JDK 1.2 Collection.
- */
-public class AbstractListDeserializer extends AbstractDeserializer {
-    @Override
-    public Object readObject(AbstractHessianInput in)
-            throws IOException {
-        Object obj = in.readObject();
-
-        if (obj != null)
-            throw error("expected list at " + obj.getClass().getName() + " (" + obj + ")");
-        else
-            throw error("expected list at null");
-    }
-}
diff --git a/hessian-lite/src/main/java/com/alibaba/com/caucho/hessian/io/AbstractMapDeserializer.java b/hessian-lite/src/main/java/com/alibaba/com/caucho/hessian/io/AbstractMapDeserializer.java
deleted file mode 100644
index d8543d2..0000000
--- a/hessian-lite/src/main/java/com/alibaba/com/caucho/hessian/io/AbstractMapDeserializer.java
+++ /dev/null
@@ -1,74 +0,0 @@
-/*
- * Copyright (c) 2001-2004 Caucho Technology, Inc.  All rights reserved.
- *
- * The Apache Software License, Version 1.1
- *
- * 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 acknowlegement:
- *       "This product includes software developed by the
- *        Caucho Technology (http://www.caucho.com/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "Burlap", "Resin", and "Caucho" must not be used to
- *    endorse or promote products derived from this software without prior
- *    written permission. For written permission, please contact
- *    info@caucho.com.
- *
- * 5. Products derived from this software may not be called "Resin"
- *    nor may "Resin" appear in their names without prior written
- *    permission of Caucho Technology.
- *
- * 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 CAUCHO TECHNOLOGY 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.
- *
- * @author Scott Ferguson
- */
-
-package com.alibaba.com.caucho.hessian.io;
-
-import java.io.IOException;
-import java.util.HashMap;
-
-/**
- * Serializing an object for known object types.
- */
-public class AbstractMapDeserializer extends AbstractDeserializer {
-
-    @Override
-    public Class getType() {
-        return HashMap.class;
-    }
-
-    @Override
-    public Object readObject(AbstractHessianInput in)
-            throws IOException {
-        Object obj = in.readObject();
-
-        if (obj != null)
-            throw error("expected map/object at " + obj.getClass().getName() + " (" + obj + ")");
-        else
-            throw error("expected map/object at null");
-    }
-}
diff --git a/hessian-lite/src/main/java/com/alibaba/com/caucho/hessian/io/AbstractSerializer.java b/hessian-lite/src/main/java/com/alibaba/com/caucho/hessian/io/AbstractSerializer.java
deleted file mode 100644
index 088cf25..0000000
--- a/hessian-lite/src/main/java/com/alibaba/com/caucho/hessian/io/AbstractSerializer.java
+++ /dev/null
@@ -1,64 +0,0 @@
-/*
- * Copyright (c) 2001-2004 Caucho Technology, Inc.  All rights reserved.
- *
- * The Apache Software License, Version 1.1
- *
- * 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 acknowlegement:
- *       "This product includes software developed by the
- *        Caucho Technology (http://www.caucho.com/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "Burlap", "Resin", and "Caucho" must not be used to
- *    endorse or promote products derived from this software without prior
- *    written permission. For written permission, please contact
- *    info@caucho.com.
- *
- * 5. Products derived from this software may not be called "Resin"
- *    nor may "Resin" appear in their names without prior written
- *    permission of Caucho Technology.
- *
- * 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 CAUCHO TECHNOLOGY 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.
- *
- * @author Scott Ferguson
- */
-
-package com.alibaba.com.caucho.hessian.io;
-
-import java.io.IOException;
-import java.util.logging.Logger;
-
-/**
- * Serializing an object.
- */
-abstract public class AbstractSerializer implements Serializer {
-    protected static final Logger log
-            = Logger.getLogger(AbstractSerializer.class.getName());
-
-    @Override
-    abstract public void writeObject(Object obj, AbstractHessianOutput out)
-            throws IOException;
-}
diff --git a/hessian-lite/src/main/java/com/alibaba/com/caucho/hessian/io/AbstractSerializerFactory.java b/hessian-lite/src/main/java/com/alibaba/com/caucho/hessian/io/AbstractSerializerFactory.java
deleted file mode 100644
index 6621543..0000000
--- a/hessian-lite/src/main/java/com/alibaba/com/caucho/hessian/io/AbstractSerializerFactory.java
+++ /dev/null
@@ -1,72 +0,0 @@
-/*
- * Copyright (c) 2001-2004 Caucho Technology, Inc.  All rights reserved.
- *
- * The Apache Software License, Version 1.1
- *
- * 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 acknowlegement:
- *       "This product includes software developed by the
- *        Caucho Technology (http://www.caucho.com/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "Burlap", "Resin", and "Caucho" must not be used to
- *    endorse or promote products derived from this software without prior
- *    written permission. For written permission, please contact
- *    info@caucho.com.
- *
- * 5. Products derived from this software may not be called "Resin"
- *    nor may "Resin" appear in their names without prior written
- *    permission of Caucho Technology.
- *
- * 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 CAUCHO TECHNOLOGY 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.
- *
- * @author Scott Ferguson
- */
-
-package com.alibaba.com.caucho.hessian.io;
-
-/**
- * Factory for returning serialization methods.
- */
-abstract public class AbstractSerializerFactory {
-    /**
-     * Returns the serializer for a class.
-     *
-     * @param cl the class of the object that needs to be serialized.
-     * @return a serializer object for the serialization.
-     */
-    abstract public Serializer getSerializer(Class cl)
-            throws HessianProtocolException;
-
-    /**
-     * Returns the deserializer for a class.
-     *
-     * @param cl the class of the object that needs to be deserialized.
-     * @return a deserializer object for the serialization.
-     */
-    abstract public Deserializer getDeserializer(Class cl)
-            throws HessianProtocolException;
-}
diff --git a/hessian-lite/src/main/java/com/alibaba/com/caucho/hessian/io/ArrayDeserializer.java b/hessian-lite/src/main/java/com/alibaba/com/caucho/hessian/io/ArrayDeserializer.java
deleted file mode 100644
index e575411..0000000
--- a/hessian-lite/src/main/java/com/alibaba/com/caucho/hessian/io/ArrayDeserializer.java
+++ /dev/null
@@ -1,158 +0,0 @@
-/*
- * Copyright (c) 2001-2004 Caucho Technology, Inc.  All rights reserved.
- *
- * The Apache Software License, Version 1.1
- *
- * 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 acknowlegement:
- *       "This product includes software developed by the
- *        Caucho Technology (http://www.caucho.com/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "Hessian", "Resin", and "Caucho" must not be used to
- *    endorse or promote products derived from this software without prior
- *    written permission. For written permission, please contact
- *    info@caucho.com.
- *
- * 5. Products derived from this software may not be called "Resin"
- *    nor may "Resin" appear in their names without prior written
- *    permission of Caucho Technology.
- *
- * 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 CAUCHO TECHNOLOGY 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.
- *
- * @author Scott Ferguson
- */
-
-package com.alibaba.com.caucho.hessian.io;
-
-import java.io.IOException;
-import java.lang.reflect.Array;
-import java.util.ArrayList;
-
-/**
- * Deserializing a Java array
- */
-public class ArrayDeserializer extends AbstractListDeserializer {
-    private Class _componentType;
-    private Class _type;
-
-    public ArrayDeserializer(Class componentType) {
-        _componentType = componentType;
-
-        if (_componentType != null) {
-            try {
-                _type = Array.newInstance(_componentType, 0).getClass();
-            } catch (Exception e) {
-            }
-        }
-
-        if (_type == null)
-            _type = Object[].class;
-    }
-
-    @Override
-    public Class getType() {
-        return _type;
-    }
-
-    /**
-     * Reads the array.
-     */
-    @Override
-    public Object readList(AbstractHessianInput in, int length)
-            throws IOException {
-        if (length >= 0) {
-            Object[] data = createArray(length);
-
-            in.addRef(data);
-
-            if (_componentType != null) {
-                for (int i = 0; i < data.length; i++)
-                    data[i] = in.readObject(_componentType);
-            } else {
-                for (int i = 0; i < data.length; i++)
-                    data[i] = in.readObject();
-            }
-
-            in.readListEnd();
-
-            return data;
-        } else {
-            ArrayList list = new ArrayList();
-
-            in.addRef(list);
-
-            if (_componentType != null) {
-                while (!in.isEnd())
-                    list.add(in.readObject(_componentType));
-            } else {
-                while (!in.isEnd())
-                    list.add(in.readObject());
-            }
-
-            in.readListEnd();
-
-            Object[] data = createArray(list.size());
-            for (int i = 0; i < data.length; i++)
-                data[i] = list.get(i);
-
-            return data;
-        }
-    }
-
-    /**
-     * Reads the array.
-     */
-    @Override
-    public Object readLengthList(AbstractHessianInput in, int length)
-            throws IOException {
-        Object[] data = createArray(length);
-
-        in.addRef(data);
-
-        if (_componentType != null) {
-            for (int i = 0; i < data.length; i++)
-                data[i] = in.readObject(_componentType);
-        } else {
-            for (int i = 0; i < data.length; i++)
-                data[i] = in.readObject();
-        }
-
-        return data;
-    }
-
-    protected Object[] createArray(int length) {
-        if (_componentType != null)
-            return (Object[]) Array.newInstance(_componentType, length);
-        else
-            return new Object[length];
-    }
-
-    @Override
-    public String toString() {
-        return "ArrayDeserializer[" + _componentType + "]";
-    }
-}
diff --git a/hessian-lite/src/main/java/com/alibaba/com/caucho/hessian/io/ArraySerializer.java b/hessian-lite/src/main/java/com/alibaba/com/caucho/hessian/io/ArraySerializer.java
deleted file mode 100644
index d6cfcc5..0000000
--- a/hessian-lite/src/main/java/com/alibaba/com/caucho/hessian/io/ArraySerializer.java
+++ /dev/null
@@ -1,93 +0,0 @@
-/*
- * Copyright (c) 2001-2004 Caucho Technology, Inc.  All rights reserved.
- *
- * The Apache Software License, Version 1.1
- *
- * 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 acknowlegement:
- *       "This product includes software developed by the
- *        Caucho Technology (http://www.caucho.com/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "Hessian", "Resin", and "Caucho" must not be used to
- *    endorse or promote products derived from this software without prior
- *    written permission. For written permission, please contact
- *    info@caucho.com.
- *
- * 5. Products derived from this software may not be called "Resin"
- *    nor may "Resin" appear in their names without prior written
- *    permission of Caucho Technology.
- *
- * 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 CAUCHO TECHNOLOGY 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.
- *
- * @author Scott Ferguson
- */
-
-package com.alibaba.com.caucho.hessian.io;
-
-import java.io.IOException;
-
-/**
- * Serializing a Java array.
- */
-public class ArraySerializer extends AbstractSerializer {
-    @Override
-    public void writeObject(Object obj, AbstractHessianOutput out)
-            throws IOException {
-        if (out.addRef(obj))
-            return;
-
-        Object[] array = (Object[]) obj;
-
-        boolean hasEnd = out.writeListBegin(array.length,
-                getArrayType(obj.getClass()));
-
-        for (int i = 0; i < array.length; i++)
-            out.writeObject(array[i]);
-
-        if (hasEnd)
-            out.writeListEnd();
-    }
-
-    /**
-     * Returns the &lt;type> name for a &lt;list>.
-     */
-    private String getArrayType(Class cl) {
-        if (cl.isArray())
-            return '[' + getArrayType(cl.getComponentType());
-
-        String name = cl.getName();
-
-        if (name.equals("java.lang.String"))
-            return "string";
-        else if (name.equals("java.lang.Object"))
-            return "object";
-        else if (name.equals("java.util.Date"))
-            return "date";
-        else
-            return name;
-    }
-}
diff --git a/hessian-lite/src/main/java/com/alibaba/com/caucho/hessian/io/BasicDeserializer.java b/hessian-lite/src/main/java/com/alibaba/com/caucho/hessian/io/BasicDeserializer.java
deleted file mode 100644
index 20c593f..0000000
--- a/hessian-lite/src/main/java/com/alibaba/com/caucho/hessian/io/BasicDeserializer.java
+++ /dev/null
@@ -1,607 +0,0 @@
-/*
- * Copyright (c) 2001-2008 Caucho Technology, Inc.  All rights reserved.
- *
- * The Apache Software License, Version 1.1
- *
- * 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 acknowlegement:
- *       "This product includes software developed by the
- *        Caucho Technology (http://www.caucho.com/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "Burlap", "Resin", and "Caucho" must not be used to
- *    endorse or promote products derived from this software without prior
- *    written permission. For written permission, please contact
- *    info@caucho.com.
- *
- * 5. Products derived from this software may not be called "Resin"
- *    nor may "Resin" appear in their names without prior written
- *    permission of Caucho Technology.
- *
- * 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 CAUCHO TECHNOLOGY 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.
- *
- * @author Scott Ferguson
- */
-
-package com.alibaba.com.caucho.hessian.io;
-
-import java.io.IOException;
-import java.util.ArrayList;
-import java.util.Date;
-
-/**
- * Serializing an object for known object types.
- */
-public class BasicDeserializer extends AbstractDeserializer {
-    public static final int NULL = BasicSerializer.NULL;
-    public static final int BOOLEAN = BasicSerializer.BOOLEAN;
-    public static final int BYTE = BasicSerializer.BYTE;
-    public static final int SHORT = BasicSerializer.SHORT;
-    public static final int INTEGER = BasicSerializer.INTEGER;
-    public static final int LONG = BasicSerializer.LONG;
-    public static final int FLOAT = BasicSerializer.FLOAT;
-    public static final int DOUBLE = BasicSerializer.DOUBLE;
-    public static final int CHARACTER = BasicSerializer.CHARACTER;
-    public static final int CHARACTER_OBJECT = BasicSerializer.CHARACTER_OBJECT;
-    public static final int STRING = BasicSerializer.STRING;
-    public static final int DATE = BasicSerializer.DATE;
-    public static final int NUMBER = BasicSerializer.NUMBER;
-    public static final int OBJECT = BasicSerializer.OBJECT;
-
-    public static final int BOOLEAN_ARRAY = BasicSerializer.BOOLEAN_ARRAY;
-    public static final int BYTE_ARRAY = BasicSerializer.BYTE_ARRAY;
-    public static final int SHORT_ARRAY = BasicSerializer.SHORT_ARRAY;
-    public static final int INTEGER_ARRAY = BasicSerializer.INTEGER_ARRAY;
-    public static final int LONG_ARRAY = BasicSerializer.LONG_ARRAY;
-    public static final int FLOAT_ARRAY = BasicSerializer.FLOAT_ARRAY;
-    public static final int DOUBLE_ARRAY = BasicSerializer.DOUBLE_ARRAY;
-    public static final int CHARACTER_ARRAY = BasicSerializer.CHARACTER_ARRAY;
-    public static final int STRING_ARRAY = BasicSerializer.STRING_ARRAY;
-    public static final int OBJECT_ARRAY = BasicSerializer.OBJECT_ARRAY;
-
-    private int _code;
-
-    public BasicDeserializer(int code) {
-        _code = code;
-    }
-
-    @Override
-    public Class getType() {
-        switch (_code) {
-            case NULL:
-                return void.class;
-            case BOOLEAN:
-                return Boolean.class;
-            case BYTE:
-                return Byte.class;
-            case SHORT:
-                return Short.class;
-            case INTEGER:
-                return Integer.class;
-            case LONG:
-                return Long.class;
-            case FLOAT:
-                return Float.class;
-            case DOUBLE:
-                return Double.class;
-            case CHARACTER:
-                return Character.class;
-            case CHARACTER_OBJECT:
-                return Character.class;
-            case STRING:
-                return String.class;
-            case DATE:
-                return Date.class;
-            case NUMBER:
-                return Number.class;
-            case OBJECT:
-                return Object.class;
-
-            case BOOLEAN_ARRAY:
-                return boolean[].class;
-            case BYTE_ARRAY:
-                return byte[].class;
-            case SHORT_ARRAY:
-                return short[].class;
-            case INTEGER_ARRAY:
-                return int[].class;
-            case LONG_ARRAY:
-                return long[].class;
-            case FLOAT_ARRAY:
-                return float[].class;
-            case DOUBLE_ARRAY:
-                return double[].class;
-            case CHARACTER_ARRAY:
-                return char[].class;
-            case STRING_ARRAY:
-                return String[].class;
-            case OBJECT_ARRAY:
-                return Object[].class;
-            default:
-                throw new UnsupportedOperationException();
-        }
-    }
-
-    @Override
-    public Object readObject(AbstractHessianInput in)
-            throws IOException {
-        switch (_code) {
-            case NULL:
-                // hessian/3490
-                in.readObject();
-
-                return null;
-
-            case BOOLEAN:
-                return Boolean.valueOf(in.readBoolean());
-
-            case BYTE:
-                return Byte.valueOf((byte) in.readInt());
-
-            case SHORT:
-                return Short.valueOf((short) in.readInt());
-
-            case INTEGER:
-                return Integer.valueOf(in.readInt());
-
-            case LONG:
-                return Long.valueOf(in.readLong());
-
-            case FLOAT:
-                return Float.valueOf((float) in.readDouble());
-
-            case DOUBLE:
-                return Double.valueOf(in.readDouble());
-
-            case STRING:
-                return in.readString();
-
-            case OBJECT:
-                return in.readObject();
-
-            case CHARACTER: {
-                String s = in.readString();
-                if (s == null || s.equals(""))
-                    return Character.valueOf((char) 0);
-                else
-                    return Character.valueOf(s.charAt(0));
-            }
-
-            case CHARACTER_OBJECT: {
-                String s = in.readString();
-                if (s == null || s.equals(""))
-                    return null;
-                else
-                    return Character.valueOf(s.charAt(0));
-            }
-
-            case DATE:
-                return new Date(in.readUTCDate());
-
-            case NUMBER:
-                return in.readObject();
-
-            case BYTE_ARRAY:
-                return in.readBytes();
-
-            case CHARACTER_ARRAY: {
-                String s = in.readString();
-
-                if (s == null)
-                    return null;
-                else {
-                    int len = s.length();
-                    char[] chars = new char[len];
-                    s.getChars(0, len, chars, 0);
-                    return chars;
-                }
-            }
-
-            case BOOLEAN_ARRAY:
-            case SHORT_ARRAY:
-            case INTEGER_ARRAY:
-            case LONG_ARRAY:
-            case FLOAT_ARRAY:
-            case DOUBLE_ARRAY:
-            case STRING_ARRAY: {
-                int code = in.readListStart();
-
-                switch (code) {
-                    case 'N':
-                        return null;
-
-                    case 0x10:
-                    case 0x11:
-                    case 0x12:
-                    case 0x13:
-                    case 0x14:
-                    case 0x15:
-                    case 0x16:
-                    case 0x17:
-                    case 0x18:
-                    case 0x19:
-                    case 0x1a:
-                    case 0x1b:
-                    case 0x1c:
-                    case 0x1d:
-                    case 0x1e:
-                    case 0x1f:
-                        int length = code - 0x10;
-                        in.readInt();
-
-                        return readLengthList(in, length);
-
-                    default:
-                        String type = in.readType();
-                        length = in.readLength();
-
-                        return readList(in, length);
-                }
-            }
-
-            default:
-                throw new UnsupportedOperationException();
-        }
-    }
-
-    @Override
-    public Object readList(AbstractHessianInput in, int length)
-            throws IOException {
-        switch (_code) {
-            case BOOLEAN_ARRAY: {
-                if (length >= 0) {
-                    boolean[] data = new boolean[length];
-
-                    in.addRef(data);
-
-                    for (int i = 0; i < data.length; i++)
-                        data[i] = in.readBoolean();
-
-                    in.readEnd();
-
-                    return data;
-                } else {
-                    ArrayList list = new ArrayList();
-
-                    while (!in.isEnd())
-                        list.add(Boolean.valueOf(in.readBoolean()));
-
-                    in.readEnd();
-
-                    boolean[] data = new boolean[list.size()];
-
-                    in.addRef(data);
-
-                    for (int i = 0; i < data.length; i++)
-                        data[i] = ((Boolean) list.get(i)).booleanValue();
-
-                    return data;
-                }
-            }
-
-            case SHORT_ARRAY: {
-                if (length >= 0) {
-                    short[] data = new short[length];
-
-                    in.addRef(data);
-
-                    for (int i = 0; i < data.length; i++)
-                        data[i] = (short) in.readInt();
-
-                    in.readEnd();
-
-                    return data;
-                } else {
-                    ArrayList list = new ArrayList();
-
-                    while (!in.isEnd())
-                        list.add(Short.valueOf((short) in.readInt()));
-
-                    in.readEnd();
-
-                    short[] data = new short[list.size()];
-                    for (int i = 0; i < data.length; i++)
-                        data[i] = ((Short) list.get(i)).shortValue();
-
-                    in.addRef(data);
-
-                    return data;
-                }
-            }
-
-            case INTEGER_ARRAY: {
-                if (length >= 0) {
-                    int[] data = new int[length];
-
-                    in.addRef(data);
-
-                    for (int i = 0; i < data.length; i++)
-                        data[i] = in.readInt();
-
-                    in.readEnd();
-
-                    return data;
-                } else {
-                    ArrayList list = new ArrayList();
-
-                    while (!in.isEnd())
-                        list.add(Integer.valueOf(in.readInt()));
-
-
-                    in.readEnd();
-
-                    int[] data = new int[list.size()];
-                    for (int i = 0; i < data.length; i++)
-                        data[i] = ((Integer) list.get(i)).intValue();
-
-                    in.addRef(data);
-
-                    return data;
-                }
-            }
-
-            case LONG_ARRAY: {
-                if (length >= 0) {
-                    long[] data = new long[length];
-
-                    in.addRef(data);
-
-                    for (int i = 0; i < data.length; i++)
-                        data[i] = in.readLong();
-
-                    in.readEnd();
-
-                    return data;
-                } else {
-                    ArrayList list = new ArrayList();
-
-                    while (!in.isEnd())
-                        list.add(Long.valueOf(in.readLong()));
-
-                    in.readEnd();
-
-                    long[] data = new long[list.size()];
-                    for (int i = 0; i < data.length; i++)
-                        data[i] = ((Long) list.get(i)).longValue();
-
-                    in.addRef(data);
-
-                    return data;
-                }
-            }
-
-            case FLOAT_ARRAY: {
-                if (length >= 0) {
-                    float[] data = new float[length];
-                    in.addRef(data);
-
-                    for (int i = 0; i < data.length; i++)
-                        data[i] = (float) in.readDouble();
-
-                    in.readEnd();
-
-                    return data;
-                } else {
-                    ArrayList list = new ArrayList();
-
-                    while (!in.isEnd())
-                        list.add(new Float(in.readDouble()));
-
-                    in.readEnd();
-
-                    float[] data = new float[list.size()];
-                    for (int i = 0; i < data.length; i++)
-                        data[i] = ((Float) list.get(i)).floatValue();
-
-                    in.addRef(data);
-
-                    return data;
-                }
-            }
-
-            case DOUBLE_ARRAY: {
-                if (length >= 0) {
-                    double[] data = new double[length];
-                    in.addRef(data);
-
-                    for (int i = 0; i < data.length; i++)
-                        data[i] = in.readDouble();
-
-                    in.readEnd();
-
-                    return data;
-                } else {
-                    ArrayList list = new ArrayList();
-
-                    while (!in.isEnd())
-                        list.add(new Double(in.readDouble()));
-
-                    in.readEnd();
-
-                    double[] data = new double[list.size()];
-                    in.addRef(data);
-                    for (int i = 0; i < data.length; i++)
-                        data[i] = ((Double) list.get(i)).doubleValue();
-
-                    return data;
-                }
-            }
-
-            case STRING_ARRAY: {
-                if (length >= 0) {
-                    String[] data = new String[length];
-                    in.addRef(data);
-
-                    for (int i = 0; i < data.length; i++)
-                        data[i] = in.readString();
-
-                    in.readEnd();
-
-                    return data;
-                } else {
-                    ArrayList list = new ArrayList();
-
-                    while (!in.isEnd())
-                        list.add(in.readString());
-
-                    in.readEnd();
-
-                    String[] data = new String[list.size()];
-                    in.addRef(data);
-                    for (int i = 0; i < data.length; i++)
-                        data[i] = (String) list.get(i);
-
-                    return data;
-                }
-            }
-
-            case OBJECT_ARRAY: {
-                if (length >= 0) {
-                    Object[] data = new Object[length];
-                    in.addRef(data);
-
-                    for (int i = 0; i < data.length; i++)
-                        data[i] = in.readObject();
-
-                    in.readEnd();
-
-                    return data;
-                } else {
-                    ArrayList list = new ArrayList();
-
-                    in.addRef(list); // XXX: potential issues here
-
-                    while (!in.isEnd())
-                        list.add(in.readObject());
-
-                    in.readEnd();
-
-                    Object[] data = new Object[list.size()];
-                    for (int i = 0; i < data.length; i++)
-                        data[i] = (Object) list.get(i);
-
-                    return data;
-                }
-            }
-
-            default:
-                throw new UnsupportedOperationException(String.valueOf(this));
-        }
-    }
-
-    @Override
-    public Object readLengthList(AbstractHessianInput in, int length)
-            throws IOException {
-        switch (_code) {
-            case BOOLEAN_ARRAY: {
-                boolean[] data = new boolean[length];
-
-                in.addRef(data);
-
-                for (int i = 0; i < data.length; i++)
-                    data[i] = in.readBoolean();
-
-                return data;
-            }
-
-            case SHORT_ARRAY: {
-                short[] data = new short[length];
-
-                in.addRef(data);
-
-                for (int i = 0; i < data.length; i++)
-                    data[i] = (short) in.readInt();
-
-                return data;
-            }
-
-            case INTEGER_ARRAY: {
-                int[] data = new int[length];
-
-                in.addRef(data);
-
-                for (int i = 0; i < data.length; i++)
-                    data[i] = in.readInt();
-
-                return data;
-            }
-
-            case LONG_ARRAY: {
-                long[] data = new long[length];
-
-                in.addRef(data);
-
-                for (int i = 0; i < data.length; i++)
-                    data[i] = in.readLong();
-
-                return data;
-            }
-
-            case FLOAT_ARRAY: {
-                float[] data = new float[length];
-                in.addRef(data);
-
-                for (int i = 0; i < data.length; i++)
-                    data[i] = (float) in.readDouble();
-
-                return data;
-            }
-
-            case DOUBLE_ARRAY: {
-                double[] data = new double[length];
-                in.addRef(data);
-
-                for (int i = 0; i < data.length; i++)
-                    data[i] = in.readDouble();
-
-                return data;
-            }
-
-            case STRING_ARRAY: {
-                String[] data = new String[length];
-                in.addRef(data);
-
-                for (int i = 0; i < data.length; i++)
-                    data[i] = in.readString();
-
-                return data;
-            }
-
-            case OBJECT_ARRAY: {
-                Object[] data = new Object[length];
-                in.addRef(data);
-
-                for (int i = 0; i < data.length; i++)
-                    data[i] = in.readObject();
-
-                return data;
-            }
-
-            default:
-                throw new UnsupportedOperationException(String.valueOf(this));
-        }
-    }
-}
diff --git a/hessian-lite/src/main/java/com/alibaba/com/caucho/hessian/io/BasicSerializer.java b/hessian-lite/src/main/java/com/alibaba/com/caucho/hessian/io/BasicSerializer.java
deleted file mode 100644
index 6d5aee9..0000000
--- a/hessian-lite/src/main/java/com/alibaba/com/caucho/hessian/io/BasicSerializer.java
+++ /dev/null
@@ -1,274 +0,0 @@
-/*
- * Copyright (c) 2001-2004 Caucho Technology, Inc.  All rights reserved.
- *
- * The Apache Software License, Version 1.1
- *
- * 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 acknowlegement:
- *       "This product includes software developed by the
- *        Caucho Technology (http://www.caucho.com/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "Burlap", "Resin", and "Caucho" must not be used to
- *    endorse or promote products derived from this software without prior
- *    written permission. For written permission, please contact
- *    info@caucho.com.
- *
- * 5. Products derived from this software may not be called "Resin"
- *    nor may "Resin" appear in their names without prior written
- *    permission of Caucho Technology.
- *
- * 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 CAUCHO TECHNOLOGY 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.
- *
- * @author Scott Ferguson
- */
-
-package com.alibaba.com.caucho.hessian.io;
-
-import java.io.IOException;
-import java.util.Date;
-
-/**
- * Serializing an object for known object types.
- */
-public class BasicSerializer extends AbstractSerializer {
-    public static final int NULL = 0;
-    public static final int BOOLEAN = NULL + 1;
-    public static final int BYTE = BOOLEAN + 1;
-    public static final int SHORT = BYTE + 1;
-    public static final int INTEGER = SHORT + 1;
-    public static final int LONG = INTEGER + 1;
-    public static final int FLOAT = LONG + 1;
-    public static final int DOUBLE = FLOAT + 1;
-    public static final int CHARACTER = DOUBLE + 1;
-    public static final int CHARACTER_OBJECT = CHARACTER + 1;
-    public static final int STRING = CHARACTER_OBJECT + 1;
-    public static final int DATE = STRING + 1;
-    public static final int NUMBER = DATE + 1;
-    public static final int OBJECT = NUMBER + 1;
-
-    public static final int BOOLEAN_ARRAY = OBJECT + 1;
-    public static final int BYTE_ARRAY = BOOLEAN_ARRAY + 1;
-    public static final int SHORT_ARRAY = BYTE_ARRAY + 1;
-    public static final int INTEGER_ARRAY = SHORT_ARRAY + 1;
-    public static final int LONG_ARRAY = INTEGER_ARRAY + 1;
-    public static final int FLOAT_ARRAY = LONG_ARRAY + 1;
-    public static final int DOUBLE_ARRAY = FLOAT_ARRAY + 1;
-    public static final int CHARACTER_ARRAY = DOUBLE_ARRAY + 1;
-    public static final int STRING_ARRAY = CHARACTER_ARRAY + 1;
-    public static final int OBJECT_ARRAY = STRING_ARRAY + 1;
-
-    private int code;
-
-    public BasicSerializer(int code) {
-        this.code = code;
-    }
-
-    @Override
-    public void writeObject(Object obj, AbstractHessianOutput out)
-            throws IOException {
-        switch (code) {
-            case BOOLEAN:
-                out.writeBoolean(((Boolean) obj).booleanValue());
-                break;
-
-            case BYTE:
-            case SHORT:
-            case INTEGER:
-                out.writeInt(((Number) obj).intValue());
-                break;
-
-            case LONG:
-                out.writeLong(((Number) obj).longValue());
-                break;
-
-            case FLOAT:
-            case DOUBLE:
-                out.writeDouble(((Number) obj).doubleValue());
-                break;
-
-            case CHARACTER:
-            case CHARACTER_OBJECT:
-                out.writeString(String.valueOf(obj));
-                break;
-
-            case STRING:
-                out.writeString((String) obj);
-                break;
-
-            case DATE:
-                out.writeUTCDate(((Date) obj).getTime());
-                break;
-
-            case BOOLEAN_ARRAY: {
-                if (out.addRef(obj))
-                    return;
-
-                boolean[] data = (boolean[]) obj;
-                boolean hasEnd = out.writeListBegin(data.length, "[boolean");
-                for (int i = 0; i < data.length; i++)
-                    out.writeBoolean(data[i]);
-
-                if (hasEnd)
-                    out.writeListEnd();
-
-                break;
-            }
-
-            case BYTE_ARRAY: {
-                byte[] data = (byte[]) obj;
-                out.writeBytes(data, 0, data.length);
-                break;
-            }
-
-            case SHORT_ARRAY: {
-                if (out.addRef(obj))
-                    return;
-
-                short[] data = (short[]) obj;
-                boolean hasEnd = out.writeListBegin(data.length, "[short");
-
-                for (int i = 0; i < data.length; i++)
-                    out.writeInt(data[i]);
-
-                if (hasEnd)
-                    out.writeListEnd();
-                break;
-            }
-
-            case INTEGER_ARRAY: {
-                if (out.addRef(obj))
-                    return;
-
-                int[] data = (int[]) obj;
-
-                boolean hasEnd = out.writeListBegin(data.length, "[int");
-
-                for (int i = 0; i < data.length; i++)
-                    out.writeInt(data[i]);
-
-                if (hasEnd)
-                    out.writeListEnd();
-
-                break;
-            }
-
-            case LONG_ARRAY: {
-                if (out.addRef(obj))
-                    return;
-
-                long[] data = (long[]) obj;
-
-                boolean hasEnd = out.writeListBegin(data.length, "[long");
-
-                for (int i = 0; i < data.length; i++)
-                    out.writeLong(data[i]);
-
-                if (hasEnd)
-                    out.writeListEnd();
-                break;
-            }
-
-            case FLOAT_ARRAY: {
-                if (out.addRef(obj))
-                    return;
-
-                float[] data = (float[]) obj;
-
-                boolean hasEnd = out.writeListBegin(data.length, "[float");
-
-                for (int i = 0; i < data.length; i++)
-                    out.writeDouble(data[i]);
-
-                if (hasEnd)
-                    out.writeListEnd();
-                break;
-            }
-
-            case DOUBLE_ARRAY: {
-                if (out.addRef(obj))
-                    return;
-
-                double[] data = (double[]) obj;
-                boolean hasEnd = out.writeListBegin(data.length, "[double");
-
-                for (int i = 0; i < data.length; i++)
-                    out.writeDouble(data[i]);
-
-                if (hasEnd)
-                    out.writeListEnd();
-                break;
-            }
-
-            case STRING_ARRAY: {
-                if (out.addRef(obj))
-                    return;
-
-                String[] data = (String[]) obj;
-
-                boolean hasEnd = out.writeListBegin(data.length, "[string");
-
-                for (int i = 0; i < data.length; i++) {
-                    out.writeString(data[i]);
-                }
-
-                if (hasEnd)
-                    out.writeListEnd();
-                break;
-            }
-
-            case CHARACTER_ARRAY: {
-                char[] data = (char[]) obj;
-                out.writeString(data, 0, data.length);
-                break;
-            }
-
-            case OBJECT_ARRAY: {
-                if (out.addRef(obj))
-                    return;
-
-                Object[] data = (Object[]) obj;
-
-                boolean hasEnd = out.writeListBegin(data.length, "[object");
-
-                for (int i = 0; i < data.length; i++) {
-                    out.writeObject(data[i]);
-                }
-
-                if (hasEnd)
-                    out.writeListEnd();
-                break;
-            }
-
-            case NULL:
-                out.writeNull();
-                break;
-
-            default:
-                throw new RuntimeException(code + " " + String.valueOf(obj.getClass()));
-        }
-    }
-}
diff --git a/hessian-lite/src/main/java/com/alibaba/com/caucho/hessian/io/BeanDeserializer.java b/hessian-lite/src/main/java/com/alibaba/com/caucho/hessian/io/BeanDeserializer.java
deleted file mode 100644
index a0f16c8..0000000
--- a/hessian-lite/src/main/java/com/alibaba/com/caucho/hessian/io/BeanDeserializer.java
+++ /dev/null
@@ -1,286 +0,0 @@
-/*
- * Copyright (c) 2001-2008 Caucho Technology, Inc.  All rights reserved.
- *
- * The Apache Software License, Version 1.1
- *
- * 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 acknowlegement:
- *       "This product includes software developed by the
- *        Caucho Technology (http://www.caucho.com/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "Burlap", "Resin", and "Caucho" must not be used to
- *    endorse or promote products derived from this software without prior
- *    written permission. For written permission, please contact
- *    info@caucho.com.
- *
- * 5. Products derived from this software may not be called "Resin"
- *    nor may "Resin" appear in their names without prior written
- *    permission of Caucho Technology.
- *
- * 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 CAUCHO TECHNOLOGY 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.
- *
- * @author Scott Ferguson
- */
-
-package com.alibaba.com.caucho.hessian.io;
-
-import java.io.IOException;
-import java.lang.reflect.Constructor;
-import java.lang.reflect.Method;
-import java.lang.reflect.Modifier;
-import java.util.HashMap;
-
-/**
- * Serializing an object for known object types.
- */
-public class BeanDeserializer extends AbstractMapDeserializer {
-    private Class _type;
-    private HashMap _methodMap;
-    private Method _readResolve;
-    private Constructor _constructor;
-    private Object[] _constructorArgs;
-
-    public BeanDeserializer(Class cl) {
-        _type = cl;
-        _methodMap = getMethodMap(cl);
-
-        _readResolve = getReadResolve(cl);
-
-        Constructor[] constructors = cl.getConstructors();
-        int bestLength = Integer.MAX_VALUE;
-
-        for (int i = 0; i < constructors.length; i++) {
-            if (constructors[i].getParameterTypes().length < bestLength) {
-                _constructor = constructors[i];
-                bestLength = _constructor.getParameterTypes().length;
-            }
-        }
-
-        if (_constructor != null) {
-            _constructor.setAccessible(true);
-            Class[] params = _constructor.getParameterTypes();
-            _constructorArgs = new Object[params.length];
-            for (int i = 0; i < params.length; i++) {
-                _constructorArgs[i] = getParamArg(params[i]);
-            }
-        }
-    }
-
-    /**
-     * Creates a map of the classes fields.
-     */
-    protected static Object getParamArg(Class cl) {
-        if (!cl.isPrimitive())
-            return null;
-        else if (boolean.class.equals(cl))
-            return Boolean.FALSE;
-        else if (byte.class.equals(cl))
-            return Byte.valueOf((byte) 0);
-        else if (short.class.equals(cl))
-            return Short.valueOf((short) 0);
-        else if (char.class.equals(cl))
-            return Character.valueOf((char) 0);
-        else if (int.class.equals(cl))
-            return Integer.valueOf(0);
-        else if (long.class.equals(cl))
-            return Long.valueOf(0);
-        else if (float.class.equals(cl))
-            return Double.valueOf(0);
-        else if (double.class.equals(cl))
-            return Double.valueOf(0);
-        else
-            throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public Class getType() {
-        return _type;
-    }
-
-    @Override
-    public Object readMap(AbstractHessianInput in)
-            throws IOException {
-        try {
-            Object obj = instantiate();
-
-            return readMap(in, obj);
-        } catch (IOException e) {
-            throw e;
-        } catch (Exception e) {
-            throw new IOExceptionWrapper(e);
-        }
-    }
-
-    public Object readMap(AbstractHessianInput in, Object obj)
-            throws IOException {
-        try {
-            int ref = in.addRef(obj);
-
-            while (!in.isEnd()) {
-                Object key = in.readObject();
-
-                Method method = (Method) _methodMap.get(key);
-
-                if (method != null) {
-                    Object value = in.readObject(method.getParameterTypes()[0]);
-
-                    method.invoke(obj, new Object[]{value});
-                } else {
-                    Object value = in.readObject();
-                }
-            }
-
-            in.readMapEnd();
-
-            Object resolve = resolve(obj);
-
-            if (obj != resolve)
-                in.setRef(ref, resolve);
-
-            return resolve;
-        } catch (IOException e) {
-            throw e;
-        } catch (Exception e) {
-            throw new IOExceptionWrapper(e);
-        }
-    }
-
-    private Object resolve(Object obj) {
-        // if there's a readResolve method, call it
-        try {
-            if (_readResolve != null)
-                return _readResolve.invoke(obj, new Object[0]);
-        } catch (Exception e) {
-        }
-
-        return obj;
-    }
-
-    protected Object instantiate()
-            throws Exception {
-        return _constructor.newInstance(_constructorArgs);
-    }
-
-    /**
-     * Returns the readResolve method
-     */
-    protected Method getReadResolve(Class cl) {
-        for (; cl != null; cl = cl.getSuperclass()) {
-            Method[] methods = cl.getDeclaredMethods();
-
-            for (int i = 0; i < methods.length; i++) {
-                Method method = methods[i];
-
-                if (method.getName().equals("readResolve") &&
-                        method.getParameterTypes().length == 0)
-                    return method;
-            }
-        }
-
-        return null;
-    }
-
-    /**
-     * Creates a map of the classes fields.
-     */
-    protected HashMap getMethodMap(Class cl) {
-        HashMap methodMap = new HashMap();
-
-        for (; cl != null; cl = cl.getSuperclass()) {
-            Method[] methods = cl.getDeclaredMethods();
-
-            for (int i = 0; i < methods.length; i++) {
-                Method method = methods[i];
-
-                if (Modifier.isStatic(method.getModifiers()))
-                    continue;
-
-                String name = method.getName();
-
-                if (!name.startsWith("set"))
-                    continue;
-
-                Class[] paramTypes = method.getParameterTypes();
-                if (paramTypes.length != 1)
-                    continue;
-
-                if (!method.getReturnType().equals(void.class))
-                    continue;
-
-                if (findGetter(methods, name, paramTypes[0]) == null)
-                    continue;
-
-                // XXX: could parameterize the handler to only deal with public
-                try {
-                    method.setAccessible(true);
-                } catch (Throwable e) {
-                    e.printStackTrace();
-                }
-
-                name = name.substring(3);
-
-                int j = 0;
-                for (; j < name.length() && Character.isUpperCase(name.charAt(j)); j++) {
-                }
-
-                if (j == 1)
-                    name = name.substring(0, j).toLowerCase() + name.substring(j);
-                else if (j > 1)
-                    name = name.substring(0, j - 1).toLowerCase() + name.substring(j - 1);
-
-
-                methodMap.put(name, method);
-            }
-        }
-
-        return methodMap;
-    }
-
-    /**
-     * Finds any matching setter.
-     */
-    private Method findGetter(Method[] methods, String setterName, Class arg) {
-        String getterName = "get" + setterName.substring(3);
-
-        for (int i = 0; i < methods.length; i++) {
-            Method method = methods[i];
-
-            if (!method.getName().equals(getterName))
-                continue;
-
-            if (!method.getReturnType().equals(arg))
-                continue;
-
-            Class[] params = method.getParameterTypes();
-
-            if (params.length == 0)
-                return method;
-        }
-
-        return null;
-    }
-}
diff --git a/hessian-lite/src/main/java/com/alibaba/com/caucho/hessian/io/BeanSerializer.java b/hessian-lite/src/main/java/com/alibaba/com/caucho/hessian/io/BeanSerializer.java
deleted file mode 100644
index a3a8ba5..0000000
--- a/hessian-lite/src/main/java/com/alibaba/com/caucho/hessian/io/BeanSerializer.java
+++ /dev/null
@@ -1,310 +0,0 @@
-/*
- * Copyright (c) 2001-2004 Caucho Technology, Inc.  All rights reserved.
- *
- * The Apache Software License, Version 1.1
- *
- * 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 acknowlegement:
- *       "This product includes software developed by the
- *        Caucho Technology (http://www.caucho.com/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "Burlap", "Resin", and "Caucho" must not be used to
- *    endorse or promote products derived from this software without prior
- *    written permission. For written permission, please contact
- *    info@caucho.com.
- *
- * 5. Products derived from this software may not be called "Resin"
- *    nor may "Resin" appear in their names without prior written
- *    permission of Caucho Technology.
- *
- * 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 CAUCHO TECHNOLOGY 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.
- *
- * @author Scott Ferguson
- */
-
-package com.alibaba.com.caucho.hessian.io;
-
-import java.io.IOException;
-import java.lang.reflect.Method;
-import java.lang.reflect.Modifier;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.Comparator;
-import java.util.logging.Level;
-import java.util.logging.Logger;
-
-/**
- * Serializing an object for known object types.
- */
-public class BeanSerializer extends AbstractSerializer {
-    private static final Logger log
-            = Logger.getLogger(BeanSerializer.class.getName());
-
-    private static final Object[] NULL_ARGS = new Object[0];
-    private Method[] _methods;
-    private String[] _names;
-
-    private Object _writeReplaceFactory;
-    private Method _writeReplace;
-
-    public BeanSerializer(Class cl, ClassLoader loader) {
-        introspectWriteReplace(cl, loader);
-
-        ArrayList primitiveMethods = new ArrayList();
-        ArrayList compoundMethods = new ArrayList();
-
-        for (; cl != null; cl = cl.getSuperclass()) {
-            Method[] methods = cl.getDeclaredMethods();
-
-            for (int i = 0; i < methods.length; i++) {
-                Method method = methods[i];
-
-                if (Modifier.isStatic(method.getModifiers()))
-                    continue;
-
-                if (method.getParameterTypes().length != 0)
-                    continue;
-
-                String name = method.getName();
-
-                if (!name.startsWith("get"))
-                    continue;
-
-                Class type = method.getReturnType();
-
-                if (type.equals(void.class))
-                    continue;
-
-                if (findSetter(methods, name, type) == null)
-                    continue;
-
-                // XXX: could parameterize the handler to only deal with public
-                method.setAccessible(true);
-
-                if (type.isPrimitive()
-                        || type.getName().startsWith("java.lang.")
-                        && !type.equals(Object.class))
-                    primitiveMethods.add(method);
-                else
-                    compoundMethods.add(method);
-            }
-        }
-
-        ArrayList methodList = new ArrayList();
-        methodList.addAll(primitiveMethods);
-        methodList.addAll(compoundMethods);
-
-        Collections.sort(methodList, new MethodNameCmp());
-
-        _methods = new Method[methodList.size()];
-        methodList.toArray(_methods);
-
-        _names = new String[_methods.length];
-
-        for (int i = 0; i < _methods.length; i++) {
-            String name = _methods[i].getName();
-
-            name = name.substring(3);
-
-            int j = 0;
-            for (; j < name.length() && Character.isUpperCase(name.charAt(j)); j++) {
-            }
-
-            if (j == 1)
-                name = name.substring(0, j).toLowerCase() + name.substring(j);
-            else if (j > 1)
-                name = name.substring(0, j - 1).toLowerCase() + name.substring(j - 1);
-
-            _names[i] = name;
-        }
-    }
-
-    private void introspectWriteReplace(Class cl, ClassLoader loader) {
-        try {
-            String className = cl.getName() + "HessianSerializer";
-
-            Class serializerClass = Class.forName(className, false, loader);
-
-            Object serializerObject = serializerClass.newInstance();
-
-            Method writeReplace = getWriteReplace(serializerClass, cl);
-
-            if (writeReplace != null) {
-                _writeReplaceFactory = serializerObject;
-                _writeReplace = writeReplace;
-
-                return;
-            }
-        } catch (ClassNotFoundException e) {
-        } catch (Exception e) {
-            log.log(Level.FINER, e.toString(), e);
-        }
-
-        _writeReplace = getWriteReplace(cl);
-    }
-
-    /**
-     * Returns the writeReplace method
-     */
-    protected Method getWriteReplace(Class cl) {
-        for (; cl != null; cl = cl.getSuperclass()) {
-            Method[] methods = cl.getDeclaredMethods();
-
-            for (int i = 0; i < methods.length; i++) {
-                Method method = methods[i];
-
-                if (method.getName().equals("writeReplace") &&
-                        method.getParameterTypes().length == 0)
-                    return method;
-            }
-        }
-
-        return null;
-    }
-
-    /**
-     * Returns the writeReplace method
-     */
-    protected Method getWriteReplace(Class cl, Class param) {
-        for (; cl != null; cl = cl.getSuperclass()) {
-            for (Method method : cl.getDeclaredMethods()) {
-                if (method.getName().equals("writeReplace")
-                        && method.getParameterTypes().length == 1
-                        && param.equals(method.getParameterTypes()[0]))
-                    return method;
-            }
-        }
-
-        return null;
-    }
-
-    @Override
-    public void writeObject(Object obj, AbstractHessianOutput out)
-            throws IOException {
-        if (out.addRef(obj))
-            return;
-
-        Class cl = obj.getClass();
-
-        try {
-            if (_writeReplace != null) {
-                Object repl;
-
-                if (_writeReplaceFactory != null)
-                    repl = _writeReplace.invoke(_writeReplaceFactory, obj);
-                else
-                    repl = _writeReplace.invoke(obj);
-
-                out.removeRef(obj);
-
-                out.writeObject(repl);
-
-                out.replaceRef(repl, obj);
-
-                return;
-            }
-        } catch (Exception e) {
-            log.log(Level.FINER, e.toString(), e);
-        }
-
-        int ref = out.writeObjectBegin(cl.getName());
-
-        if (ref < -1) {
-            // Hessian 1.1 uses a map
-
-            for (int i = 0; i < _methods.length; i++) {
-                Method method = _methods[i];
-                Object value = null;
-
-                try {
-                    value = _methods[i].invoke(obj, (Object[]) null);
-                } catch (Exception e) {
-                    log.log(Level.FINE, e.toString(), e);
-                }
-
-                out.writeString(_names[i]);
-
-                out.writeObject(value);
-            }
-
-            out.writeMapEnd();
-        } else {
-            if (ref == -1) {
-                out.writeInt(_names.length);
-
-                for (int i = 0; i < _names.length; i++)
-                    out.writeString(_names[i]);
-
-                out.writeObjectBegin(cl.getName());
-            }
-
-            for (int i = 0; i < _methods.length; i++) {
-                Method method = _methods[i];
-                Object value = null;
-
-                try {
-                    value = _methods[i].invoke(obj, (Object[]) null);
-                } catch (Exception e) {
-                    log.log(Level.FINER, e.toString(), e);
-                }
-
-                out.writeObject(value);
-            }
-        }
-    }
-
-    /**
-     * Finds any matching setter.
-     */
-    private Method findSetter(Method[] methods, String getterName, Class arg) {
-        String setterName = "set" + getterName.substring(3);
-
-        for (int i = 0; i < methods.length; i++) {
-            Method method = methods[i];
-
-            if (!method.getName().equals(setterName))
-                continue;
-
-            if (!method.getReturnType().equals(void.class))
-                continue;
-
-            Class[] params = method.getParameterTypes();
-
-            if (params.length == 1 && params[0].equals(arg))
-                return method;
-        }
-
-        return null;
-    }
-
-    static class MethodNameCmp implements Comparator<Method> {
-        @Override
-        public int compare(Method a, Method b) {
-            return a.getName().compareTo(b.getName());
-        }
-    }
-}
diff --git a/hessian-lite/src/main/java/com/alibaba/com/caucho/hessian/io/BeanSerializerFactory.java b/hessian-lite/src/main/java/com/alibaba/com/caucho/hessian/io/BeanSerializerFactory.java
deleted file mode 100644
index 7c8e328..0000000
--- a/hessian-lite/src/main/java/com/alibaba/com/caucho/hessian/io/BeanSerializerFactory.java
+++ /dev/null
@@ -1,80 +0,0 @@
-/*
- * Copyright (c) 2001-2004 Caucho Technology, Inc.  All rights reserved.
- *
- * The Apache Software License, Version 1.1
- *
- * 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 acknowlegement:
- *       "This product includes software developed by the
- *        Caucho Technology (http://www.caucho.com/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "Burlap", "Resin", and "Caucho" must not be used to
- *    endorse or promote products derived from this software without prior
- *    written permission. For written permission, please contact
- *    info@caucho.com.
- *
- * 5. Products derived from this software may not be called "Resin"
- *    nor may "Resin" appear in their names without prior written
- *    permission of Caucho Technology.
- *
- * 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 CAUCHO TECHNOLOGY 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.
- *
- * @author Scott Ferguson
- */
-
-package com.alibaba.com.caucho.hessian.io;
-
-/**
- * Factory for returning serialization methods.
- */
-public class BeanSerializerFactory extends SerializerFactory {
-    /**
-     * Returns the default serializer for a class that isn't matched
-     * directly.  Application can override this method to produce
-     * bean-style serialization instead of field serialization.
-     *
-     * @param cl the class of the object that needs to be serialized.
-     * @return a serializer object for the serialization.
-     */
-    @Override
-    protected Serializer getDefaultSerializer(Class cl) {
-        return new BeanSerializer(cl, getClassLoader());
-    }
-
-    /**
-     * Returns the default deserializer for a class that isn't matched
-     * directly.  Application can override this method to produce
-     * bean-style serialization instead of field serialization.
-     *
-     * @param cl the class of the object that needs to be serialized.
-     * @return a serializer object for the serialization.
-     */
-    @Override
-    protected Deserializer getDefaultDeserializer(Class cl) {
-        return new BeanDeserializer(cl);
-    }
-}
diff --git a/hessian-lite/src/main/java/com/alibaba/com/caucho/hessian/io/BigIntegerDeserializer.java b/hessian-lite/src/main/java/com/alibaba/com/caucho/hessian/io/BigIntegerDeserializer.java
deleted file mode 100644
index 5cd0498..0000000
--- a/hessian-lite/src/main/java/com/alibaba/com/caucho/hessian/io/BigIntegerDeserializer.java
+++ /dev/null
@@ -1,32 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.alibaba.com.caucho.hessian.io;
-
-import java.math.BigInteger;
-
-public class BigIntegerDeserializer extends JavaDeserializer {
-
-    public BigIntegerDeserializer() {
-        super(BigInteger.class);
-    }
-
-    @Override
-    protected Object instantiate() throws Exception {
-        return new BigInteger("0");
-    }
-}
diff --git a/hessian-lite/src/main/java/com/alibaba/com/caucho/hessian/io/CalendarHandle.java b/hessian-lite/src/main/java/com/alibaba/com/caucho/hessian/io/CalendarHandle.java
deleted file mode 100644
index ccb90b2..0000000
--- a/hessian-lite/src/main/java/com/alibaba/com/caucho/hessian/io/CalendarHandle.java
+++ /dev/null
@@ -1,90 +0,0 @@
-/*
- * Copyright (c) 2001-2004 Caucho Technology, Inc.  All rights reserved.
- *
- * The Apache Software License, Version 1.1
- *
- * 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 acknowlegement:
- *       "This product includes software developed by the
- *        Caucho Technology (http://www.caucho.com/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "Hessian", "Resin", and "Caucho" must not be used to
- *    endorse or promote products derived from this software without prior
- *    written permission. For written permission, please contact
- *    info@caucho.com.
- *
- * 5. Products derived from this software may not be called "Resin"
- *    nor may "Resin" appear in their names without prior written
- *    permission of Caucho Technology.
- *
- * 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 CAUCHO TECHNOLOGY 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.
- *
- * @author Scott Ferguson
- */
-
-package com.alibaba.com.caucho.hessian.io;
-
-import java.util.Calendar;
-import java.util.Date;
-import java.util.GregorianCalendar;
-
-/**
- * Handle for a calendar object.
- */
-public class CalendarHandle implements java.io.Serializable, HessianHandle {
-    private Class type;
-    private Date date;
-
-    public CalendarHandle() {
-    }
-
-    public CalendarHandle(Class type, long time) {
-        if (!GregorianCalendar.class.equals(type))
-            this.type = type;
-
-        this.date = new Date(time);
-    }
-
-    private Object readResolve() {
-        try {
-            Calendar cal;
-
-            if (this.type != null)
-                cal = (Calendar) this.type.newInstance();
-            else
-                cal = new GregorianCalendar();
-
-            cal.setTimeInMillis(this.date.getTime());
-
-            return cal;
-        } catch (RuntimeException e) {
-            throw e;
-        } catch (Exception e) {
-            throw new RuntimeException(e);
-        }
-    }
-}
diff --git a/hessian-lite/src/main/java/com/alibaba/com/caucho/hessian/io/CalendarSerializer.java b/hessian-lite/src/main/java/com/alibaba/com/caucho/hessian/io/CalendarSerializer.java
deleted file mode 100644
index 0db6c14..0000000
--- a/hessian-lite/src/main/java/com/alibaba/com/caucho/hessian/io/CalendarSerializer.java
+++ /dev/null
@@ -1,76 +0,0 @@
-/*
- * Copyright (c) 2001-2004 Caucho Technology, Inc.  All rights reserved.
- *
- * The Apache Software License, Version 1.1
- *
- * 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 acknowlegement:
- *       "This product includes software developed by the
- *        Caucho Technology (http://www.caucho.com/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "Hessian", "Resin", and "Caucho" must not be used to
- *    endorse or promote products derived from this software without prior
- *    written permission. For written permission, please contact
- *    info@caucho.com.
- *
- * 5. Products derived from this software may not be called "Resin"
- *    nor may "Resin" appear in their names without prior written
- *    permission of Caucho Technology.
- *
- * 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 CAUCHO TECHNOLOGY 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.
- *
- * @author Scott Ferguson
- */
-
-package com.alibaba.com.caucho.hessian.io;
-
-import java.io.IOException;
-import java.util.Calendar;
-
-/**
- * Serializing a calendar.
- */
-public class CalendarSerializer extends AbstractSerializer {
-    private static CalendarSerializer SERIALIZER = new CalendarSerializer();
-
-    public static CalendarSerializer create() {
-        return SERIALIZER;
-    }
-
-    @Override
-    public void writeObject(Object obj, AbstractHessianOutput out)
-            throws IOException {
-        if (obj == null)
-            out.writeNull();
-        else {
-            Calendar cal = (Calendar) obj;
-
-            out.writeObject(new CalendarHandle(cal.getClass(),
-                    cal.getTimeInMillis()));
-        }
-    }
-}
diff --git a/hessian-lite/src/main/java/com/alibaba/com/caucho/hessian/io/ClassDeserializer.java b/hessian-lite/src/main/java/com/alibaba/com/caucho/hessian/io/ClassDeserializer.java
deleted file mode 100644
index 422333c..0000000
--- a/hessian-lite/src/main/java/com/alibaba/com/caucho/hessian/io/ClassDeserializer.java
+++ /dev/null
@@ -1,158 +0,0 @@
-/*
- * Copyright (c) 2001-2004 Caucho Technology, Inc.  All rights reserved.
- *
- * The Apache Software License, Version 1.1
- *
- * 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 acknowlegement:
- *       "This product includes software developed by the
- *        Caucho Technology (http://www.caucho.com/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "Hessian", "Resin", and "Caucho" must not be used to
- *    endorse or promote products derived from this software without prior
- *    written permission. For written permission, please contact
- *    info@caucho.com.
- *
- * 5. Products derived from this software may not be called "Resin"
- *    nor may "Resin" appear in their names without prior written
- *    permission of Caucho Technology.
- *
- * 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 CAUCHO TECHNOLOGY 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.
- *
- * @author Scott Ferguson
- */
-
-package com.alibaba.com.caucho.hessian.io;
-
-import java.io.IOException;
-import java.util.HashMap;
-
-/**
- * Deserializing a JDK 1.2 Class.
- */
-public class ClassDeserializer extends AbstractMapDeserializer {
-    private static final HashMap<String, Class> _primClasses
-            = new HashMap<String, Class>();
-
-    static {
-        _primClasses.put("void", void.class);
-        _primClasses.put("boolean", boolean.class);
-        _primClasses.put("java.lang.Boolean", Boolean.class);
-        _primClasses.put("byte", byte.class);
-        _primClasses.put("java.lang.Byte", Byte.class);
-        _primClasses.put("char", char.class);
-        _primClasses.put("java.lang.Character", Character.class);
-        _primClasses.put("short", short.class);
-        _primClasses.put("java.lang.Short", Short.class);
-        _primClasses.put("int", int.class);
-        _primClasses.put("java.lang.Integer", Integer.class);
-        _primClasses.put("long", long.class);
-        _primClasses.put("java.lang.Long", Long.class);
-        _primClasses.put("float", float.class);
-        _primClasses.put("java.lang.Float", Float.class);
-        _primClasses.put("double", double.class);
-        _primClasses.put("java.lang.Double", Double.class);
-        _primClasses.put("java.lang.String", String.class);
-    }
-
-    private ClassLoader _loader;
-
-    public ClassDeserializer(ClassLoader loader) {
-        _loader = loader;
-    }
-
-    @Override
-    public Class getType() {
-        return Class.class;
-    }
-
-    @Override
-    public Object readMap(AbstractHessianInput in)
-            throws IOException {
-        int ref = in.addRef(null);
-
-        String name = null;
-
-        while (!in.isEnd()) {
-            String key = in.readString();
-
-            if (key.equals("name"))
-                name = in.readString();
-            else
-                in.readObject();
-        }
-
-        in.readMapEnd();
-
-        Object value = create(name);
-
-        in.setRef(ref, value);
-
-        return value;
-    }
-
-    @Override
-    public Object readObject(AbstractHessianInput in, String[] fieldNames)
-            throws IOException {
-        int ref = in.addRef(null);
-
-        String name = null;
-
-        for (int i = 0; i < fieldNames.length; i++) {
-            if ("name".equals(fieldNames[i]))
-                name = in.readString();
-            else
-                in.readObject();
-        }
-
-        Object value = create(name);
-
-        in.setRef(ref, value);
-
-        return value;
-    }
-
-    Object create(String name)
-            throws IOException {
-        if (name == null)
-            throw new IOException("Serialized Class expects name.");
-
-        Class cl = _primClasses.get(name);
-
-        if (cl != null)
-            return cl;
-
-        try {
-            if (_loader != null)
-                return Class.forName(name, false, _loader);
-            else
-                return Class.forName(name);
-        } catch (Exception e) {
-            throw new IOExceptionWrapper(e);
-        }
-    }
-}
diff --git a/hessian-lite/src/main/java/com/alibaba/com/caucho/hessian/io/ClassSerializer.java b/hessian-lite/src/main/java/com/alibaba/com/caucho/hessian/io/ClassSerializer.java
deleted file mode 100644
index 7529e17..0000000
--- a/hessian-lite/src/main/java/com/alibaba/com/caucho/hessian/io/ClassSerializer.java
+++ /dev/null
@@ -1,84 +0,0 @@
-/*
- * Copyright (c) 2001-2004 Caucho Technology, Inc.  All rights reserved.
- *
- * The Apache Software License, Version 1.1
- *
- * 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 acknowlegement:
- *       "This product includes software developed by the
- *        Caucho Technology (http://www.caucho.com/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "Hessian", "Resin", and "Caucho" must not be used to
- *    endorse or promote products derived from this software without prior
- *    written permission. For written permission, please contact
- *    info@caucho.com.
- *
- * 5. Products derived from this software may not be called "Resin"
- *    nor may "Resin" appear in their names without prior written
- *    permission of Caucho Technology.
- *
- * 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 CAUCHO TECHNOLOGY 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.
- *
- * @author Scott Ferguson
- */
-
-package com.alibaba.com.caucho.hessian.io;
-
-import java.io.IOException;
-
-/**
- * Serializing a remote object.
- */
-public class ClassSerializer extends AbstractSerializer {
-    @Override
-    public void writeObject(Object obj, AbstractHessianOutput out)
-            throws IOException {
-        Class cl = (Class) obj;
-
-        if (cl == null) {
-            out.writeNull();
-        } else if (out.addRef(obj)) {
-            return;
-        } else {
-            int ref = out.writeObjectBegin("java.lang.Class");
-
-            if (ref < -1) {
-                out.writeString("name");
-                out.writeString(cl.getName());
-                out.writeMapEnd();
-            } else {
-                if (ref == -1) {
-                    out.writeInt(1);
-                    out.writeString("name");
-                    out.writeObjectBegin("java.lang.Class");
-                }
-
-                out.writeString(cl.getName());
-            }
-        }
-    }
-}
diff --git a/hessian-lite/src/main/java/com/alibaba/com/caucho/hessian/io/CollectionDeserializer.java b/hessian-lite/src/main/java/com/alibaba/com/caucho/hessian/io/CollectionDeserializer.java
deleted file mode 100644
index 1d3bc89..0000000
--- a/hessian-lite/src/main/java/com/alibaba/com/caucho/hessian/io/CollectionDeserializer.java
+++ /dev/null
@@ -1,161 +0,0 @@
-/*
- * Copyright (c) 2001-2004 Caucho Technology, Inc.  All rights reserved.
- *
- * The Apache Software License, Version 1.1
- *
- * 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 acknowlegement:
- *       "This product includes software developed by the
- *        Caucho Technology (http://www.caucho.com/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "Hessian", "Resin", and "Caucho" must not be used to
- *    endorse or promote products derived from this software without prior
- *    written permission. For written permission, please contact
- *    info@caucho.com.
- *
- * 5. Products derived from this software may not be called "Resin"
- *    nor may "Resin" appear in their names without prior written
- *    permission of Caucho Technology.
- *
- * 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 CAUCHO TECHNOLOGY 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.
- *
- * @author Scott Ferguson
- */
-
-package com.alibaba.com.caucho.hessian.io;
-
-import java.io.IOException;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Set;
-import java.util.SortedSet;
-import java.util.TreeSet;
-
-/**
- * Deserializing a JDK 1.2 Collection.
- */
-public class CollectionDeserializer extends AbstractListDeserializer {
-    private Class _type;
-
-    public CollectionDeserializer(Class type) {
-        _type = type;
-    }
-
-    @Override
-    public Class getType() {
-        return _type;
-    }
-
-    @Override
-    public Object readList(AbstractHessianInput in, int length)
-            throws IOException {
-        return readList(in, length, null);
-    }
-
-    @Override
-    public Object readList(AbstractHessianInput in, int length, Class<?> expectType) throws IOException {
-        Collection list = createList();
-
-        in.addRef(list);
-
-        Deserializer deserializer = null;
-
-        SerializerFactory factory = findSerializerFactory(in);
-        if (expectType != null) {
-            deserializer = factory.getDeserializer(expectType.getName());
-        }
-
-        while (!in.isEnd())
-            list.add(deserializer != null ? deserializer.readObject(in) : in.readObject());
-
-        in.readEnd();
-
-        return list;
-    }
-
-    @Override
-    public Object readLengthList(AbstractHessianInput in, int length)
-            throws IOException {
-        return readList(in, length, null);
-    }
-
-    @Override
-    public Object readLengthList(AbstractHessianInput in, int length, Class<?> expectType) throws IOException {
-        Collection list = createList();
-
-        in.addRef(list);
-
-        Deserializer deserializer = null;
-
-        SerializerFactory factory = findSerializerFactory(in);
-        if (expectType != null) {
-            deserializer = factory.getDeserializer(expectType.getName());
-        }
-
-        for (; length > 0; length--)
-            list.add(deserializer != null ? deserializer.readObject(in) : in.readObject());
-
-        return list;
-    }
-
-    private Collection createList()
-            throws IOException {
-        Collection list = null;
-
-        if (_type == null)
-            list = new ArrayList();
-        else if (!_type.isInterface()) {
-            try {
-                list = (Collection) _type.newInstance();
-            } catch (Exception e) {
-            }
-        }
-
-        if (list != null) {
-        } else if (SortedSet.class.isAssignableFrom(_type))
-            list = new TreeSet();
-        else if (Set.class.isAssignableFrom(_type))
-            list = new HashSet();
-        else if (List.class.isAssignableFrom(_type))
-            list = new ArrayList();
-        else if (Collection.class.isAssignableFrom(_type))
-            list = new ArrayList();
-        else {
-            try {
-                list = (Collection) _type.newInstance();
-            } catch (Exception e) {
-                throw new IOExceptionWrapper(e);
-            }
-        }
-
-        return list;
-    }
-}
-
-
diff --git a/hessian-lite/src/main/java/com/alibaba/com/caucho/hessian/io/CollectionSerializer.java b/hessian-lite/src/main/java/com/alibaba/com/caucho/hessian/io/CollectionSerializer.java
deleted file mode 100644
index 7ede5af..0000000
--- a/hessian-lite/src/main/java/com/alibaba/com/caucho/hessian/io/CollectionSerializer.java
+++ /dev/null
@@ -1,105 +0,0 @@
-/*
- * Copyright (c) 2001-2004 Caucho Technology, Inc.  All rights reserved.
- *
- * The Apache Software License, Version 1.1
- *
- * 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 acknowlegement:
- *       "This product includes software developed by the
- *        Caucho Technology (http://www.caucho.com/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "Hessian", "Resin", and "Caucho" must not be used to
- *    endorse or promote products derived from this software without prior
- *    written permission. For written permission, please contact
- *    info@caucho.com.
- *
- * 5. Products derived from this software may not be called "Resin"
- *    nor may "Resin" appear in their names without prior written
- *    permission of Caucho Technology.
- *
- * 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 CAUCHO TECHNOLOGY 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.
- *
- * @author Scott Ferguson
- */
-
-package com.alibaba.com.caucho.hessian.io;
-
-import java.io.IOException;
-import java.io.Serializable;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Iterator;
-
-/**
- * Serializing a JDK 1.2 Collection.
- */
-public class CollectionSerializer extends AbstractSerializer {
-    private boolean _sendJavaType = true;
-
-    /**
-     * Return true if the java type of the collection should be sent.
-     */
-    public boolean getSendJavaType() {
-        return _sendJavaType;
-    }
-
-    /**
-     * Set true if the java type of the collection should be sent.
-     */
-    public void setSendJavaType(boolean sendJavaType) {
-        _sendJavaType = sendJavaType;
-    }
-
-    @Override
-    public void writeObject(Object obj, AbstractHessianOutput out)
-            throws IOException {
-        if (out.addRef(obj))
-            return;
-
-        Collection list = (Collection) obj;
-
-        Class cl = obj.getClass();
-        boolean hasEnd;
-
-        if (cl.equals(ArrayList.class)
-                || !_sendJavaType
-                || !Serializable.class.isAssignableFrom(cl))
-            hasEnd = out.writeListBegin(list.size(), null);
-        else
-            hasEnd = out.writeListBegin(list.size(), obj.getClass().getName());
-
-        Iterator iter = list.iterator();
-        while (iter.hasNext()) {
-            Object value = iter.next();
-
-            out.writeObject(value);
-        }
-
-        if (hasEnd)
-            out.writeListEnd();
-    }
-}
diff --git a/hessian-lite/src/main/java/com/alibaba/com/caucho/hessian/io/Deflation.java b/hessian-lite/src/main/java/com/alibaba/com/caucho/hessian/io/Deflation.java
deleted file mode 100644
index 11380ad..0000000
--- a/hessian-lite/src/main/java/com/alibaba/com/caucho/hessian/io/Deflation.java
+++ /dev/null
@@ -1,201 +0,0 @@
-/*
- * Copyright (c) 2001-2004 Caucho Technology, Inc.  All rights reserved.
- *
- * The Apache Software License, Version 1.1
- *
- * 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 acknowlegement:
- *       "This product includes software developed by the
- *        Caucho Technology (http://www.caucho.com/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "Hessian", "Resin", and "Caucho" must not be used to
- *    endorse or promote products derived from this software without prior
- *    written permission. For written permission, please contact
- *    info@caucho.com.
- *
- * 5. Products derived from this software may not be called "Resin"
- *    nor may "Resin" appear in their names without prior written
- *    permission of Caucho Technology.
- *
- * 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 CAUCHO TECHNOLOGY 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.
- *
- * @author Scott Ferguson
- */
-
-package com.alibaba.com.caucho.hessian.io;
-
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.OutputStream;
-import java.util.zip.DeflaterOutputStream;
-import java.util.zip.InflaterInputStream;
-
-public class Deflation extends HessianEnvelope {
-    public Deflation() {
-    }
-
-    @Override
-    public Hessian2Output wrap(Hessian2Output out)
-            throws IOException {
-        OutputStream os = new DeflateOutputStream(out);
-
-        Hessian2Output filterOut = new Hessian2Output(os);
-
-        filterOut.setCloseStreamOnClose(true);
-
-        return filterOut;
-    }
-
-    @Override
-    public Hessian2Input unwrap(Hessian2Input in)
-            throws IOException {
-        int version = in.readEnvelope();
-
-        String method = in.readMethod();
-
-        if (!method.equals(getClass().getName()))
-            throw new IOException("expected hessian Envelope method '" +
-                    getClass().getName() + "' at '" + method + "'");
-
-        return unwrapHeaders(in);
-    }
-
-    @Override
-    public Hessian2Input unwrapHeaders(Hessian2Input in)
-            throws IOException {
-        InputStream is = new DeflateInputStream(in);
-
-        Hessian2Input filter = new Hessian2Input(is);
-
-        filter.setCloseStreamOnClose(true);
-
-        return filter;
-    }
-
-    static class DeflateOutputStream extends OutputStream {
-        private Hessian2Output _out;
-        private OutputStream _bodyOut;
-        private DeflaterOutputStream _deflateOut;
-
-        DeflateOutputStream(Hessian2Output out)
-                throws IOException {
-            _out = out;
-
-            _out.startEnvelope(Deflation.class.getName());
-
-            _out.writeInt(0);
-
-            _bodyOut = _out.getBytesOutputStream();
-
-            _deflateOut = new DeflaterOutputStream(_bodyOut);
-        }
-
-        @Override
-        public void write(int ch)
-                throws IOException {
-            _deflateOut.write(ch);
-        }
-
-        @Override
-        public void write(byte[] buffer, int offset, int length)
-                throws IOException {
-            _deflateOut.write(buffer, offset, length);
-        }
-
-        @Override
-        public void close()
-                throws IOException {
-            Hessian2Output out = _out;
-            _out = null;
-
-            if (out != null) {
-                _deflateOut.close();
-                _bodyOut.close();
-
-                out.writeInt(0);
-
-                out.completeEnvelope();
-
-                out.close();
-            }
-        }
-    }
-
-    static class DeflateInputStream extends InputStream {
-        private Hessian2Input _in;
-
-        private InputStream _bodyIn;
-        private InflaterInputStream _inflateIn;
-
-        DeflateInputStream(Hessian2Input in)
-                throws IOException {
-            _in = in;
-
-            int len = in.readInt();
-
-            if (len != 0)
-                throw new IOException("expected no headers");
-
-            _bodyIn = _in.readInputStream();
-
-            _inflateIn = new InflaterInputStream(_bodyIn);
-        }
-
-        @Override
-        public int read()
-                throws IOException {
-            return _inflateIn.read();
-        }
-
-        @Override
-        public int read(byte[] buffer, int offset, int length)
-                throws IOException {
-            return _inflateIn.read(buffer, offset, length);
-        }
-
-        @Override
-        public void close()
-                throws IOException {
-            Hessian2Input in = _in;
-            _in = null;
-
-            if (in != null) {
-                _inflateIn.close();
-                _bodyIn.close();
-
-                int len = in.readInt();
-
-                if (len != 0)
-                    throw new IOException("Unexpected footer");
-
-                in.completeEnvelope();
-
-                in.close();
-            }
-        }
-    }
-}
diff --git a/hessian-lite/src/main/java/com/alibaba/com/caucho/hessian/io/Deserializer.java b/hessian-lite/src/main/java/com/alibaba/com/caucho/hessian/io/Deserializer.java
deleted file mode 100644
index d8b6824..0000000
--- a/hessian-lite/src/main/java/com/alibaba/com/caucho/hessian/io/Deserializer.java
+++ /dev/null
@@ -1,109 +0,0 @@
-/*
- * Copyright (c) 2001-2004 Caucho Technology, Inc.  All rights reserved.
- *
- * The Apache Software License, Version 1.1
- *
- * 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 acknowlegement:
- *       "This product includes software developed by the
- *        Caucho Technology (http://www.caucho.com/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "Burlap", "Resin", and "Caucho" must not be used to
- *    endorse or promote products derived from this software without prior
- *    written permission. For written permission, please contact
- *    info@caucho.com.
- *
- * 5. Products derived from this software may not be called "Resin"
- *    nor may "Resin" appear in their names without prior written
- *    permission of Caucho Technology.
- *
- * 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 CAUCHO TECHNOLOGY 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.
- *
- * @author Scott Ferguson
- */
-
-package com.alibaba.com.caucho.hessian.io;
-
-import java.io.IOException;
-
-/**
- * Deserializing an object.
- *
- */
-public interface Deserializer {
-    public Class getType();
-
-    public Object readObject(AbstractHessianInput in)
-            throws IOException;
-
-    public Object readList(AbstractHessianInput in, int length)
-            throws IOException;
-
-    /**
-     * deserialize list object from expect type.
-     *
-     * @param in
-     * @param length
-     * @param expectType
-     * @return
-     * @throws IOException
-     */
-    public Object readList(AbstractHessianInput in, int length, Class<?> expectType)
-            throws IOException;
-
-    public Object readLengthList(AbstractHessianInput in, int length)
-            throws IOException;
-
-    /**
-     * deserialize list object from expect type.
-     *
-     * @param in
-     * @param length
-     * @param expectType
-     * @return
-     * @throws IOException
-     */
-    public Object readLengthList(AbstractHessianInput in, int length, Class<?> expectType)
-            throws IOException;
-
-    public Object readMap(AbstractHessianInput in)
-            throws IOException;
-
-    /**
-     *  deserialize map object from expect key and value type.
-     * @param in
-     * @param expectKeyType
-     * @param expectValueType
-     * @return
-     * @throws IOException
-     */
-    public Object readMap(AbstractHessianInput in, Class<?> expectKeyType, Class<?> expectValueType)
-            throws IOException;
-
-    public Object readObject(AbstractHessianInput in, String[] fieldNames)
-            throws IOException;
-}
diff --git a/hessian-lite/src/main/java/com/alibaba/com/caucho/hessian/io/EnumDeserializer.java b/hessian-lite/src/main/java/com/alibaba/com/caucho/hessian/io/EnumDeserializer.java
deleted file mode 100644
index d1876a8..0000000
--- a/hessian-lite/src/main/java/com/alibaba/com/caucho/hessian/io/EnumDeserializer.java
+++ /dev/null
@@ -1,136 +0,0 @@
-/*
- * Copyright (c) 2001-2004 Caucho Technology, Inc.  All rights reserved.
- *
- * The Apache Software License, Version 1.1
- *
- * 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 acknowlegement:
- *       "This product includes software developed by the
- *        Caucho Technology (http://www.caucho.com/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "Hessian", "Resin", and "Caucho" must not be used to
- *    endorse or promote products derived from this software without prior
- *    written permission. For written permission, please contact
- *    info@caucho.com.
- *
- * 5. Products derived from this software may not be called "Resin"
- *    nor may "Resin" appear in their names without prior written
- *    permission of Caucho Technology.
- *
- * 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 CAUCHO TECHNOLOGY 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.
- *
- * @author Scott Ferguson
- */
-
-package com.alibaba.com.caucho.hessian.io;
-
-import java.io.IOException;
-import java.lang.reflect.Method;
-
-/**
- * Deserializing an enum valued object
- */
-public class EnumDeserializer extends AbstractDeserializer {
-    private Class _enumType;
-    private Method _valueOf;
-
-    public EnumDeserializer(Class cl) {
-        // hessian/33b[34], hessian/3bb[78]
-        if (cl.isEnum())
-            _enumType = cl;
-        else if (cl.getSuperclass().isEnum())
-            _enumType = cl.getSuperclass();
-        else
-            throw new RuntimeException("Class " + cl.getName() + " is not an enum");
-
-        try {
-            _valueOf = _enumType.getMethod("valueOf",
-                    new Class[]{Class.class, String.class});
-        } catch (Exception e) {
-            throw new RuntimeException(e);
-        }
-    }
-
-    @Override
-    public Class getType() {
-        return _enumType;
-    }
-
-    @Override
-    public Object readMap(AbstractHessianInput in)
-            throws IOException {
-        String name = null;
-
-        while (!in.isEnd()) {
-            String key = in.readString();
-
-            if (key.equals("name"))
-                name = in.readString();
-            else
-                in.readObject();
-        }
-
-        in.readMapEnd();
-
-        Object obj = create(name);
-
-        in.addRef(obj);
-
-        return obj;
-    }
-
-    @Override
-    public Object readObject(AbstractHessianInput in, String[] fieldNames)
-            throws IOException {
-        String name = null;
-
-        for (int i = 0; i < fieldNames.length; i++) {
-            if ("name".equals(fieldNames[i]))
-                name = in.readString();
-            else
-                in.readObject();
-        }
-
-        Object obj = create(name);
-
-        in.addRef(obj);
-
-        return obj;
-    }
-
-    private Object create(String name)
-            throws IOException {
-        if (name == null)
-            throw new IOException(_enumType.getName() + " expects name.");
-
-        try {
-            return _valueOf.invoke(null, _enumType, name);
-        } catch (Exception e) {
-            throw new IOExceptionWrapper(e);
-        }
-    }
-}
diff --git a/hessian-lite/src/main/java/com/alibaba/com/caucho/hessian/io/EnumSerializer.java b/hessian-lite/src/main/java/com/alibaba/com/caucho/hessian/io/EnumSerializer.java
deleted file mode 100644
index 6ebf138..0000000
--- a/hessian-lite/src/main/java/com/alibaba/com/caucho/hessian/io/EnumSerializer.java
+++ /dev/null
@@ -1,106 +0,0 @@
-/*
- * Copyright (c) 2001-2004 Caucho Technology, Inc.  All rights reserved.
- *
- * The Apache Software License, Version 1.1
- *
- * 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 acknowlegement:
- *       "This product includes software developed by the
- *        Caucho Technology (http://www.caucho.com/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "Burlap", "Resin", and "Caucho" must not be used to
- *    endorse or promote products derived from this software without prior
- *    written permission. For written permission, please contact
- *    info@caucho.com.
- *
- * 5. Products derived from this software may not be called "Resin"
- *    nor may "Resin" appear in their names without prior written
- *    permission of Caucho Technology.
- *
- * 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 CAUCHO TECHNOLOGY 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.
- *
- * @author Scott Ferguson
- */
-
-package com.alibaba.com.caucho.hessian.io;
-
-import java.io.IOException;
-import java.lang.reflect.Method;
-
-/**
- * Serializing an object for known object types.
- */
-public class EnumSerializer extends AbstractSerializer {
-    private Method _name;
-
-    public EnumSerializer(Class cl) {
-        // hessian/32b[12], hessian/3ab[23]
-        if (!cl.isEnum() && cl.getSuperclass().isEnum())
-            cl = cl.getSuperclass();
-
-        try {
-            _name = cl.getMethod("name", new Class[0]);
-        } catch (Exception e) {
-            throw new RuntimeException(e);
-        }
-    }
-
-    @Override
-    public void writeObject(Object obj, AbstractHessianOutput out)
-            throws IOException {
-        if (out.addRef(obj))
-            return;
-
-        Class cl = obj.getClass();
-
-        if (!cl.isEnum() && cl.getSuperclass().isEnum())
-            cl = cl.getSuperclass();
-
-        String name = null;
-        try {
-            name = (String) _name.invoke(obj, (Object[]) null);
-        } catch (Exception e) {
-            throw new RuntimeException(e);
-        }
-
-        int ref = out.writeObjectBegin(cl.getName());
-
-        if (ref < -1) {
-            out.writeString("name");
-            out.writeString(name);
-            out.writeMapEnd();
-        } else {
-            if (ref == -1) {
-                out.writeClassFieldLength(1);
-                out.writeString("name");
-                out.writeObjectBegin(cl.getName());
-            }
-
-            out.writeString(name);
-        }
-    }
-}
diff --git a/hessian-lite/src/main/java/com/alibaba/com/caucho/hessian/io/EnumSetHandler.java b/hessian-lite/src/main/java/com/alibaba/com/caucho/hessian/io/EnumSetHandler.java
deleted file mode 100644
index 3c0a623..0000000
--- a/hessian-lite/src/main/java/com/alibaba/com/caucho/hessian/io/EnumSetHandler.java
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.alibaba.com.caucho.hessian.io;
-
-import java.io.Serializable;
-import java.util.Arrays;
-import java.util.EnumSet;
-
-class EnumSetHandler implements Serializable, HessianHandle {
-    private Class type;
-    private Object[] objects;
-
-    EnumSetHandler(Class type, Object[] objects) {
-        this.type = type;
-        this.objects = objects;
-    }
-
-    @SuppressWarnings("unchecked")
-    private Object readResolve() {
-        EnumSet enumSet = EnumSet.noneOf(type);
-        enumSet.addAll(Arrays.asList(objects));
-        return enumSet;
-    }
-}
diff --git a/hessian-lite/src/main/java/com/alibaba/com/caucho/hessian/io/EnumSetSerializer.java b/hessian-lite/src/main/java/com/alibaba/com/caucho/hessian/io/EnumSetSerializer.java
deleted file mode 100644
index 9fa4535..0000000
--- a/hessian-lite/src/main/java/com/alibaba/com/caucho/hessian/io/EnumSetSerializer.java
+++ /dev/null
@@ -1,48 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.alibaba.com.caucho.hessian.io;
-
-import java.io.IOException;
-import java.lang.reflect.Field;
-import java.util.EnumSet;
-
-public class EnumSetSerializer extends AbstractSerializer {
-    private static EnumSetSerializer SERIALIZER = new EnumSetSerializer();
-
-    public static EnumSetSerializer getInstance() {
-        return SERIALIZER;
-    }
-
-    @Override
-    public void writeObject(Object obj, AbstractHessianOutput out) throws IOException {
-        if (obj == null) {
-            out.writeNull();
-        } else {
-            try {
-                Field field = EnumSet.class.getDeclaredField("elementType");
-                field.setAccessible(true);
-                Class type = (Class) field.get(obj);
-                EnumSet enumSet = (EnumSet) obj;
-                Object[] objects = enumSet.toArray();
-                out.writeObject(new EnumSetHandler(type, objects));
-            } catch (Throwable t) {
-                throw new IOException(t);
-            }
-        }
-    }
-}
diff --git a/hessian-lite/src/main/java/com/alibaba/com/caucho/hessian/io/EnumerationDeserializer.java b/hessian-lite/src/main/java/com/alibaba/com/caucho/hessian/io/EnumerationDeserializer.java
deleted file mode 100644
index b912fa8..0000000
--- a/hessian-lite/src/main/java/com/alibaba/com/caucho/hessian/io/EnumerationDeserializer.java
+++ /dev/null
@@ -1,83 +0,0 @@
-/*
- * Copyright (c) 2001-2004 Caucho Technology, Inc.  All rights reserved.
- *
- * The Apache Software License, Version 1.1
- *
- * 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 acknowlegement:
- *       "This product includes software developed by the
- *        Caucho Technology (http://www.caucho.com/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "Hessian", "Resin", and "Caucho" must not be used to
- *    endorse or promote products derived from this software without prior
- *    written permission. For written permission, please contact
- *    info@caucho.com.
- *
- * 5. Products derived from this software may not be called "Resin"
- *    nor may "Resin" appear in their names without prior written
- *    permission of Caucho Technology.
- *
- * 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 CAUCHO TECHNOLOGY 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.
- *
- * @author Scott Ferguson
- */
-
-package com.alibaba.com.caucho.hessian.io;
-
-import java.io.IOException;
-import java.util.Vector;
-
-/**
- * Deserializing a JDK 1.2 Collection.
- */
-public class EnumerationDeserializer extends AbstractListDeserializer {
-    private static EnumerationDeserializer _deserializer;
-
-    public static EnumerationDeserializer create() {
-        if (_deserializer == null)
-            _deserializer = new EnumerationDeserializer();
-
-        return _deserializer;
-    }
-
-    @Override
-    public Object readList(AbstractHessianInput in, int length)
-            throws IOException {
-        Vector list = new Vector();
-
-        in.addRef(list);
-
-        while (!in.isEnd())
-            list.add(in.readObject());
-
-        in.readEnd();
-
-        return list.elements();
-    }
-}
-
-
diff --git a/hessian-lite/src/main/java/com/alibaba/com/caucho/hessian/io/EnumerationSerializer.java b/hessian-lite/src/main/java/com/alibaba/com/caucho/hessian/io/EnumerationSerializer.java
deleted file mode 100644
index 0665132..0000000
--- a/hessian-lite/src/main/java/com/alibaba/com/caucho/hessian/io/EnumerationSerializer.java
+++ /dev/null
@@ -1,83 +0,0 @@
-/*
- * Copyright (c) 2001-2004 Caucho Technology, Inc.  All rights reserved.
- *
- * The Apache Software License, Version 1.1
- *
- * 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 acknowlegement:
- *       "This product includes software developed by the
- *        Caucho Technology (http://www.caucho.com/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "Hessian", "Resin", and "Caucho" must not be used to
- *    endorse or promote products derived from this software without prior
- *    written permission. For written permission, please contact
- *    info@caucho.com.
- *
- * 5. Products derived from this software may not be called "Resin"
- *    nor may "Resin" appear in their names without prior written
- *    permission of Caucho Technology.
- *
- * 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 CAUCHO TECHNOLOGY 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.
- *
- * @author Scott Ferguson
- */
-
-package com.alibaba.com.caucho.hessian.io;
-
-import java.io.IOException;
-import java.util.Enumeration;
-
-/**
- * Serializing a JDK 1.2 Enumeration.
- */
-public class EnumerationSerializer extends AbstractSerializer {
-    private static EnumerationSerializer _serializer;
-
-    public static EnumerationSerializer create() {
-        if (_serializer == null)
-            _serializer = new EnumerationSerializer();
-
-        return _serializer;
-    }
-
-    @Override
-    public void writeObject(Object obj, AbstractHessianOutput out)
-            throws IOException {
-        Enumeration iter = (Enumeration) obj;
-
-        boolean hasEnd = out.writeListBegin(-1, null);
-
-        while (iter.hasMoreElements()) {
-            Object value = iter.nextElement();
-
-            out.writeObject(value);
-        }
-
-        if (hasEnd)
-            out.writeListEnd();
-    }
-}
diff --git a/hessian-lite/src/main/java/com/alibaba/com/caucho/hessian/io/EnvelopeFactory.java b/hessian-lite/src/main/java/com/alibaba/com/caucho/hessian/io/EnvelopeFactory.java
deleted file mode 100644
index be505fb..0000000
--- a/hessian-lite/src/main/java/com/alibaba/com/caucho/hessian/io/EnvelopeFactory.java
+++ /dev/null
@@ -1,56 +0,0 @@
-/*
- * Copyright (c) 2001-2004 Caucho Technology, Inc.  All rights reserved.
- *
- * The Apache Software License, Version 1.1
- *
- * 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 acknowlegement:
- *       "This product includes software developed by the
- *        Caucho Technology (http://www.caucho.com/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "Hessian", "Resin", and "Caucho" must not be used to
- *    endorse or promote products derived from this software without prior
- *    written permission. For written permission, please contact
- *    info@caucho.com.
- *
- * 5. Products derived from this software may not be called "Resin"
- *    nor may "Resin" appear in their names without prior written
- *    permission of Caucho Technology.
- *
- * 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 CAUCHO TECHNOLOGY 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.
- *
- * @author Scott Ferguson
- */
-
-package com.alibaba.com.caucho.hessian.io;
-
-import java.util.logging.Logger;
-
-public class EnvelopeFactory {
-    private static final Logger log
-            = Logger.getLogger(EnvelopeFactory.class.getName());
-}
diff --git a/hessian-lite/src/main/java/com/alibaba/com/caucho/hessian/io/ExtSerializerFactory.java b/hessian-lite/src/main/java/com/alibaba/com/caucho/hessian/io/ExtSerializerFactory.java
deleted file mode 100644
index 1b11a44..0000000
--- a/hessian-lite/src/main/java/com/alibaba/com/caucho/hessian/io/ExtSerializerFactory.java
+++ /dev/null
@@ -1,103 +0,0 @@
-/*
- * Copyright (c) 2001-2004 Caucho Technology, Inc.  All rights reserved.
- *
- * The Apache Software License, Version 1.1
- *
- * 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 acknowlegement:
- *       "This product includes software developed by the
- *        Caucho Technology (http://www.caucho.com/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "Burlap", "Resin", and "Caucho" must not be used to
- *    endorse or promote products derived from this software without prior
- *    written permission. For written permission, please contact
- *    info@caucho.com.
- *
- * 5. Products derived from this software may not be called "Resin"
- *    nor may "Resin" appear in their names without prior written
- *    permission of Caucho Technology.
- *
- * 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 CAUCHO TECHNOLOGY 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.
- *
- * @author Scott Ferguson
- */
-
-package com.alibaba.com.caucho.hessian.io;
-
-import java.util.HashMap;
-
-/**
- * Factory for returning serialization methods.
- */
-public class ExtSerializerFactory extends AbstractSerializerFactory {
-    private HashMap _serializerMap = new HashMap();
-    private HashMap _deserializerMap = new HashMap();
-
-    /**
-     * Adds a serializer.
-     *
-     * @param cl         the class of the serializer
-     * @param serializer the serializer
-     */
-    public void addSerializer(Class cl, Serializer serializer) {
-        _serializerMap.put(cl, serializer);
-    }
-
-    /**
-     * Adds a deserializer.
-     *
-     * @param cl           the class of the deserializer
-     * @param deserializer the deserializer
-     */
-    public void addDeserializer(Class cl, Deserializer deserializer) {
-        _deserializerMap.put(cl, deserializer);
-    }
-
-    /**
-     * Returns the serializer for a class.
-     *
-     * @param cl the class of the object that needs to be serialized.
-     * @return a serializer object for the serialization.
-     */
-    @Override
-    public Serializer getSerializer(Class cl)
-            throws HessianProtocolException {
-        return (Serializer) _serializerMap.get(cl);
-    }
-
-    /**
-     * Returns the deserializer for a class.
-     *
-     * @param cl the class of the object that needs to be deserialized.
-     * @return a deserializer object for the serialization.
-     */
-    @Override
-    public Deserializer getDeserializer(Class cl)
-            throws HessianProtocolException {
-        return (Deserializer) _deserializerMap.get(cl);
-    }
-}
diff --git a/hessian-lite/src/main/java/com/alibaba/com/caucho/hessian/io/Hessian2Constants.java b/hessian-lite/src/main/java/com/alibaba/com/caucho/hessian/io/Hessian2Constants.java
deleted file mode 100644
index 993b71f..0000000
--- a/hessian-lite/src/main/java/com/alibaba/com/caucho/hessian/io/Hessian2Constants.java
+++ /dev/null
@@ -1,145 +0,0 @@
-/*
- * Copyright (c) 2001-2008 Caucho Technology, Inc.  All rights reserved.
- *
- * The Apache Software License, Version 1.1
- *
- * 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 acknowlegement:
- *       "This product includes software developed by the
- *        Caucho Technology (http://www.caucho.com/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "Burlap", "Resin", and "Caucho" must not be used to
- *    endorse or promote products derived from this software without prior
- *    written permission. For written permission, please contact
- *    info@caucho.com.
- *
- * 5. Products derived from this software may not be called "Resin"
- *    nor may "Resin" appear in their names without prior written
- *    permission of Caucho Technology.
- *
- * 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 CAUCHO TECHNOLOGY 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.
- *
- * @author Scott Ferguson
- */
-
-package com.alibaba.com.caucho.hessian.io;
-
-public interface Hessian2Constants {
-    public static final int BC_BINARY = 'B'; // final chunk
-    public static final int BC_BINARY_CHUNK = 'A'; // non-final chunk
-    public static final int BC_BINARY_DIRECT = 0x20; // 1-byte length binary
-    public static final int BINARY_DIRECT_MAX = 0x0f;
-    public static final int BC_BINARY_SHORT = 0x34; // 2-byte length binary
-    public static final int BINARY_SHORT_MAX = 0x3ff; // 0-1023 binary
-
-    public static final int BC_CLASS_DEF = 'C'; // object/class definition
-
-    public static final int BC_DATE = 0x4a; // 64-bit millisecond UTC date
-    public static final int BC_DATE_MINUTE = 0x4b; // 32-bit minute UTC date
-
-    public static final int BC_DOUBLE = 'D'; // IEEE 64-bit double
-
-    public static final int BC_DOUBLE_ZERO = 0x5b;
-    public static final int BC_DOUBLE_ONE = 0x5c;
-    public static final int BC_DOUBLE_BYTE = 0x5d;
-    public static final int BC_DOUBLE_SHORT = 0x5e;
-    public static final int BC_DOUBLE_MILL = 0x5f;
-
-    public static final int BC_FALSE = 'F'; // boolean false
-
-    public static final int BC_INT = 'I'; // 32-bit int
-
-    public static final int INT_DIRECT_MIN = -0x10;
-    public static final int INT_DIRECT_MAX = 0x2f;
-    public static final int BC_INT_ZERO = 0x90;
-
-    public static final int INT_BYTE_MIN = -0x800;
-    public static final int INT_BYTE_MAX = 0x7ff;
-    public static final int BC_INT_BYTE_ZERO = 0xc8;
-
-    public static final int BC_END = 'Z';
-
-    public static final int INT_SHORT_MIN = -0x40000;
-    public static final int INT_SHORT_MAX = 0x3ffff;
-    public static final int BC_INT_SHORT_ZERO = 0xd4;
-
-    public static final int BC_LIST_VARIABLE = 0x55;
-    public static final int BC_LIST_FIXED = 'V';
-    public static final int BC_LIST_VARIABLE_UNTYPED = 0x57;
-    public static final int BC_LIST_FIXED_UNTYPED = 0x58;
-
-    public static final int BC_LIST_DIRECT = 0x70;
-    public static final int BC_LIST_DIRECT_UNTYPED = 0x78;
-    public static final int LIST_DIRECT_MAX = 0x7;
-
-    public static final int BC_LONG = 'L'; // 64-bit signed integer
-    public static final long LONG_DIRECT_MIN = -0x08;
-    public static final long LONG_DIRECT_MAX = 0x0f;
-    public static final int BC_LONG_ZERO = 0xe0;
-
-    public static final long LONG_BYTE_MIN = -0x800;
-    public static final long LONG_BYTE_MAX = 0x7ff;
-    public static final int BC_LONG_BYTE_ZERO = 0xf8;
-
-    public static final int LONG_SHORT_MIN = -0x40000;
-    public static final int LONG_SHORT_MAX = 0x3ffff;
-    public static final int BC_LONG_SHORT_ZERO = 0x3c;
-
-    public static final int BC_LONG_INT = 0x59;
-
-    public static final int BC_MAP = 'M';
-    public static final int BC_MAP_UNTYPED = 'H';
-
-    public static final int BC_NULL = 'N';
-
-    public static final int BC_OBJECT = 'O';
-    public static final int BC_OBJECT_DEF = 'C';
-
-    public static final int BC_OBJECT_DIRECT = 0x60;
-    public static final int OBJECT_DIRECT_MAX = 0x0f;
-
-    public static final int BC_REF = 0x51;
-
-    public static final int BC_STRING = 'S'; // final string
-    public static final int BC_STRING_CHUNK = 'R'; // non-final string
-
-    public static final int BC_STRING_DIRECT = 0x00;
-    public static final int STRING_DIRECT_MAX = 0x1f;
-    public static final int BC_STRING_SHORT = 0x30;
-    public static final int STRING_SHORT_MAX = 0x3ff;
-
-    public static final int BC_TRUE = 'T';
-
-    public static final int P_PACKET_CHUNK = 0x4f;
-    public static final int P_PACKET = 'P';
-
-    public static final int P_PACKET_DIRECT = 0x80;
-    public static final int PACKET_DIRECT_MAX = 0x7f;
-
-    public static final int P_PACKET_SHORT = 0x70;
-    public static final int PACKET_SHORT_MAX = 0xfff;
-}
diff --git a/hessian-lite/src/main/java/com/alibaba/com/caucho/hessian/io/Hessian2Input.java b/hessian-lite/src/main/java/com/alibaba/com/caucho/hessian/io/Hessian2Input.java
deleted file mode 100644
index 8d6d7d7..0000000
--- a/hessian-lite/src/main/java/com/alibaba/com/caucho/hessian/io/Hessian2Input.java
+++ /dev/null
@@ -1,3615 +0,0 @@
-/*
- * Copyright (c) 2001-2008 Caucho Technology, Inc.  All rights reserved.
- *
- * The Apache Software License, Version 1.1
- *
- * 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 acknowlegement:
- *       "This product includes software developed by the
- *        Caucho Technology (http://www.caucho.com/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "Hessian", "Resin", and "Caucho" must not be used to
- *    endorse or promote products derived from this software without prior
- *    written permission. For written permission, please contact
- *    info@caucho.com.
- *
- * 5. Products derived from this software may not be called "Resin"
- *    nor may "Resin" appear in their names without prior written
- *    permission of Caucho Technology.
- *
- * 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 CAUCHO TECHNOLOGY 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.
- *
- * @author Scott Ferguson
- */
-
-package com.alibaba.com.caucho.hessian.io;
-
-import java.io.ByteArrayOutputStream;
-import java.io.EOFException;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.Reader;
-import java.lang.reflect.Field;
-import java.util.ArrayList;
-import java.util.Date;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.logging.Level;
-import java.util.logging.Logger;
-
-/**
- * Input stream for Hessian requests.
- * <p>
- * <p>HessianInput is unbuffered, so any client needs to provide
- * its own buffering.
- * <p>
- * <pre>
- * InputStream is = ...; // from http connection
- * HessianInput in = new HessianInput(is);
- * String value;
- *
- * in.startReply();         // read reply header
- * value = in.readString(); // read string value
- * in.completeReply();      // read reply footer
- * </pre>
- */
-public class Hessian2Input
-        extends AbstractHessianInput
-        implements Hessian2Constants {
-    private static final Logger log
-            = Logger.getLogger(Hessian2Input.class.getName());
-
-    private static final double D_256 = 1.0 / 256.0;
-    private static final int END_OF_DATA = -2;
-    private static final int SIZE = 256;
-    private static final int GAP = 16;
-    private static Field _detailMessageField;
-    private static boolean _isCloseStreamOnClose;
-
-    static {
-        try {
-            _detailMessageField = Throwable.class.getDeclaredField("detailMessage");
-            _detailMessageField.setAccessible(true);
-        } catch (Throwable e) {
-        }
-    }
-
-    private final byte[] _buffer = new byte[SIZE];
-    // factory for deserializing objects in the input stream
-    protected SerializerFactory _serializerFactory;
-    protected ArrayList _refs;
-    protected ArrayList _classDefs;
-    protected ArrayList _types;
-    // the underlying input stream
-    private InputStream _is;
-    // a peek character
-    private int _offset;
-    private int _length;
-    // true for streaming data
-    private boolean _isStreaming;
-    // the method for a call
-    private String _method;
-    private int _argLength;
-    private Reader _chunkReader;
-    private InputStream _chunkInputStream;
-    private Throwable _replyFault;
-    private StringBuilder _sbuf = new StringBuilder();
-    // true if this is the last chunk
-    private boolean _isLastChunk;
-    // the chunk length
-    private int _chunkLength;
-
-    /**
-     * Creates a new Hessian input stream, initialized with an
-     * underlying input stream.
-     *
-     * @param is the underlying input stream.
-     */
-    public Hessian2Input(InputStream is) {
-        _is = is;
-    }
-
-    /**
-     * Gets the serializer factory.
-     */
-    public SerializerFactory getSerializerFactory() {
-        return _serializerFactory;
-    }
-
-    /**
-     * Sets the serializer factory.
-     */
-    @Override
-    public void setSerializerFactory(SerializerFactory factory) {
-        _serializerFactory = factory;
-    }
-
-    /**
-     * Gets the serializer factory, creating a default if necessary.
-     */
-    public final SerializerFactory findSerializerFactory() {
-        SerializerFactory factory = _serializerFactory;
-
-        if (factory == null)
-            _serializerFactory = factory = new SerializerFactory();
-
-        return factory;
-    }
-
-    public boolean isCloseStreamOnClose() {
-        return _isCloseStreamOnClose;
-    }
-
-    public void setCloseStreamOnClose(boolean isClose) {
-        _isCloseStreamOnClose = isClose;
-    }
-
-    /**
-     * Returns the calls method
-     */
-    @Override
-    public String getMethod() {
-        return _method;
-    }
-
-    /**
-     * Returns any reply fault.
-     */
-    public Throwable getReplyFault() {
-        return _replyFault;
-    }
-
-    /**
-     * Starts reading the call
-     * <p>
-     * <pre>
-     * c major minor
-     * </pre>
-     */
-    @Override
-    public int readCall()
-            throws IOException {
-        int tag = read();
-
-        if (tag != 'C')
-            throw error("expected hessian call ('C') at " + codeName(tag));
-
-        return 0;
-    }
-
-    /**
-     * Starts reading the envelope
-     * <p>
-     * <pre>
-     * E major minor
-     * </pre>
-     */
-    public int readEnvelope()
-            throws IOException {
-        int tag = read();
-        int version = 0;
-
-        if (tag == 'H') {
-            int major = read();
-            int minor = read();
-
-            version = (major << 16) + minor;
-
-            tag = read();
-        }
-
-        if (tag != 'E')
-            throw error("expected hessian Envelope ('E') at " + codeName(tag));
-
-        return version;
-    }
-
-    /**
-     * Completes reading the envelope
-     * <p>
-     * <p>A successful completion will have a single value:
-     * <p>
-     * <pre>
-     * Z
-     * </pre>
-     */
-    public void completeEnvelope()
-            throws IOException {
-        int tag = read();
-
-        if (tag != 'Z')
-            error("expected end of envelope at " + codeName(tag));
-    }
-
-    /**
-     * Starts reading the call
-     * <p>
-     * <p>A successful completion will have a single value:
-     * <p>
-     * <pre>
-     * string
-     * </pre>
-     */
-    @Override
-    public String readMethod()
-            throws IOException {
-        _method = readString();
-
-        return _method;
-    }
-
-    /**
-     * Returns the number of method arguments
-     * <p>
-     * <pre>
-     * int
-     * </pre>
-     */
-    @Override
-    public int readMethodArgLength()
-            throws IOException {
-        return readInt();
-    }
-
-    /**
-     * Starts reading the call, including the headers.
-     * <p>
-     * <p>The call expects the following protocol data
-     * <p>
-     * <pre>
-     * c major minor
-     * m b16 b8 method
-     * </pre>
-     */
-    @Override
-    public void startCall()
-            throws IOException {
-        readCall();
-
-        readMethod();
-    }
-
-    /**
-     * Completes reading the call
-     * <p>
-     * <p>A successful completion will have a single value:
-     * <p>
-     * <pre>
-     * </pre>
-     */
-    @Override
-    public void completeCall()
-            throws IOException {
-    }
-
-    /**
-     * Reads a reply as an object.
-     * If the reply has a fault, throws the exception.
-     */
-    @Override
-    public Object readReply(Class expectedClass)
-            throws Throwable {
-        int tag = read();
-
-        if (tag == 'R')
-            return readObject(expectedClass);
-        else if (tag == 'F') {
-            HashMap map = (HashMap) readObject(HashMap.class);
-
-            throw prepareFault(map);
-        } else {
-            StringBuilder sb = new StringBuilder();
-            sb.append((char) tag);
-
-            try {
-                int ch;
-
-                while ((ch = read()) >= 0) {
-                    sb.append((char) ch);
-                }
-            } catch (IOException e) {
-                log.log(Level.FINE, e.toString(), e);
-            }
-
-            throw error("expected hessian reply at " + codeName(tag) + "\n"
-                    + sb);
-        }
-    }
-
-    /**
-     * Starts reading the reply
-     * <p>
-     * <p>A successful completion will have a single value:
-     * <p>
-     * <pre>
-     * r
-     * </pre>
-     */
-    @Override
-    public void startReply()
-            throws Throwable {
-        // XXX: for variable length (?)
-
-        readReply(Object.class);
-    }
-
-    /**
-     * Prepares the fault.
-     */
-    private Throwable prepareFault(HashMap fault)
-            throws IOException {
-        Object detail = fault.get("detail");
-        String message = (String) fault.get("message");
-
-        if (detail instanceof Throwable) {
-            _replyFault = (Throwable) detail;
-
-            if (message != null && _detailMessageField != null) {
-                try {
-                    _detailMessageField.set(_replyFault, message);
-                } catch (Throwable e) {
-                }
-            }
-
-            return _replyFault;
-        } else {
-            String code = (String) fault.get("code");
-
-            _replyFault = new HessianServiceException(message, code, detail);
-
-            return _replyFault;
-        }
-    }
-
-    /**
-     * Completes reading the call
-     * <p>
-     * <p>A successful completion will have a single value:
-     * <p>
-     * <pre>
-     * z
-     * </pre>
-     */
-    @Override
-    public void completeReply()
-            throws IOException {
-    }
-
-    /**
-     * Completes reading the call
-     * <p>
-     * <p>A successful completion will have a single value:
-     * <p>
-     * <pre>
-     * z
-     * </pre>
-     */
-    public void completeValueReply()
-            throws IOException {
-        int tag = read();
-
-        if (tag != 'Z')
-            error("expected end of reply at " + codeName(tag));
-    }
-
-    /**
-     * Reads a header, returning null if there are no headers.
-     * <p>
-     * <pre>
-     * H b16 b8 value
-     * </pre>
-     */
-    @Override
-    public String readHeader()
-            throws IOException {
-        return null;
-    }
-
-    /**
-     * Starts reading the message
-     * <p>
-     * <pre>
-     * p major minor
-     * </pre>
-     */
-    public int startMessage()
-            throws IOException {
-        int tag = read();
-
-        if (tag == 'p')
-            _isStreaming = false;
-        else if (tag == 'P')
-            _isStreaming = true;
-        else
-            throw error("expected Hessian message ('p') at " + codeName(tag));
-
-        int major = read();
-        int minor = read();
-
-        return (major << 16) + minor;
-    }
-
-    /**
-     * Completes reading the message
-     * <p>
-     * <p>A successful completion will have a single value:
-     * <p>
-     * <pre>
-     * z
-     * </pre>
-     */
-    public void completeMessage()
-            throws IOException {
-        int tag = read();
-
-        if (tag != 'Z')
-            error("expected end of message at " + codeName(tag));
-    }
-
-    /**
-     * Reads a null
-     * <p>
-     * <pre>
-     * N
-     * </pre>
-     */
-    @Override
-    public void readNull()
-            throws IOException {
-        int tag = read();
-
-        switch (tag) {
-            case 'N':
-                return;
-
-            default:
-                throw expect("null", tag);
-        }
-    }
-
-    /**
-     * Reads a boolean
-     * <p>
-     * <pre>
-     * T
-     * F
-     * </pre>
-     */
-    @Override
-    public boolean readBoolean()
-            throws IOException {
-        int tag = _offset < _length ? (_buffer[_offset++] & 0xff) : read();
-
-        switch (tag) {
-            case 'T':
-                return true;
-            case 'F':
-                return false;
-
-            // direct integer
-            case 0x80:
-            case 0x81:
-            case 0x82:
-            case 0x83:
-            case 0x84:
-            case 0x85:
-            case 0x86:
-            case 0x87:
-            case 0x88:
-            case 0x89:
-            case 0x8a:
-            case 0x8b:
-            case 0x8c:
-            case 0x8d:
-            case 0x8e:
-            case 0x8f:
-
-            case 0x90:
-            case 0x91:
-            case 0x92:
-            case 0x93:
-            case 0x94:
-            case 0x95:
-            case 0x96:
-            case 0x97:
-            case 0x98:
-            case 0x99:
-            case 0x9a:
-            case 0x9b:
-            case 0x9c:
-            case 0x9d:
-            case 0x9e:
-            case 0x9f:
-
-            case 0xa0:
-            case 0xa1:
-            case 0xa2:
-            case 0xa3:
-            case 0xa4:
-            case 0xa5:
-            case 0xa6:
-            case 0xa7:
-            case 0xa8:
-            case 0xa9:
-            case 0xaa:
-            case 0xab:
-            case 0xac:
-            case 0xad:
-            case 0xae:
-            case 0xaf:
-
-            case 0xb0:
-            case 0xb1:
-            case 0xb2:
-            case 0xb3:
-            case 0xb4:
-            case 0xb5:
-            case 0xb6:
-            case 0xb7:
-            case 0xb8:
-            case 0xb9:
-            case 0xba:
-            case 0xbb:
-            case 0xbc:
-            case 0xbd:
-            case 0xbe:
-            case 0xbf:
-                return tag != BC_INT_ZERO;
-
-            // INT_BYTE = 0
-            case 0xc8:
-                return read() != 0;
-
-            // INT_BYTE != 0
-            case 0xc0:
-            case 0xc1:
-            case 0xc2:
-            case 0xc3:
-            case 0xc4:
-            case 0xc5:
-            case 0xc6:
-            case 0xc7:
-            case 0xc9:
-            case 0xca:
-            case 0xcb:
-            case 0xcc:
-            case 0xcd:
-            case 0xce:
-            case 0xcf:
-                read();
-                return true;
-
-            // INT_SHORT = 0
-            case 0xd4:
-                return (256 * read() + read()) != 0;
-
-            // INT_SHORT != 0
-            case 0xd0:
-            case 0xd1:
-            case 0xd2:
-            case 0xd3:
-            case 0xd5:
-            case 0xd6:
-            case 0xd7:
-                read();
-                read();
-                return true;
-
-            case 'I':
-                return
-                        parseInt() != 0;
-
-            case 0xd8:
-            case 0xd9:
-            case 0xda:
-            case 0xdb:
-            case 0xdc:
-            case 0xdd:
-            case 0xde:
-            case 0xdf:
-
-            case 0xe0:
-            case 0xe1:
-            case 0xe2:
-            case 0xe3:
-            case 0xe4:
-            case 0xe5:
-            case 0xe6:
-            case 0xe7:
-            case 0xe8:
-            case 0xe9:
-            case 0xea:
-            case 0xeb:
-            case 0xec:
-            case 0xed:
-            case 0xee:
-            case 0xef:
-                return tag != BC_LONG_ZERO;
-
-            // LONG_BYTE = 0
-            case 0xf8:
-                return read() != 0;
-
-            // LONG_BYTE != 0
-            case 0xf0:
-            case 0xf1:
-            case 0xf2:
-            case 0xf3:
-            case 0xf4:
-            case 0xf5:
-            case 0xf6:
-            case 0xf7:
-            case 0xf9:
-            case 0xfa:
-            case 0xfb:
-            case 0xfc:
-            case 0xfd:
-            case 0xfe:
-            case 0xff:
-                read();
-                return true;
-
-            // INT_SHORT = 0
-            case 0x3c:
-                return (256 * read() + read()) != 0;
-
-            // INT_SHORT != 0
-            case 0x38:
-            case 0x39:
-            case 0x3a:
-            case 0x3b:
-            case 0x3d:
-            case 0x3e:
-            case 0x3f:
-                read();
-                read();
-                return true;
-
-            case BC_LONG_INT:
-                return (0x1000000L * read()
-                        + 0x10000L * read()
-                        + 0x100 * read()
-                        + read()) != 0;
-
-            case 'L':
-                return parseLong() != 0;
-
-            case BC_DOUBLE_ZERO:
-                return false;
-
-            case BC_DOUBLE_ONE:
-                return true;
-
-            case BC_DOUBLE_BYTE:
-                return read() != 0;
-
-            case BC_DOUBLE_SHORT:
-                return (0x100 * read() + read()) != 0;
-
-            case BC_DOUBLE_MILL: {
-                int mills = parseInt();
-
-                return mills != 0;
-            }
-
-            case 'D':
-                return parseDouble() != 0.0;
-
-            case 'N':
-                return false;
-
-            default:
-                throw expect("boolean", tag);
-        }
-    }
-
-    /**
-     * Reads a short
-     * <p>
-     * <pre>
-     * I b32 b24 b16 b8
-     * </pre>
-     */
-    public short readShort()
-            throws IOException {
-        return (short) readInt();
-    }
-
-    /**
-     * Reads an integer
-     * <p>
-     * <pre>
-     * I b32 b24 b16 b8
-     * </pre>
-     */
-    @Override
-    public final int readInt()
-            throws IOException {
-        //int tag = _offset < _length ? (_buffer[_offset++] & 0xff) : read();
-        int tag = read();
-
-        switch (tag) {
-            case 'N':
-                return 0;
-
-            case 'F':
-                return 0;
-
-            case 'T':
-                return 1;
-
-            // direct integer
-            case 0x80:
-            case 0x81:
-            case 0x82:
-            case 0x83:
-            case 0x84:
-            case 0x85:
-            case 0x86:
-            case 0x87:
-            case 0x88:
-            case 0x89:
-            case 0x8a:
-            case 0x8b:
-            case 0x8c:
-            case 0x8d:
-            case 0x8e:
-            case 0x8f:
-
-            case 0x90:
-            case 0x91:
-            case 0x92:
-            case 0x93:
-            case 0x94:
-            case 0x95:
-            case 0x96:
-            case 0x97:
-            case 0x98:
-            case 0x99:
-            case 0x9a:
-            case 0x9b:
-            case 0x9c:
-            case 0x9d:
-            case 0x9e:
-            case 0x9f:
-
-            case 0xa0:
-            case 0xa1:
-            case 0xa2:
-            case 0xa3:
-            case 0xa4:
-            case 0xa5:
-            case 0xa6:
-            case 0xa7:
-            case 0xa8:
-            case 0xa9:
-            case 0xaa:
-            case 0xab:
-            case 0xac:
-            case 0xad:
-            case 0xae:
-            case 0xaf:
-
-            case 0xb0:
-            case 0xb1:
-            case 0xb2:
-            case 0xb3:
-            case 0xb4:
-            case 0xb5:
-            case 0xb6:
-            case 0xb7:
-            case 0xb8:
-            case 0xb9:
-            case 0xba:
-            case 0xbb:
-            case 0xbc:
-            case 0xbd:
-            case 0xbe:
-            case 0xbf:
-                return tag - BC_INT_ZERO;
-
-      /* byte int */
-            case 0xc0:
-            case 0xc1:
-            case 0xc2:
-            case 0xc3:
-            case 0xc4:
-            case 0xc5:
-            case 0xc6:
-            case 0xc7:
-            case 0xc8:
-            case 0xc9:
-            case 0xca:
-            case 0xcb:
-            case 0xcc:
-            case 0xcd:
-            case 0xce:
-            case 0xcf:
-                return ((tag - BC_INT_BYTE_ZERO) << 8) + read();
-
-      /* short int */
-            case 0xd0:
-            case 0xd1:
-            case 0xd2:
-            case 0xd3:
-            case 0xd4:
-            case 0xd5:
-            case 0xd6:
-            case 0xd7:
-                return ((tag - BC_INT_SHORT_ZERO) << 16) + 256 * read() + read();
-
-            case 'I':
-            case BC_LONG_INT:
-                return ((read() << 24)
-                        + (read() << 16)
-                        + (read() << 8)
-                        + read());
-
-            // direct long
-            case 0xd8:
-            case 0xd9:
-            case 0xda:
-            case 0xdb:
-            case 0xdc:
-            case 0xdd:
-            case 0xde:
-            case 0xdf:
-
-            case 0xe0:
-            case 0xe1:
-            case 0xe2:
-            case 0xe3:
-            case 0xe4:
-            case 0xe5:
-            case 0xe6:
-            case 0xe7:
-            case 0xe8:
-            case 0xe9:
-            case 0xea:
-            case 0xeb:
-            case 0xec:
-            case 0xed:
-            case 0xee:
-            case 0xef:
-                return tag - BC_LONG_ZERO;
-
-      /* byte long */
-            case 0xf0:
-            case 0xf1:
-            case 0xf2:
-            case 0xf3:
-            case 0xf4:
-            case 0xf5:
-            case 0xf6:
-            case 0xf7:
-            case 0xf8:
-            case 0xf9:
-            case 0xfa:
-            case 0xfb:
-            case 0xfc:
-            case 0xfd:
-            case 0xfe:
-            case 0xff:
-                return ((tag - BC_LONG_BYTE_ZERO) << 8) + read();
-
-      /* short long */
-            case 0x38:
-            case 0x39:
-            case 0x3a:
-            case 0x3b:
-            case 0x3c:
-            case 0x3d:
-            case 0x3e:
-            case 0x3f:
-                return ((tag - BC_LONG_SHORT_ZERO) << 16) + 256 * read() + read();
-
-            case 'L':
-                return (int) parseLong();
-
-            case BC_DOUBLE_ZERO:
-                return 0;
-
-            case BC_DOUBLE_ONE:
-                return 1;
-
-            //case LONG_BYTE:
-            case BC_DOUBLE_BYTE:
-                return (byte) (_offset < _length ? _buffer[_offset++] : read());
-
-            //case INT_SHORT:
-            //case LONG_SHORT:
-            case BC_DOUBLE_SHORT:
-                return (short) (256 * read() + read());
-
-            case BC_DOUBLE_MILL: {
-                int mills = parseInt();
-
-                return (int) (0.001 * mills);
-            }
-
-            case 'D':
-                return (int) parseDouble();
-
-            default:
-                throw expect("integer", tag);
-        }
-    }
-
-    /**
-     * Reads a long
-     * <p>
-     * <pre>
-     * L b64 b56 b48 b40 b32 b24 b16 b8
-     * </pre>
-     */
-    @Override
-    public long readLong()
-            throws IOException {
-        int tag = read();
-
-        switch (tag) {
-            case 'N':
-                return 0;
-
-            case 'F':
-                return 0;
-
-            case 'T':
-                return 1;
-
-            // direct integer
-            case 0x80:
-            case 0x81:
-            case 0x82:
-            case 0x83:
-            case 0x84:
-            case 0x85:
-            case 0x86:
-            case 0x87:
-            case 0x88:
-            case 0x89:
-            case 0x8a:
-            case 0x8b:
-            case 0x8c:
-            case 0x8d:
-            case 0x8e:
-            case 0x8f:
-
-            case 0x90:
-            case 0x91:
-            case 0x92:
-            case 0x93:
-            case 0x94:
-            case 0x95:
-            case 0x96:
-            case 0x97:
-            case 0x98:
-            case 0x99:
-            case 0x9a:
-            case 0x9b:
-            case 0x9c:
-            case 0x9d:
-            case 0x9e:
-            case 0x9f:
-
-            case 0xa0:
-            case 0xa1:
-            case 0xa2:
-            case 0xa3:
-            case 0xa4:
-            case 0xa5:
-            case 0xa6:
-            case 0xa7:
-            case 0xa8:
-            case 0xa9:
-            case 0xaa:
-            case 0xab:
-            case 0xac:
-            case 0xad:
-            case 0xae:
-            case 0xaf:
-
-            case 0xb0:
-            case 0xb1:
-            case 0xb2:
-            case 0xb3:
-            case 0xb4:
-            case 0xb5:
-            case 0xb6:
-            case 0xb7:
-            case 0xb8:
-            case 0xb9:
-            case 0xba:
-            case 0xbb:
-            case 0xbc:
-            case 0xbd:
-            case 0xbe:
-            case 0xbf:
-                return tag - BC_INT_ZERO;
-
-      /* byte int */
-            case 0xc0:
-            case 0xc1:
-            case 0xc2:
-            case 0xc3:
-            case 0xc4:
-            case 0xc5:
-            case 0xc6:
-            case 0xc7:
-            case 0xc8:
-            case 0xc9:
-            case 0xca:
-            case 0xcb:
-            case 0xcc:
-            case 0xcd:
-            case 0xce:
-            case 0xcf:
-                return ((tag - BC_INT_BYTE_ZERO) << 8) + read();
-
-      /* short int */
-            case 0xd0:
-            case 0xd1:
-            case 0xd2:
-            case 0xd3:
-            case 0xd4:
-            case 0xd5:
-            case 0xd6:
-            case 0xd7:
-                return ((tag - BC_INT_SHORT_ZERO) << 16) + 256 * read() + read();
-
-            //case LONG_BYTE:
-            case BC_DOUBLE_BYTE:
-                return (byte) (_offset < _length ? _buffer[_offset++] : read());
-
-            //case INT_SHORT:
-            //case LONG_SHORT:
-            case BC_DOUBLE_SHORT:
-                return (short) (256 * read() + read());
-
-            case 'I':
-            case BC_LONG_INT:
-                return parseInt();
-
-            // direct long
-            case 0xd8:
-            case 0xd9:
-            case 0xda:
-            case 0xdb:
-            case 0xdc:
-            case 0xdd:
-            case 0xde:
-            case 0xdf:
-
-            case 0xe0:
-            case 0xe1:
-            case 0xe2:
-            case 0xe3:
-            case 0xe4:
-            case 0xe5:
-            case 0xe6:
-            case 0xe7:
-            case 0xe8:
-            case 0xe9:
-            case 0xea:
-            case 0xeb:
-            case 0xec:
-            case 0xed:
-            case 0xee:
-            case 0xef:
-                return tag - BC_LONG_ZERO;
-
-      /* byte long */
-            case 0xf0:
-            case 0xf1:
-            case 0xf2:
-            case 0xf3:
-            case 0xf4:
-            case 0xf5:
-            case 0xf6:
-            case 0xf7:
-            case 0xf8:
-            case 0xf9:
-            case 0xfa:
-            case 0xfb:
-            case 0xfc:
-            case 0xfd:
-            case 0xfe:
-            case 0xff:
-                return ((tag - BC_LONG_BYTE_ZERO) << 8) + read();
-
-      /* short long */
-            case 0x38:
-            case 0x39:
-            case 0x3a:
-            case 0x3b:
-            case 0x3c:
-            case 0x3d:
-            case 0x3e:
-            case 0x3f:
-                return ((tag - BC_LONG_SHORT_ZERO) << 16) + 256 * read() + read();
-
-            case 'L':
-                return parseLong();
-
-            case BC_DOUBLE_ZERO:
-                return 0;
-
-            case BC_DOUBLE_ONE:
-                return 1;
-
-            case BC_DOUBLE_MILL: {
-                int mills = parseInt();
-
-                return (long) (0.001 * mills);
-            }
-
-            case 'D':
-                return (long) parseDouble();
-
-            default:
-                throw expect("long", tag);
-        }
-    }
-
-    /**
-     * Reads a float
-     * <p>
-     * <pre>
-     * D b64 b56 b48 b40 b32 b24 b16 b8
-     * </pre>
-     */
-    public float readFloat()
-            throws IOException {
-        return (float) readDouble();
-    }
-
-    /**
-     * Reads a double
-     * <p>
-     * <pre>
-     * D b64 b56 b48 b40 b32 b24 b16 b8
-     * </pre>
-     */
-    @Override
-    public double readDouble()
-            throws IOException {
-        int tag = read();
-
-        switch (tag) {
-            case 'N':
-                return 0;
-
-            case 'F':
-                return 0;
-
-            case 'T':
-                return 1;
-
-            // direct integer
-            case 0x80:
-            case 0x81:
-            case 0x82:
-            case 0x83:
-            case 0x84:
-            case 0x85:
-            case 0x86:
-            case 0x87:
-            case 0x88:
-            case 0x89:
-            case 0x8a:
-            case 0x8b:
-            case 0x8c:
-            case 0x8d:
-            case 0x8e:
-            case 0x8f:
-
-            case 0x90:
-            case 0x91:
-            case 0x92:
-            case 0x93:
-            case 0x94:
-            case 0x95:
-            case 0x96:
-            case 0x97:
-            case 0x98:
-            case 0x99:
-            case 0x9a:
-            case 0x9b:
-            case 0x9c:
-            case 0x9d:
-            case 0x9e:
-            case 0x9f:
-
-            case 0xa0:
-            case 0xa1:
-            case 0xa2:
-            case 0xa3:
-            case 0xa4:
-            case 0xa5:
-            case 0xa6:
-            case 0xa7:
-            case 0xa8:
-            case 0xa9:
-            case 0xaa:
-            case 0xab:
-            case 0xac:
-            case 0xad:
-            case 0xae:
-            case 0xaf:
-
-            case 0xb0:
-            case 0xb1:
-            case 0xb2:
-            case 0xb3:
-            case 0xb4:
-            case 0xb5:
-            case 0xb6:
-            case 0xb7:
-            case 0xb8:
-            case 0xb9:
-            case 0xba:
-            case 0xbb:
-            case 0xbc:
-            case 0xbd:
-            case 0xbe:
-            case 0xbf:
-                return tag - 0x90;
-
-      /* byte int */
-            case 0xc0:
-            case 0xc1:
-            case 0xc2:
-            case 0xc3:
-            case 0xc4:
-            case 0xc5:
-            case 0xc6:
-            case 0xc7:
-            case 0xc8:
-            case 0xc9:
-            case 0xca:
-            case 0xcb:
-            case 0xcc:
-            case 0xcd:
-            case 0xce:
-            case 0xcf:
-                return ((tag - BC_INT_BYTE_ZERO) << 8) + read();
-
-      /* short int */
-            case 0xd0:
-            case 0xd1:
-            case 0xd2:
-            case 0xd3:
-            case 0xd4:
-            case 0xd5:
-            case 0xd6:
-            case 0xd7:
-                return ((tag - BC_INT_SHORT_ZERO) << 16) + 256 * read() + read();
-
-            case 'I':
-            case BC_LONG_INT:
-                return parseInt();
-
-            // direct long
-            case 0xd8:
-            case 0xd9:
-            case 0xda:
-            case 0xdb:
-            case 0xdc:
-            case 0xdd:
-            case 0xde:
-            case 0xdf:
-
-            case 0xe0:
-            case 0xe1:
-            case 0xe2:
-            case 0xe3:
-            case 0xe4:
-            case 0xe5:
-            case 0xe6:
-            case 0xe7:
-            case 0xe8:
-            case 0xe9:
-            case 0xea:
-            case 0xeb:
-            case 0xec:
-            case 0xed:
-            case 0xee:
-            case 0xef:
-                return tag - BC_LONG_ZERO;
-
-      /* byte long */
-            case 0xf0:
-            case 0xf1:
-            case 0xf2:
-            case 0xf3:
-            case 0xf4:
-            case 0xf5:
-            case 0xf6:
-            case 0xf7:
-            case 0xf8:
-            case 0xf9:
-            case 0xfa:
-            case 0xfb:
-            case 0xfc:
-            case 0xfd:
-            case 0xfe:
-            case 0xff:
-                return ((tag - BC_LONG_BYTE_ZERO) << 8) + read();
-
-      /* short long */
-            case 0x38:
-            case 0x39:
-            case 0x3a:
-            case 0x3b:
-            case 0x3c:
-            case 0x3d:
-            case 0x3e:
-            case 0x3f:
-                return ((tag - BC_LONG_SHORT_ZERO) << 16) + 256 * read() + read();
-
-            case 'L':
-                return (double) parseLong();
-
-            case BC_DOUBLE_ZERO:
-                return 0;
-
-            case BC_DOUBLE_ONE:
-                return 1;
-
-            case BC_DOUBLE_BYTE:
-                return (byte) (_offset < _length ? _buffer[_offset++] : read());
-
-            case BC_DOUBLE_SHORT:
-                return (short) (256 * read() + read());
-
-            case BC_DOUBLE_MILL: {
-                int mills = parseInt();
-
-                return 0.001 * mills;
-            }
-
-            case 'D':
-                return parseDouble();
-
-            default:
-                throw expect("double", tag);
-        }
-    }
-
-    /**
-     * Reads a date.
-     * <p>
-     * <pre>
-     * T b64 b56 b48 b40 b32 b24 b16 b8
-     * </pre>
-     */
-    @Override
-    public long readUTCDate()
-            throws IOException {
-        int tag = read();
-
-        if (tag == BC_DATE) {
-            return parseLong();
-        } else if (tag == BC_DATE_MINUTE) {
-            return parseInt() * 60000L;
-        } else
-            throw expect("date", tag);
-    }
-
-    /**
-     * Reads a byte from the stream.
-     */
-    public int readChar()
-            throws IOException {
-        if (_chunkLength > 0) {
-            _chunkLength--;
-            if (_chunkLength == 0 && _isLastChunk)
-                _chunkLength = END_OF_DATA;
-
-            int ch = parseUTF8Char();
-            return ch;
-        } else if (_chunkLength == END_OF_DATA) {
-            _chunkLength = 0;
-            return -1;
-        }
-
-        int tag = read();
-
-        switch (tag) {
-            case 'N':
-                return -1;
-
-            case 'S':
-            case BC_STRING_CHUNK:
-                _isLastChunk = tag == 'S';
-                _chunkLength = (read() << 8) + read();
-
-                _chunkLength--;
-                int value = parseUTF8Char();
-
-                // special code so successive read byte won't
-                // be read as a single object.
-                if (_chunkLength == 0 && _isLastChunk)
-                    _chunkLength = END_OF_DATA;
-
-                return value;
-
-            default:
-                throw expect("char", tag);
-        }
-    }
-
-    /**
-     * Reads a byte array from the stream.
-     */
-    public int readString(char[] buffer, int offset, int length)
-            throws IOException {
-        int readLength = 0;
-
-        if (_chunkLength == END_OF_DATA) {
-            _chunkLength = 0;
-            return -1;
-        } else if (_chunkLength == 0) {
-            int tag = read();
-
-            switch (tag) {
-                case 'N':
-                    return -1;
-
-                case 'S':
-                case BC_STRING_CHUNK:
-                    _isLastChunk = tag == 'S';
-                    _chunkLength = (read() << 8) + read();
-                    break;
-
-                case 0x00:
-                case 0x01:
-                case 0x02:
-                case 0x03:
-                case 0x04:
-                case 0x05:
-                case 0x06:
-                case 0x07:
-                case 0x08:
-                case 0x09:
-                case 0x0a:
-                case 0x0b:
-                case 0x0c:
-                case 0x0d:
-                case 0x0e:
-                case 0x0f:
-
-                case 0x10:
-                case 0x11:
-                case 0x12:
-                case 0x13:
-                case 0x14:
-                case 0x15:
-                case 0x16:
-                case 0x17:
-                case 0x18:
-                case 0x19:
-                case 0x1a:
-                case 0x1b:
-                case 0x1c:
-                case 0x1d:
-                case 0x1e:
-                case 0x1f:
-                    _isLastChunk = true;
-                    _chunkLength = tag - 0x00;
-                    break;
-
-                default:
-                    throw expect("string", tag);
-            }
-        }
-
-        while (length > 0) {
-            if (_chunkLength > 0) {
-                buffer[offset++] = (char) parseUTF8Char();
-                _chunkLength--;
-                length--;
-                readLength++;
-            } else if (_isLastChunk) {
-                if (readLength == 0)
-                    return -1;
-                else {
-                    _chunkLength = END_OF_DATA;
-                    return readLength;
-                }
-            } else {
-                int tag = read();
-
-                switch (tag) {
-                    case 'S':
-                    case BC_STRING_CHUNK:
-                        _isLastChunk = tag == 'S';
-                        _chunkLength = (read() << 8) + read();
-                        break;
-
-                    default:
-                        throw expect("string", tag);
-                }
-            }
-        }
-
-        if (readLength == 0)
-            return -1;
-        else if (_chunkLength > 0 || !_isLastChunk)
-            return readLength;
-        else {
-            _chunkLength = END_OF_DATA;
-            return readLength;
-        }
-    }
-
-    /**
-     * Reads a string
-     * <p>
-     * <pre>
-     * S b16 b8 string value
-     * </pre>
-     */
-    @Override
-    public String readString()
-            throws IOException {
-        int tag = read();
-
-        switch (tag) {
-            case 'N':
-                return null;
-            case 'T':
-                return "true";
-            case 'F':
-                return "false";
-
-            // direct integer
-            case 0x80:
-            case 0x81:
-            case 0x82:
-            case 0x83:
-            case 0x84:
-            case 0x85:
-            case 0x86:
-            case 0x87:
-            case 0x88:
-            case 0x89:
-            case 0x8a:
-            case 0x8b:
-            case 0x8c:
-            case 0x8d:
-            case 0x8e:
-            case 0x8f:
-
-            case 0x90:
-            case 0x91:
-            case 0x92:
-            case 0x93:
-            case 0x94:
-            case 0x95:
-            case 0x96:
-            case 0x97:
-            case 0x98:
-            case 0x99:
-            case 0x9a:
-            case 0x9b:
-            case 0x9c:
-            case 0x9d:
-            case 0x9e:
-            case 0x9f:
-
-            case 0xa0:
-            case 0xa1:
-            case 0xa2:
-            case 0xa3:
-            case 0xa4:
-            case 0xa5:
-            case 0xa6:
-            case 0xa7:
-            case 0xa8:
-            case 0xa9:
-            case 0xaa:
-            case 0xab:
-            case 0xac:
-            case 0xad:
-            case 0xae:
-            case 0xaf:
-
-            case 0xb0:
-            case 0xb1:
-            case 0xb2:
-            case 0xb3:
-            case 0xb4:
-            case 0xb5:
-            case 0xb6:
-            case 0xb7:
-            case 0xb8:
-            case 0xb9:
-            case 0xba:
-            case 0xbb:
-            case 0xbc:
-            case 0xbd:
-            case 0xbe:
-            case 0xbf:
-                return String.valueOf((tag - 0x90));
-
-      /* byte int */
-            case 0xc0:
-            case 0xc1:
-            case 0xc2:
-            case 0xc3:
-            case 0xc4:
-            case 0xc5:
-            case 0xc6:
-            case 0xc7:
-            case 0xc8:
-            case 0xc9:
-            case 0xca:
-            case 0xcb:
-            case 0xcc:
-            case 0xcd:
-            case 0xce:
-            case 0xcf:
-                return String.valueOf(((tag - BC_INT_BYTE_ZERO) << 8) + read());
-
-      /* short int */
-            case 0xd0:
-            case 0xd1:
-            case 0xd2:
-            case 0xd3:
-            case 0xd4:
-            case 0xd5:
-            case 0xd6:
-            case 0xd7:
-                return String.valueOf(((tag - BC_INT_SHORT_ZERO) << 16)
-                        + 256 * read() + read());
-
-            case 'I':
-            case BC_LONG_INT:
-                return String.valueOf(parseInt());
-
-            // direct long
-            case 0xd8:
-            case 0xd9:
-            case 0xda:
-            case 0xdb:
-            case 0xdc:
-            case 0xdd:
-            case 0xde:
-            case 0xdf:
-
-            case 0xe0:
-            case 0xe1:
-            case 0xe2:
-            case 0xe3:
-            case 0xe4:
-            case 0xe5:
-            case 0xe6:
-            case 0xe7:
-            case 0xe8:
-            case 0xe9:
-            case 0xea:
-            case 0xeb:
-            case 0xec:
-            case 0xed:
-            case 0xee:
-            case 0xef:
-                return String.valueOf(tag - BC_LONG_ZERO);
-
-      /* byte long */
-            case 0xf0:
-            case 0xf1:
-            case 0xf2:
-            case 0xf3:
-            case 0xf4:
-            case 0xf5:
-            case 0xf6:
-            case 0xf7:
-            case 0xf8:
-            case 0xf9:
-            case 0xfa:
-            case 0xfb:
-            case 0xfc:
-            case 0xfd:
-            case 0xfe:
-            case 0xff:
-                return String.valueOf(((tag - BC_LONG_BYTE_ZERO) << 8) + read());
-
-      /* short long */
-            case 0x38:
-            case 0x39:
-            case 0x3a:
-            case 0x3b:
-            case 0x3c:
-            case 0x3d:
-            case 0x3e:
-            case 0x3f:
-                return String.valueOf(((tag - BC_LONG_SHORT_ZERO) << 16)
-                        + 256 * read() + read());
-
-            case 'L':
-                return String.valueOf(parseLong());
-
-            case BC_DOUBLE_ZERO:
-                return "0.0";
-
-            case BC_DOUBLE_ONE:
-                return "1.0";
-
-            case BC_DOUBLE_BYTE:
-                return String.valueOf((byte) (_offset < _length
-                        ? _buffer[_offset++]
-                        : read()));
-
-            case BC_DOUBLE_SHORT:
-                return String.valueOf(((short) (256 * read() + read())));
-
-            case BC_DOUBLE_MILL: {
-                int mills = parseInt();
-
-                return String.valueOf(0.001 * mills);
-            }
-
-            case 'D':
-                return String.valueOf(parseDouble());
-
-            case 'S':
-            case BC_STRING_CHUNK:
-                _isLastChunk = tag == 'S';
-                _chunkLength = (read() << 8) + read();
-
-                _sbuf.setLength(0);
-                int ch;
-
-                while ((ch = parseChar()) >= 0)
-                    _sbuf.append((char) ch);
-
-                return _sbuf.toString();
-
-            // 0-byte string
-            case 0x00:
-            case 0x01:
-            case 0x02:
-            case 0x03:
-            case 0x04:
-            case 0x05:
-            case 0x06:
-            case 0x07:
-            case 0x08:
-            case 0x09:
-            case 0x0a:
-            case 0x0b:
-            case 0x0c:
-            case 0x0d:
-            case 0x0e:
-            case 0x0f:
-
-            case 0x10:
-            case 0x11:
-            case 0x12:
-            case 0x13:
-            case 0x14:
-            case 0x15:
-            case 0x16:
-            case 0x17:
-            case 0x18:
-            case 0x19:
-            case 0x1a:
-            case 0x1b:
-            case 0x1c:
-            case 0x1d:
-            case 0x1e:
-            case 0x1f:
-                _isLastChunk = true;
-                _chunkLength = tag - 0x00;
-
-                _sbuf.setLength(0);
-
-                while ((ch = parseChar()) >= 0)
-                    _sbuf.append((char) ch);
-
-                return _sbuf.toString();
-
-            case 0x30:
-            case 0x31:
-            case 0x32:
-            case 0x33:
-                _isLastChunk = true;
-                _chunkLength = (tag - 0x30) * 256 + read();
-
-                _sbuf.setLength(0);
-
-                while ((ch = parseChar()) >= 0)
-                    _sbuf.append((char) ch);
-
-                return _sbuf.toString();
-
-            default:
-                throw expect("string", tag);
-        }
-    }
-
-    /**
-     * Reads a byte array
-     * <p>
-     * <pre>
-     * B b16 b8 data value
-     * </pre>
-     */
-    @Override
-    public byte[] readBytes()
-            throws IOException {
-        int tag = read();
-
-        switch (tag) {
-            case 'N':
-                return null;
-
-            case 'B':
-            case BC_BINARY_CHUNK:
-                _isLastChunk = tag == 'B';
-                _chunkLength = (read() << 8) + read();
-
-                ByteArrayOutputStream bos = new ByteArrayOutputStream();
-
-                int data;
-                while ((data = parseByte()) >= 0)
-                    bos.write(data);
-
-                return bos.toByteArray();
-
-            case 0x20:
-            case 0x21:
-            case 0x22:
-            case 0x23:
-            case 0x24:
-            case 0x25:
-            case 0x26:
-            case 0x27:
-            case 0x28:
-            case 0x29:
-            case 0x2a:
-            case 0x2b:
-            case 0x2c:
-            case 0x2d:
-            case 0x2e:
-            case 0x2f: {
-                _isLastChunk = true;
-                _chunkLength = tag - 0x20;
-
-                byte[] buffer = new byte[_chunkLength];
-
-                int k = 0;
-                while ((data = parseByte()) >= 0)
-                    buffer[k++] = (byte) data;
-
-                return buffer;
-            }
-
-            case 0x34:
-            case 0x35:
-            case 0x36:
-            case 0x37: {
-                _isLastChunk = true;
-                _chunkLength = (tag - 0x34) * 256 + read();
-
-                byte[] buffer = new byte[_chunkLength];
-                int k = 0;
-
-                while ((data = parseByte()) >= 0) {
-                    buffer[k++] = (byte) data;
-                }
-
-                return buffer;
-            }
-
-            default:
-                throw expect("bytes", tag);
-        }
-    }
-
-    /**
-     * Reads a byte from the stream.
-     */
-    public int readByte()
-            throws IOException {
-        if (_chunkLength > 0) {
-            _chunkLength--;
-            if (_chunkLength == 0 && _isLastChunk)
-                _chunkLength = END_OF_DATA;
-
-            return read();
-        } else if (_chunkLength == END_OF_DATA) {
-            _chunkLength = 0;
-            return -1;
-        }
-
-        int tag = read();
-
-        switch (tag) {
-            case 'N':
-                return -1;
-
-            case 'B':
-            case BC_BINARY_CHUNK:
-                _isLastChunk = tag == 'B';
-                _chunkLength = (read() << 8) + read();
-
-                int value = parseByte();
-
-                // special code so successive read byte won't
-                // be read as a single object.
-                if (_chunkLength == 0 && _isLastChunk)
-                    _chunkLength = END_OF_DATA;
-
-                return value;
-
-            default:
-                throw expect("binary", tag);
-        }
-    }
-
-    /**
-     * Reads a byte array from the stream.
-     */
-    public int readBytes(byte[] buffer, int offset, int length)
-            throws IOException {
-        int readLength = 0;
-
-        if (_chunkLength == END_OF_DATA) {
-            _chunkLength = 0;
-            return -1;
-        } else if (_chunkLength == 0) {
-            int tag = read();
-
-            switch (tag) {
-                case 'N':
-                    return -1;
-
-                case 'B':
-                case BC_BINARY_CHUNK:
-                    _isLastChunk = tag == 'B';
-                    _chunkLength = (read() << 8) + read();
-                    break;
-
-                default:
-                    throw expect("binary", tag);
-            }
-        }
-
-        while (length > 0) {
-            if (_chunkLength > 0) {
-                buffer[offset++] = (byte) read();
-                _chunkLength--;
-                length--;
-                readLength++;
-            } else if (_isLastChunk) {
-                if (readLength == 0)
-                    return -1;
-                else {
-                    _chunkLength = END_OF_DATA;
-                    return readLength;
-                }
-            } else {
-                int tag = read();
-
-                switch (tag) {
-                    case 'B':
-                    case BC_BINARY_CHUNK:
-                        _isLastChunk = tag == 'B';
-                        _chunkLength = (read() << 8) + read();
-                        break;
-
-                    default:
-                        throw expect("binary", tag);
-                }
-            }
-        }
-
-        if (readLength == 0)
-            return -1;
-        else if (_chunkLength > 0 || !_isLastChunk)
-            return readLength;
-        else {
-            _chunkLength = END_OF_DATA;
-            return readLength;
-        }
-    }
-
-    /**
-     * Reads a fault.
-     */
-    private HashMap readFault()
-            throws IOException {
-        HashMap map = new HashMap();
-
-        int code = read();
-        for (; code > 0 && code != 'Z'; code = read()) {
-            _offset--;
-
-            Object key = readObject();
-            Object value = readObject();
-
-            if (key != null && value != null)
-                map.put(key, value);
-        }
-
-        if (code != 'Z')
-            throw expect("fault", code);
-
-        return map;
-    }
-
-    /**
-     * Reads an object from the input stream with an expected type.
-     */
-    @Override
-    public Object readObject(Class cl)
-            throws IOException {
-        return readObject(cl, null, null);
-    }
-
-    @Override
-    public Object readObject(Class expectedClass, Class<?>... expectedTypes) throws IOException {
-        if (expectedClass == null || expectedClass == Object.class)
-            return readObject();
-
-        int tag = _offset < _length ? (_buffer[_offset++] & 0xff) : read();
-
-        switch (tag) {
-            case 'N':
-                return null;
-
-            case 'H': {
-                Deserializer reader = findSerializerFactory().getDeserializer(expectedClass);
-
-                boolean keyValuePair = expectedTypes != null && expectedTypes.length == 2;
-                // fix deserialize of short type
-                return reader.readMap(this
-                        , keyValuePair ? expectedTypes[0] : null
-                        , keyValuePair ? expectedTypes[1] : null);
-            }
-
-            case 'M': {
-                String type = readType();
-
-                // hessian/3bb3
-                if ("".equals(type)) {
-                    Deserializer reader;
-                    reader = findSerializerFactory().getDeserializer(expectedClass);
-
-                    return reader.readMap(this);
-                } else {
-                    Deserializer reader;
-                    reader = findSerializerFactory().getObjectDeserializer(type, expectedClass);
-
-                    return reader.readMap(this);
-                }
-            }
-
-            case 'C': {
-                readObjectDefinition(expectedClass);
-
-                return readObject(expectedClass);
-            }
-
-            case 0x60:
-            case 0x61:
-            case 0x62:
-            case 0x63:
-            case 0x64:
-            case 0x65:
-            case 0x66:
-            case 0x67:
-            case 0x68:
-            case 0x69:
-            case 0x6a:
-            case 0x6b:
-            case 0x6c:
-            case 0x6d:
-            case 0x6e:
-            case 0x6f: {
-                int ref = tag - 0x60;
-                int size = _classDefs.size();
-
-                if (ref < 0 || size <= ref)
-                    throw new HessianProtocolException("'" + ref + "' is an unknown class definition");
-
-                ObjectDefinition def = (ObjectDefinition) _classDefs.get(ref);
-
-                return readObjectInstance(expectedClass, def);
-            }
-
-            case 'O': {
-                int ref = readInt();
-                int size = _classDefs.size();
-
-                if (ref < 0 || size <= ref)
-                    throw new HessianProtocolException("'" + ref + "' is an unknown class definition");
-
-                ObjectDefinition def = (ObjectDefinition) _classDefs.get(ref);
-
-                return readObjectInstance(expectedClass, def);
-            }
-
-            case BC_LIST_VARIABLE: {
-                String type = readType();
-
-                Deserializer reader;
-                reader = findSerializerFactory().getListDeserializer(type, expectedClass);
-
-                Object v = reader.readList(this, -1);
-
-                return v;
-            }
-
-            case BC_LIST_FIXED: {
-                String type = readType();
-                int length = readInt();
-
-                Deserializer reader;
-                reader = findSerializerFactory().getListDeserializer(type, expectedClass);
-
-                boolean valueType = expectedTypes != null && expectedTypes.length == 1;
-
-                Object v = reader.readLengthList(this, length, valueType ? expectedTypes[0] : null);
-
-                return v;
-            }
-
-            case 0x70:
-            case 0x71:
-            case 0x72:
-            case 0x73:
-            case 0x74:
-            case 0x75:
-            case 0x76:
-            case 0x77: {
-                int length = tag - 0x70;
-
-                String type = readType();
-
-                Deserializer reader;
-                reader = findSerializerFactory().getListDeserializer(null, expectedClass);
-
-                boolean valueType = expectedTypes != null && expectedTypes.length == 1;
-
-                // fix deserialize of short type
-                Object v = reader.readLengthList(this, length, valueType ? expectedTypes[0] : null);
-
-                return v;
-            }
-
-            case BC_LIST_VARIABLE_UNTYPED: {
-                Deserializer reader;
-                reader = findSerializerFactory().getListDeserializer(null, expectedClass);
-
-                boolean valueType = expectedTypes != null && expectedTypes.length == 1;
-
-                // fix deserialize of short type
-                Object v = reader.readList(this, -1, valueType ? expectedTypes[0] : null);
-
-                return v;
-            }
-
-            case BC_LIST_FIXED_UNTYPED: {
-                int length = readInt();
-
-                Deserializer reader;
-                reader = findSerializerFactory().getListDeserializer(null, expectedClass);
-
-                boolean valueType = expectedTypes != null && expectedTypes.length == 1;
-
-                // fix deserialize of short type
-                Object v = reader.readLengthList(this, length, valueType ? expectedTypes[0] : null);
-
-                return v;
-            }
-
-            case 0x78:
-            case 0x79:
-            case 0x7a:
-            case 0x7b:
-            case 0x7c:
-            case 0x7d:
-            case 0x7e:
-            case 0x7f: {
-                int length = tag - 0x78;
-
-                Deserializer reader;
-                reader = findSerializerFactory().getListDeserializer(null, expectedClass);
-
-                boolean valueType = expectedTypes != null && expectedTypes.length == 1;
-
-                // fix deserialize of short type
-                Object v = reader.readLengthList(this, length, valueType ? expectedTypes[0] : null);
-
-                return v;
-            }
-
-            case BC_REF: {
-                int ref = readInt();
-
-                return _refs.get(ref);
-            }
-        }
-
-        if (tag >= 0)
-            _offset--;
-
-        // hessian/3b2i vs hessian/3406
-        // return readObject();
-        Object value = findSerializerFactory().getDeserializer(expectedClass).readObject(this);
-        return value;
-    }
-
-    /**
-     * Reads an arbitrary object from the input stream when the type
-     * is unknown.
-     */
-    @Override
-    public Object readObject()
-            throws IOException {
-        return readObject((List<Class<?>>) null);
-    }
-
-    @Override
-    public Object readObject(List<Class<?>> expectedTypes) throws IOException {
-        int tag = _offset < _length ? (_buffer[_offset++] & 0xff) : read();
-
-        switch (tag) {
-            case 'N':
-                return null;
-
-            case 'T':
-                return Boolean.valueOf(true);
-
-            case 'F':
-                return Boolean.valueOf(false);
-
-            // direct integer
-            case 0x80:
-            case 0x81:
-            case 0x82:
-            case 0x83:
-            case 0x84:
-            case 0x85:
-            case 0x86:
-            case 0x87:
-            case 0x88:
-            case 0x89:
-            case 0x8a:
-            case 0x8b:
-            case 0x8c:
-            case 0x8d:
-            case 0x8e:
-            case 0x8f:
-
-            case 0x90:
-            case 0x91:
-            case 0x92:
-            case 0x93:
-            case 0x94:
-            case 0x95:
-            case 0x96:
-            case 0x97:
-            case 0x98:
-            case 0x99:
-            case 0x9a:
-            case 0x9b:
-            case 0x9c:
-            case 0x9d:
-            case 0x9e:
-            case 0x9f:
-
-            case 0xa0:
-            case 0xa1:
-            case 0xa2:
-            case 0xa3:
-            case 0xa4:
-            case 0xa5:
-            case 0xa6:
-            case 0xa7:
-            case 0xa8:
-            case 0xa9:
-            case 0xaa:
-            case 0xab:
-            case 0xac:
-            case 0xad:
-            case 0xae:
-            case 0xaf:
-
-            case 0xb0:
-            case 0xb1:
-            case 0xb2:
-            case 0xb3:
-            case 0xb4:
-            case 0xb5:
-            case 0xb6:
-            case 0xb7:
-            case 0xb8:
-            case 0xb9:
-            case 0xba:
-            case 0xbb:
-            case 0xbc:
-            case 0xbd:
-            case 0xbe:
-            case 0xbf:
-                return Integer.valueOf(tag - BC_INT_ZERO);
-
-            /* byte int */
-            case 0xc0:
-            case 0xc1:
-            case 0xc2:
-            case 0xc3:
-            case 0xc4:
-            case 0xc5:
-            case 0xc6:
-            case 0xc7:
-            case 0xc8:
-            case 0xc9:
-            case 0xca:
-            case 0xcb:
-            case 0xcc:
-            case 0xcd:
-            case 0xce:
-            case 0xcf:
-                return Integer.valueOf(((tag - BC_INT_BYTE_ZERO) << 8) + read());
-
-            /* short int */
-            case 0xd0:
-            case 0xd1:
-            case 0xd2:
-            case 0xd3:
-            case 0xd4:
-            case 0xd5:
-            case 0xd6:
-            case 0xd7:
-                return Integer.valueOf(((tag - BC_INT_SHORT_ZERO) << 16)
-                        + 256 * read() + read());
-
-            case 'I':
-                return Integer.valueOf(parseInt());
-
-            // direct long
-            case 0xd8:
-            case 0xd9:
-            case 0xda:
-            case 0xdb:
-            case 0xdc:
-            case 0xdd:
-            case 0xde:
-            case 0xdf:
-
-            case 0xe0:
-            case 0xe1:
-            case 0xe2:
-            case 0xe3:
-            case 0xe4:
-            case 0xe5:
-            case 0xe6:
-            case 0xe7:
-            case 0xe8:
-            case 0xe9:
-            case 0xea:
-            case 0xeb:
-            case 0xec:
-            case 0xed:
-            case 0xee:
-            case 0xef:
-                return Long.valueOf(tag - BC_LONG_ZERO);
-
-            /* byte long */
-            case 0xf0:
-            case 0xf1:
-            case 0xf2:
-            case 0xf3:
-            case 0xf4:
-            case 0xf5:
-            case 0xf6:
-            case 0xf7:
-            case 0xf8:
-            case 0xf9:
-            case 0xfa:
-            case 0xfb:
-            case 0xfc:
-            case 0xfd:
-            case 0xfe:
-            case 0xff:
-                return Long.valueOf(((tag - BC_LONG_BYTE_ZERO) << 8) + read());
-
-            /* short long */
-            case 0x38:
-            case 0x39:
-            case 0x3a:
-            case 0x3b:
-            case 0x3c:
-            case 0x3d:
-            case 0x3e:
-            case 0x3f:
-                return Long.valueOf(((tag - BC_LONG_SHORT_ZERO) << 16) + 256 * read() + read());
-
-            case BC_LONG_INT:
-                return Long.valueOf(parseInt());
-
-            case 'L':
-                return Long.valueOf(parseLong());
-
-            case BC_DOUBLE_ZERO:
-                return Double.valueOf(0);
-
-            case BC_DOUBLE_ONE:
-                return Double.valueOf(1);
-
-            case BC_DOUBLE_BYTE:
-                return Double.valueOf((byte) read());
-
-            case BC_DOUBLE_SHORT:
-                return Double.valueOf((short) (256 * read() + read()));
-
-            case BC_DOUBLE_MILL: {
-                int mills = parseInt();
-
-                return Double.valueOf(0.001 * mills);
-            }
-
-            case 'D':
-                return Double.valueOf(parseDouble());
-
-            case BC_DATE:
-                return new Date(parseLong());
-
-            case BC_DATE_MINUTE:
-                return new Date(parseInt() * 60000L);
-
-            case BC_STRING_CHUNK:
-            case 'S': {
-                _isLastChunk = tag == 'S';
-                _chunkLength = (read() << 8) + read();
-
-                _sbuf.setLength(0);
-
-                parseString(_sbuf);
-
-                return _sbuf.toString();
-            }
-
-            case 0x00:
-            case 0x01:
-            case 0x02:
-            case 0x03:
-            case 0x04:
-            case 0x05:
-            case 0x06:
-            case 0x07:
-            case 0x08:
-            case 0x09:
-            case 0x0a:
-            case 0x0b:
-            case 0x0c:
-            case 0x0d:
-            case 0x0e:
-            case 0x0f:
-
-            case 0x10:
-            case 0x11:
-            case 0x12:
-            case 0x13:
-            case 0x14:
-            case 0x15:
-            case 0x16:
-            case 0x17:
-            case 0x18:
-            case 0x19:
-            case 0x1a:
-            case 0x1b:
-            case 0x1c:
-            case 0x1d:
-            case 0x1e:
-            case 0x1f: {
-                _isLastChunk = true;
-                _chunkLength = tag - 0x00;
-
-                _sbuf.setLength(0);
-
-                parseString(_sbuf);
-
-                return _sbuf.toString();
-            }
-
-            case 0x30:
-            case 0x31:
-            case 0x32:
-            case 0x33: {
-                _isLastChunk = true;
-                _chunkLength = (tag - 0x30) * 256 + read();
-
-                _sbuf.setLength(0);
-
-                parseString(_sbuf);
-
-                return _sbuf.toString();
-            }
-
-            case BC_BINARY_CHUNK:
-            case 'B': {
-                _isLastChunk = tag == 'B';
-                _chunkLength = (read() << 8) + read();
-
-                int data;
-                ByteArrayOutputStream bos = new ByteArrayOutputStream();
-
-                while ((data = parseByte()) >= 0)
-                    bos.write(data);
-
-                return bos.toByteArray();
-            }
-
-            case 0x20:
-            case 0x21:
-            case 0x22:
-            case 0x23:
-            case 0x24:
-            case 0x25:
-            case 0x26:
-            case 0x27:
-            case 0x28:
-            case 0x29:
-            case 0x2a:
-            case 0x2b:
-            case 0x2c:
-            case 0x2d:
-            case 0x2e:
-            case 0x2f: {
-                _isLastChunk = true;
-                int len = tag - 0x20;
-                _chunkLength = 0;
-
-                byte[] data = new byte[len];
-
-                for (int i = 0; i < len; i++)
-                    data[i] = (byte) read();
-
-                return data;
-            }
-
-            case 0x34:
-            case 0x35:
-            case 0x36:
-            case 0x37: {
-                _isLastChunk = true;
-                int len = (tag - 0x34) * 256 + read();
-                _chunkLength = 0;
-
-                byte[] buffer = new byte[len];
-
-                for (int i = 0; i < len; i++) {
-                    buffer[i] = (byte) read();
-                }
-
-                return buffer;
-            }
-
-            case BC_LIST_VARIABLE: {
-                // variable length list
-                String type = readType();
-
-                return findSerializerFactory().readList(this, -1, type);
-            }
-
-            case BC_LIST_VARIABLE_UNTYPED: {
-                return findSerializerFactory().readList(this, -1, null);
-            }
-
-            case BC_LIST_FIXED: {
-                // fixed length lists
-                String type = readType();
-                int length = readInt();
-
-                Deserializer reader;
-                reader = findSerializerFactory().getListDeserializer(type, null);
-
-                boolean valueType = expectedTypes != null && expectedTypes.size() == 1;
-
-                return reader.readLengthList(this, length, valueType ? expectedTypes.get(0) : null);
-            }
-
-            case BC_LIST_FIXED_UNTYPED: {
-                // fixed length lists
-                int length = readInt();
-
-                Deserializer reader;
-                reader = findSerializerFactory().getListDeserializer(null, null);
-
-                boolean valueType = expectedTypes != null && expectedTypes.size() == 1;
-
-                return reader.readLengthList(this, length, valueType ? expectedTypes.get(0) : null);
-            }
-
-            // compact fixed list
-            case 0x70:
-            case 0x71:
-            case 0x72:
-            case 0x73:
-            case 0x74:
-            case 0x75:
-            case 0x76:
-            case 0x77: {
-                // fixed length lists
-                String type = readType();
-                int length = tag - 0x70;
-
-                Deserializer reader;
-                reader = findSerializerFactory().getListDeserializer(type, null);
-
-                boolean valueType = expectedTypes != null && expectedTypes.size() == 1;
-
-                return reader.readLengthList(this, length, valueType ? expectedTypes.get(0) : null);
-            }
-
-            // compact fixed untyped list
-            case 0x78:
-            case 0x79:
-            case 0x7a:
-            case 0x7b:
-            case 0x7c:
-            case 0x7d:
-            case 0x7e:
-            case 0x7f: {
-                // fixed length lists
-                int length = tag - 0x78;
-
-                Deserializer reader;
-                reader = findSerializerFactory().getListDeserializer(null, null);
-
-                boolean valueType = expectedTypes != null && expectedTypes.size() == 1;
-
-                return reader.readLengthList(this, length, valueType ? expectedTypes.get(0) : null);
-            }
-
-            case 'H': {
-
-                boolean keyValuePair = expectedTypes != null && expectedTypes.size() == 2;
-
-                // fix deserialize of short type
-                Deserializer reader;
-                reader = findSerializerFactory().getDeserializer(Map.class);
-
-                return reader.readMap(this
-                        , keyValuePair ? expectedTypes.get(0) : null
-                        , keyValuePair ? expectedTypes.get(1) : null);
-            }
-
-            case 'M': {
-                String type = readType();
-
-                return findSerializerFactory().readMap(this, type);
-            }
-
-            case 'C': {
-                readObjectDefinition(null);
-
-                return readObject();
-            }
-
-            case 0x60:
-            case 0x61:
-            case 0x62:
-            case 0x63:
-            case 0x64:
-            case 0x65:
-            case 0x66:
-            case 0x67:
-            case 0x68:
-            case 0x69:
-            case 0x6a:
-            case 0x6b:
-            case 0x6c:
-            case 0x6d:
-            case 0x6e:
-            case 0x6f: {
-                int ref = tag - 0x60;
-
-                if (_classDefs == null)
-                    throw error("No classes defined at reference '{0}'" + tag);
-
-                ObjectDefinition def = (ObjectDefinition) _classDefs.get(ref);
-
-                return readObjectInstance(null, def);
-            }
-
-            case 'O': {
-                int ref = readInt();
-
-                ObjectDefinition def = (ObjectDefinition) _classDefs.get(ref);
-
-                return readObjectInstance(null, def);
-            }
-
-            case BC_REF: {
-                int ref = readInt();
-
-                return _refs.get(ref);
-            }
-
-            default:
-                if (tag < 0)
-                    throw new EOFException("readObject: unexpected end of file");
-                else
-                    throw error("readObject: unknown code " + codeName(tag));
-        }
-    }
-
-    private void parseString(StringBuilder sbuf)
-            throws IOException {
-        while (true) {
-            if (_chunkLength <= 0) {
-                if (!parseChunkLength())
-                    return;
-            }
-
-            int length = _chunkLength;
-            _chunkLength = 0;
-
-            while (length-- > 0) {
-                sbuf.append((char) parseUTF8Char());
-            }
-        }
-    }
-
-    /**
-     * Reads an object definition:
-     * <p>
-     * <pre>
-     * O string <int> (string)* <value>*
-     * </pre>
-     */
-    private void readObjectDefinition(Class cl)
-            throws IOException {
-        String type = readString();
-        int len = readInt();
-
-        String[] fieldNames = new String[len];
-        for (int i = 0; i < len; i++)
-            fieldNames[i] = readString();
-
-        ObjectDefinition def = new ObjectDefinition(type, fieldNames);
-
-        if (_classDefs == null)
-            _classDefs = new ArrayList();
-
-        _classDefs.add(def);
-    }
-
-    private Object readObjectInstance(Class cl, ObjectDefinition def)
-            throws IOException {
-        String type = def.getType();
-        String[] fieldNames = def.getFieldNames();
-
-        if (cl != null) {
-            Deserializer reader;
-            reader = findSerializerFactory().getObjectDeserializer(type, cl);
-
-            return reader.readObject(this, fieldNames);
-        } else {
-            return findSerializerFactory().readObject(this, type, fieldNames);
-        }
-    }
-
-    private String readLenString()
-            throws IOException {
-        int len = readInt();
-
-        _isLastChunk = true;
-        _chunkLength = len;
-
-        _sbuf.setLength(0);
-        int ch;
-        while ((ch = parseChar()) >= 0)
-            _sbuf.append((char) ch);
-
-        return _sbuf.toString();
-    }
-
-    private String readLenString(int len)
-            throws IOException {
-        _isLastChunk = true;
-        _chunkLength = len;
-
-        _sbuf.setLength(0);
-        int ch;
-        while ((ch = parseChar()) >= 0)
-            _sbuf.append((char) ch);
-
-        return _sbuf.toString();
-    }
-
-    /**
-     * Reads a remote object.
-     */
-    @Override
-    public Object readRemote()
-            throws IOException {
-        String type = readType();
-        String url = readString();
-
-        return resolveRemote(type, url);
-    }
-
-    /**
-     * Reads a reference.
-     */
-    @Override
-    public Object readRef()
-            throws IOException {
-        return _refs.get(parseInt());
-    }
-
-    /**
-     * Reads the start of a list.
-     */
-    @Override
-    public int readListStart()
-            throws IOException {
-        return read();
-    }
-
-    /**
-     * Reads the start of a list.
-     */
-    @Override
-    public int readMapStart()
-            throws IOException {
-        return read();
-    }
-
-    /**
-     * Returns true if this is the end of a list or a map.
-     */
-    @Override
-    public boolean isEnd()
-            throws IOException {
-        int code;
-
-        if (_offset < _length)
-            code = (_buffer[_offset] & 0xff);
-        else {
-            code = read();
-
-            if (code >= 0)
-                _offset--;
-        }
-
-        return (code < 0 || code == 'Z');
-    }
-
-    /**
-     * Reads the end byte.
-     */
-    @Override
-    public void readEnd()
-            throws IOException {
-        int code = _offset < _length ? (_buffer[_offset++] & 0xff) : read();
-
-        if (code == 'Z')
-            return;
-        else if (code < 0)
-            throw error("unexpected end of file");
-        else
-            throw error("unknown code:" + codeName(code));
-    }
-
-    /**
-     * Reads the end byte.
-     */
-    @Override
-    public void readMapEnd()
-            throws IOException {
-        int code = _offset < _length ? (_buffer[_offset++] & 0xff) : read();
-
-        if (code != 'Z')
-            throw error("expected end of map ('Z') at '" + codeName(code) + "'");
-    }
-
-    /**
-     * Reads the end byte.
-     */
-    @Override
-    public void readListEnd()
-            throws IOException {
-        int code = _offset < _length ? (_buffer[_offset++] & 0xff) : read();
-
-        if (code != 'Z')
-            throw error("expected end of list ('Z') at '" + codeName(code) + "'");
-    }
-
-    /**
-     * Adds a list/map reference.
-     */
-    @Override
-    public int addRef(Object ref) {
-        if (_refs == null)
-            _refs = new ArrayList();
-
-        _refs.add(ref);
-
-        return _refs.size() - 1;
-    }
-
-    /**
-     * Adds a list/map reference.
-     */
-    @Override
-    public void setRef(int i, Object ref) {
-        _refs.set(i, ref);
-    }
-
-    /**
-     * Resets the references for streaming.
-     */
-    @Override
-    public void resetReferences() {
-        if (_refs != null)
-            _refs.clear();
-    }
-
-    public Object readStreamingObject()
-            throws IOException {
-        if (_refs != null)
-            _refs.clear();
-
-        return readObject();
-    }
-
-    /**
-     * Resolves a remote object.
-     */
-    public Object resolveRemote(String type, String url)
-            throws IOException {
-        HessianRemoteResolver resolver = getRemoteResolver();
-
-        if (resolver != null)
-            return resolver.lookup(type, url);
-        else
-            return new HessianRemote(type, url);
-    }
-
-    /**
-     * Parses a type from the stream.
-     * <p>
-     * <pre>
-     * type ::= string
-     * type ::= int
-     * </pre>
-     */
-    @Override
-    public String readType()
-            throws IOException {
-        int code = _offset < _length ? (_buffer[_offset++] & 0xff) : read();
-        _offset--;
-
-        switch (code) {
-            case 0x00:
-            case 0x01:
-            case 0x02:
-            case 0x03:
-            case 0x04:
-            case 0x05:
-            case 0x06:
-            case 0x07:
-            case 0x08:
-            case 0x09:
-            case 0x0a:
-            case 0x0b:
-            case 0x0c:
-            case 0x0d:
-            case 0x0e:
-            case 0x0f:
-
-            case 0x10:
-            case 0x11:
-            case 0x12:
-            case 0x13:
-            case 0x14:
-            case 0x15:
-            case 0x16:
-            case 0x17:
-            case 0x18:
-            case 0x19:
-            case 0x1a:
-            case 0x1b:
-            case 0x1c:
-            case 0x1d:
-            case 0x1e:
-            case 0x1f:
-
-            case 0x30:
-            case 0x31:
-            case 0x32:
-            case 0x33:
-            case BC_STRING_CHUNK:
-            case 'S': {
-                String type = readString();
-
-                if (_types == null)
-                    _types = new ArrayList();
-
-                _types.add(type);
-
-                return type;
-            }
-
-            default: {
-                int ref = readInt();
-
-                if (_types.size() <= ref)
-                    throw new IndexOutOfBoundsException("type ref #" + ref + " is greater than the number of valid types (" + _types.size() + ")");
-
-                return (String) _types.get(ref);
-            }
-        }
-    }
-
-    /**
-     * Parses the length for an array
-     * <p>
-     * <pre>
-     * l b32 b24 b16 b8
-     * </pre>
-     */
-    @Override
-    public int readLength()
-            throws IOException {
-        throw new UnsupportedOperationException();
-    }
-
-    /**
-     * Parses a 32-bit integer value from the stream.
-     * <p>
-     * <pre>
-     * b32 b24 b16 b8
-     * </pre>
-     */
-    private int parseInt()
-            throws IOException {
-        int offset = _offset;
-
-        if (offset + 3 < _length) {
-            byte[] buffer = _buffer;
-
-            int b32 = buffer[offset + 0] & 0xff;
-            int b24 = buffer[offset + 1] & 0xff;
-            int b16 = buffer[offset + 2] & 0xff;
-            int b8 = buffer[offset + 3] & 0xff;
-
-            _offset = offset + 4;
-
-            return (b32 << 24) + (b24 << 16) + (b16 << 8) + b8;
-        } else {
-            int b32 = read();
-            int b24 = read();
-            int b16 = read();
-            int b8 = read();
-
-            return (b32 << 24) + (b24 << 16) + (b16 << 8) + b8;
-        }
-    }
-
-    /**
-     * Parses a 64-bit long value from the stream.
-     * <p>
-     * <pre>
-     * b64 b56 b48 b40 b32 b24 b16 b8
-     * </pre>
-     */
-    private long parseLong()
-            throws IOException {
-        long b64 = read();
-        long b56 = read();
-        long b48 = read();
-        long b40 = read();
-        long b32 = read();
-        long b24 = read();
-        long b16 = read();
-        long b8 = read();
-
-        return ((b64 << 56)
-                + (b56 << 48)
-                + (b48 << 40)
-                + (b40 << 32)
-                + (b32 << 24)
-                + (b24 << 16)
-                + (b16 << 8)
-                + b8);
-    }
-
-    /**
-     * Parses a 64-bit double value from the stream.
-     * <p>
-     * <pre>
-     * b64 b56 b48 b40 b32 b24 b16 b8
-     * </pre>
-     */
-    private double parseDouble()
-            throws IOException {
-        long bits = parseLong();
-
-        return Double.longBitsToDouble(bits);
-    }
-
-    org.w3c.dom.Node parseXML()
-            throws IOException {
-        throw new UnsupportedOperationException();
-    }
-
-    private boolean parseChunkLength()
-            throws IOException {
-        if (_isLastChunk)
-            return false;
-
-        int code = _offset < _length ? (_buffer[_offset++] & 0xff) : read();
-
-        switch (code) {
-            case BC_STRING_CHUNK:
-                _isLastChunk = false;
-
-                _chunkLength = (read() << 8) + read();
-                break;
-
-            case 'S':
-                _isLastChunk = true;
-
-                _chunkLength = (read() << 8) + read();
-                break;
-
-            case 0x00:
-            case 0x01:
-            case 0x02:
-            case 0x03:
-            case 0x04:
-            case 0x05:
-            case 0x06:
-            case 0x07:
-            case 0x08:
-            case 0x09:
-            case 0x0a:
-            case 0x0b:
-            case 0x0c:
-            case 0x0d:
-            case 0x0e:
-            case 0x0f:
-
-            case 0x10:
-            case 0x11:
-            case 0x12:
-            case 0x13:
-            case 0x14:
-            case 0x15:
-            case 0x16:
-            case 0x17:
-            case 0x18:
-            case 0x19:
-            case 0x1a:
-            case 0x1b:
-            case 0x1c:
-            case 0x1d:
-            case 0x1e:
-            case 0x1f:
-                _isLastChunk = true;
-                _chunkLength = code - 0x00;
-                break;
-
-            case 0x30:
-            case 0x31:
-            case 0x32:
-            case 0x33:
-                _isLastChunk = true;
-                _chunkLength = (code - 0x30) * 256 + read();
-                break;
-
-            default:
-                throw expect("string", code);
-        }
-
-        return true;
-    }
-
-    /**
-     * Reads a character from the underlying stream.
-     */
-    private int parseChar()
-            throws IOException {
-        while (_chunkLength <= 0) {
-            if (!parseChunkLength())
-                return -1;
-        }
-
-        _chunkLength--;
-
-        return parseUTF8Char();
-    }
-
-    /**
-     * Parses a single UTF8 character.
-     */
-    private int parseUTF8Char()
-            throws IOException {
-        int ch = _offset < _length ? (_buffer[_offset++] & 0xff) : read();
-
-        if (ch < 0x80)
-            return ch;
-        else if ((ch & 0xe0) == 0xc0) {
-            int ch1 = read();
-            int v = ((ch & 0x1f) << 6) + (ch1 & 0x3f);
-
-            return v;
-        } else if ((ch & 0xf0) == 0xe0) {
-            int ch1 = read();
-            int ch2 = read();
-            int v = ((ch & 0x0f) << 12) + ((ch1 & 0x3f) << 6) + (ch2 & 0x3f);
-
-            return v;
-        } else
-            throw error("bad utf-8 encoding at " + codeName(ch));
-    }
-
-    /**
-     * Reads a byte from the underlying stream.
-     */
-    private int parseByte()
-            throws IOException {
-        while (_chunkLength <= 0) {
-            if (_isLastChunk) {
-                return -1;
-            }
-
-            int code = read();
-
-            switch (code) {
-                case BC_BINARY_CHUNK:
-                    _isLastChunk = false;
-
-                    _chunkLength = (read() << 8) + read();
-                    break;
-
-                case 'B':
-                    _isLastChunk = true;
-
-                    _chunkLength = (read() << 8) + read();
-                    break;
-
-                case 0x20:
-                case 0x21:
-                case 0x22:
-                case 0x23:
-                case 0x24:
-                case 0x25:
-                case 0x26:
-                case 0x27:
-                case 0x28:
-                case 0x29:
-                case 0x2a:
-                case 0x2b:
-                case 0x2c:
-                case 0x2d:
-                case 0x2e:
-                case 0x2f:
-                    _isLastChunk = true;
-
-                    _chunkLength = code - 0x20;
-                    break;
-
-                case 0x34:
-                case 0x35:
-                case 0x36:
-                case 0x37:
-                    _isLastChunk = true;
-                    _chunkLength = (code - 0x34) * 256 + read();
-                    break;
-
-                default:
-                    throw expect("byte[]", code);
-            }
-        }
-
-        _chunkLength--;
-
-        return read();
-    }
-
-    /**
-     * Reads bytes based on an input stream.
-     */
-    @Override
-    public InputStream readInputStream()
-            throws IOException {
-        int tag = read();
-
-        switch (tag) {
-            case 'N':
-                return null;
-
-            case 'B':
-            case 'b':
-                _isLastChunk = tag == 'B';
-                _chunkLength = (read() << 8) + read();
-                break;
-
-            case 0x20:
-            case 0x21:
-            case 0x22:
-            case 0x23:
-            case 0x24:
-            case 0x25:
-            case 0x26:
-            case 0x27:
-            case 0x28:
-            case 0x29:
-            case 0x2a:
-            case 0x2b:
-            case 0x2c:
-            case 0x2d:
-            case 0x2e:
-            case 0x2f:
-                _isLastChunk = true;
-                _chunkLength = tag - 0x20;
-                break;
-
-            default:
-                throw expect("binary", tag);
-        }
-
-        return new ReadInputStream();
-    }
-
-    /**
-     * Reads bytes from the underlying stream.
-     */
-    int read(byte[] buffer, int offset, int length)
-            throws IOException {
-        int readLength = 0;
-
-        while (length > 0) {
-            while (_chunkLength <= 0) {
-                if (_isLastChunk)
-                    return readLength == 0 ? -1 : readLength;
-
-                int code = read();
-
-                switch (code) {
-                    case 'b':
-                        _isLastChunk = false;
-
-                        _chunkLength = (read() << 8) + read();
-                        break;
-
-                    case 'B':
-                        _isLastChunk = true;
-
-                        _chunkLength = (read() << 8) + read();
-                        break;
-
-                    case 0x20:
-                    case 0x21:
-                    case 0x22:
-                    case 0x23:
-                    case 0x24:
-                    case 0x25:
-                    case 0x26:
-                    case 0x27:
-                    case 0x28:
-                    case 0x29:
-                    case 0x2a:
-                    case 0x2b:
-                    case 0x2c:
-                    case 0x2d:
-                    case 0x2e:
-                    case 0x2f:
-                        _isLastChunk = true;
-                        _chunkLength = code - 0x20;
-                        break;
-
-                    default:
-                        throw expect("byte[]", code);
-                }
-            }
-
-            int sublen = _chunkLength;
-            if (length < sublen)
-                sublen = length;
-
-            if (_length <= _offset && !readBuffer())
-                return -1;
-
-            if (_length - _offset < sublen)
-                sublen = _length - _offset;
-
-            System.arraycopy(_buffer, _offset, buffer, offset, sublen);
-
-            _offset += sublen;
-
-            offset += sublen;
-            readLength += sublen;
-            length -= sublen;
-            _chunkLength -= sublen;
-        }
-
-        return readLength;
-    }
-
-    /**
-     * Normally, shouldn't be called externally, but needed for QA, e.g.
-     * ejb/3b01.
-     */
-    public final int read()
-            throws IOException {
-        if (_length <= _offset && !readBuffer())
-            return -1;
-
-        return _buffer[_offset++] & 0xff;
-    }
-
-    private final boolean readBuffer()
-            throws IOException {
-        byte[] buffer = _buffer;
-        int offset = _offset;
-        int length = _length;
-
-        if (offset < length) {
-            System.arraycopy(buffer, offset, buffer, 0, length - offset);
-            offset = length - offset;
-        } else
-            offset = 0;
-
-        int len = _is.read(buffer, offset, SIZE - offset);
-
-        if (len <= 0) {
-            _length = offset;
-            _offset = 0;
-
-            return offset > 0;
-        }
-
-        _length = offset + len;
-        _offset = 0;
-
-        return true;
-    }
-
-    @Override
-    public Reader getReader() {
-        return null;
-    }
-
-    protected IOException expect(String expect, int ch)
-            throws IOException {
-        if (ch < 0)
-            return error("expected " + expect + " at end of file");
-        else {
-            _offset--;
-
-            try {
-                Object obj = readObject();
-
-                if (obj != null) {
-                    return error("expected " + expect
-                            + " at 0x" + Integer.toHexString(ch & 0xff)
-                            + " " + obj.getClass().getName() + " (" + obj + ")");
-                } else
-                    return error("expected " + expect
-                            + " at 0x" + Integer.toHexString(ch & 0xff) + " null");
-            } catch (IOException e) {
-                log.log(Level.FINE, e.toString(), e);
-
-                return error("expected " + expect
-                        + " at 0x" + Integer.toHexString(ch & 0xff));
-            }
-        }
-    }
-
-    protected String codeName(int ch) {
-        if (ch < 0)
-            return "end of file";
-        else
-            return "0x" + Integer.toHexString(ch & 0xff) + " (" + (char) +ch + ")";
-    }
-
-    protected IOException error(String message) {
-        if (_method != null)
-            return new HessianProtocolException(_method + ": " + message);
-        else
-            return new HessianProtocolException(message);
-    }
-
-    @Override
-    public void close()
-            throws IOException {
-        InputStream is = _is;
-        _is = null;
-
-        if (_isCloseStreamOnClose && is != null)
-            is.close();
-    }
-
-    ;
-
-    final static class ObjectDefinition {
-        private final String _type;
-        private final String[] _fields;
-
-        ObjectDefinition(String type, String[] fields) {
-            _type = type;
-            _fields = fields;
-        }
-
-        String getType() {
-            return _type;
-        }
-
-        String[] getFieldNames() {
-            return _fields;
-        }
-    }
-
-    class ReadInputStream extends InputStream {
-        boolean _isClosed = false;
-
-        @Override
-        public int read()
-                throws IOException {
-            if (_isClosed)
-                return -1;
-
-            int ch = parseByte();
-            if (ch < 0)
-                _isClosed = true;
-
-            return ch;
-        }
-
-        @Override
-        public int read(byte[] buffer, int offset, int length)
-                throws IOException {
-            if (_isClosed)
-                return -1;
-
-            int len = Hessian2Input.this.read(buffer, offset, length);
-            if (len < 0)
-                _isClosed = true;
-
-            return len;
-        }
-
-        @Override
-        public void close()
-                throws IOException {
-            while (read() >= 0) {
-            }
-        }
-    }
-}
diff --git a/hessian-lite/src/main/java/com/alibaba/com/caucho/hessian/io/Hessian2Output.java b/hessian-lite/src/main/java/com/alibaba/com/caucho/hessian/io/Hessian2Output.java
deleted file mode 100644
index 3eb98b5..0000000
--- a/hessian-lite/src/main/java/com/alibaba/com/caucho/hessian/io/Hessian2Output.java
+++ /dev/null
@@ -1,1537 +0,0 @@
-/*
- * Copyright (c) 2001-2008 Caucho Technology, Inc.  All rights reserved.
- *
- * The Apache Software License, Version 1.1
- *
- * 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 acknowlegement:
- *       "This product includes software developed by the
- *        Caucho Technology (http://www.caucho.com/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "Burlap", "Resin", and "Caucho" must not be used to
- *    endorse or promote products derived from this software without prior
- *    written permission. For written permission, please contact
- *    info@caucho.com.
- *
- * 5. Products derived from this software may not be called "Resin"
- *    nor may "Resin" appear in their names without prior written
- *    permission of Caucho Technology.
- *
- * 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 CAUCHO TECHNOLOGY 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.
- *
- * @author Scott Ferguson
- */
-
-package com.alibaba.com.caucho.hessian.io;
-
-import com.alibaba.com.caucho.hessian.util.IdentityIntMap;
-
-import java.io.IOException;
-import java.io.OutputStream;
-import java.util.HashMap;
-
-/**
- * Output stream for Hessian 2 requests.
- * <p>
- * <p>Since HessianOutput does not depend on any classes other than
- * in the JDK, it can be extracted independently into a smaller package.
- * <p>
- * <p>HessianOutput is unbuffered, so any client needs to provide
- * its own buffering.
- * <p>
- * <pre>
- * OutputStream os = ...; // from http connection
- * Hessian2Output out = new Hessian2Output(os);
- * String value;
- *
- * out.startCall("hello", 1); // start hello call
- * out.writeString("arg1");   // write a string argument
- * out.completeCall();        // complete the call
- * </pre>
- */
-public class Hessian2Output
-        extends AbstractHessianOutput
-        implements Hessian2Constants {
-    public final static int SIZE = 4096;
-    private final byte[] _buffer = new byte[SIZE];
-    // the output stream/
-    protected OutputStream _os;
-    // map of references
-    private IdentityIntMap _refs = new IdentityIntMap();
-    private boolean _isCloseStreamOnClose;
-    // map of classes
-    private HashMap _classRefs;
-    // map of types
-    private HashMap _typeRefs;
-    private int _offset;
-
-    private boolean _isStreaming;
-
-    /**
-     * Creates a new Hessian output stream, initialized with an
-     * underlying output stream.
-     *
-     * @param os the underlying output stream.
-     */
-    public Hessian2Output(OutputStream os) {
-        _os = os;
-    }
-
-    public boolean isCloseStreamOnClose() {
-        return _isCloseStreamOnClose;
-    }
-
-    public void setCloseStreamOnClose(boolean isClose) {
-        _isCloseStreamOnClose = isClose;
-    }
-
-    /**
-     * Writes a complete method call.
-     */
-    @Override
-    public void call(String method, Object[] args)
-            throws IOException {
-        int length = args != null ? args.length : 0;
-
-        startCall(method, length);
-
-        for (int i = 0; i < args.length; i++)
-            writeObject(args[i]);
-
-        completeCall();
-    }
-
-    /**
-     * Starts the method call.  Clients would use <code>startCall</code>
-     * instead of <code>call</code> if they wanted finer control over
-     * writing the arguments, or needed to write headers.
-     * <p>
-     * <code><pre>
-     * C
-     * string # method name
-     * int    # arg count
-     * </pre></code>
-     *
-     * @param method the method name to call.
-     */
-    @Override
-    public void startCall(String method, int length)
-            throws IOException {
-        int offset = _offset;
-
-        if (SIZE < offset + 32) {
-            flush();
-            offset = _offset;
-        }
-
-        byte[] buffer = _buffer;
-
-        buffer[_offset++] = (byte) 'C';
-
-        writeString(method);
-        writeInt(length);
-    }
-
-    /**
-     * Writes the call tag.  This would be followed by the
-     * method and the arguments
-     * <p>
-     * <code><pre>
-     * C
-     * </pre></code>
-     *
-     * @param method the method name to call.
-     */
-    @Override
-    public void startCall()
-            throws IOException {
-        flushIfFull();
-
-        _buffer[_offset++] = (byte) 'C';
-    }
-
-    /**
-     * Starts an envelope.
-     * <p>
-     * <code><pre>
-     * E major minor
-     * m b16 b8 method-name
-     * </pre></code>
-     *
-     * @param method the method name to call.
-     */
-    public void startEnvelope(String method)
-            throws IOException {
-        int offset = _offset;
-
-        if (SIZE < offset + 32) {
-            flush();
-            offset = _offset;
-        }
-
-        _buffer[_offset++] = (byte) 'E';
-
-        writeString(method);
-    }
-
-    /**
-     * Completes an envelope.
-     * <p>
-     * <p>A successful completion will have a single value:
-     * <p>
-     * <pre>
-     * Z
-     * </pre>
-     */
-    public void completeEnvelope()
-            throws IOException {
-        flushIfFull();
-
-        _buffer[_offset++] = (byte) 'Z';
-    }
-
-    /**
-     * Writes the method tag.
-     * <p>
-     * <code><pre>
-     * string
-     * </pre></code>
-     *
-     * @param method the method name to call.
-     */
-    @Override
-    public void writeMethod(String method)
-            throws IOException {
-        writeString(method);
-    }
-
-    /**
-     * Completes.
-     * <p>
-     * <code><pre>
-     * z
-     * </pre></code>
-     */
-    @Override
-    public void completeCall()
-            throws IOException {
-    /*
-    flushIfFull();
-    
-    _buffer[_offset++] = (byte) 'Z';
-    */
-    }
-
-    /**
-     * Starts the reply
-     * <p>
-     * <p>A successful completion will have a single value:
-     * <p>
-     * <pre>
-     * R
-     * </pre>
-     */
-    @Override
-    public void startReply()
-            throws IOException {
-        writeVersion();
-
-        flushIfFull();
-
-        _buffer[_offset++] = (byte) 'R';
-    }
-
-    public void writeVersion()
-            throws IOException {
-        flushIfFull();
-        _buffer[_offset++] = (byte) 'H';
-        _buffer[_offset++] = (byte) 2;
-        _buffer[_offset++] = (byte) 0;
-    }
-
-    /**
-     * Completes reading the reply
-     * <p>
-     * <p>A successful completion will have a single value:
-     * <p>
-     * <pre>
-     * z
-     * </pre>
-     */
-    @Override
-    public void completeReply()
-            throws IOException {
-    }
-
-    /**
-     * Starts a packet
-     * <p>
-     * <p>A message contains several objects encapsulated by a length</p>
-     * <p>
-     * <pre>
-     * p x02 x00
-     * </pre>
-     */
-    public void startMessage()
-            throws IOException {
-        flushIfFull();
-
-        _buffer[_offset++] = (byte) 'p';
-        _buffer[_offset++] = (byte) 2;
-        _buffer[_offset++] = (byte) 0;
-    }
-
-    /**
-     * Completes reading the message
-     * <p>
-     * <p>A successful completion will have a single value:
-     * <p>
-     * <pre>
-     * z
-     * </pre>
-     */
-    public void completeMessage()
-            throws IOException {
-        flushIfFull();
-
-        _buffer[_offset++] = (byte) 'z';
-    }
-
-    /**
-     * Writes a fault.  The fault will be written
-     * as a descriptive string followed by an object:
-     * <p>
-     * <code><pre>
-     * F map
-     * </pre></code>
-     * <p>
-     * <code><pre>
-     * F H
-     * \x04code
-     * \x10the fault code
-     * <p>
-     * \x07message
-     * \x11the fault message
-     * <p>
-     * \x06detail
-     * M\xnnjavax.ejb.FinderException
-     *     ...
-     * Z
-     * Z
-     * </pre></code>
-     *
-     * @param code the fault code, a three digit
-     */
-    @Override
-    public void writeFault(String code, String message, Object detail)
-            throws IOException {
-        flushIfFull();
-
-        writeVersion();
-
-        _buffer[_offset++] = (byte) 'F';
-        _buffer[_offset++] = (byte) 'H';
-
-        _refs.put(new HashMap(), _refs.size());
-
-        writeString("code");
-        writeString(code);
-
-        writeString("message");
-        writeString(message);
-
-        if (detail != null) {
-            writeString("detail");
-            writeObject(detail);
-        }
-
-        flushIfFull();
-        _buffer[_offset++] = (byte) 'Z';
-    }
-
-    /**
-     * Writes any object to the output stream.
-     */
-    @Override
-    public void writeObject(Object object)
-            throws IOException {
-        if (object == null) {
-            writeNull();
-            return;
-        }
-
-        Serializer serializer;
-
-        serializer = findSerializerFactory().getSerializer(object.getClass());
-
-        serializer.writeObject(object, this);
-    }
-
-    /**
-     * Writes the list header to the stream.  List writers will call
-     * <code>writeListBegin</code> followed by the list contents and then
-     * call <code>writeListEnd</code>.
-     * <p>
-     * <code><pre>
-     * list ::= V type value* Z
-     *      ::= v type int value*
-     * </pre></code>
-     *
-     * @return true for variable lists, false for fixed lists
-     */
-    @Override
-    public boolean writeListBegin(int length, String type)
-            throws IOException {
-        flushIfFull();
-
-        if (length < 0) {
-            if (type != null) {
-                _buffer[_offset++] = (byte) BC_LIST_VARIABLE;
-                writeType(type);
-            } else
-                _buffer[_offset++] = (byte) BC_LIST_VARIABLE_UNTYPED;
-
-            return true;
-        } else if (length <= LIST_DIRECT_MAX) {
-            if (type != null) {
-                _buffer[_offset++] = (byte) (BC_LIST_DIRECT + length);
-                writeType(type);
-            } else {
-                _buffer[_offset++] = (byte) (BC_LIST_DIRECT_UNTYPED + length);
-            }
-
-            return false;
-        } else {
-            if (type != null) {
-                _buffer[_offset++] = (byte) BC_LIST_FIXED;
-                writeType(type);
-            } else {
-                _buffer[_offset++] = (byte) BC_LIST_FIXED_UNTYPED;
-            }
-
-            writeInt(length);
-
-            return false;
-        }
-    }
-
-    /**
-     * Writes the tail of the list to the stream for a variable-length list.
-     */
-    @Override
-    public void writeListEnd()
-            throws IOException {
-        flushIfFull();
-
-        _buffer[_offset++] = (byte) BC_END;
-    }
-
-    /**
-     * Writes the map header to the stream.  Map writers will call
-     * <code>writeMapBegin</code> followed by the map contents and then
-     * call <code>writeMapEnd</code>.
-     * <p>
-     * <code><pre>
-     * map ::= M type (<value> <value>)* Z
-     *     ::= H (<value> <value>)* Z
-     * </pre></code>
-     */
-    @Override
-    public void writeMapBegin(String type)
-            throws IOException {
-        if (SIZE < _offset + 32)
-            flush();
-
-        if (type != null) {
-            _buffer[_offset++] = BC_MAP;
-
-            writeType(type);
-        } else
-            _buffer[_offset++] = BC_MAP_UNTYPED;
-    }
-
-    /**
-     * Writes the tail of the map to the stream.
-     */
-    @Override
-    public void writeMapEnd()
-            throws IOException {
-        if (SIZE < _offset + 32)
-            flush();
-
-        _buffer[_offset++] = (byte) BC_END;
-    }
-
-    /**
-     * Writes the object definition
-     * <p>
-     * <code><pre>
-     * C &lt;string> &lt;int> &lt;string>*
-     * </pre></code>
-     */
-    @Override
-    public int writeObjectBegin(String type)
-            throws IOException {
-        if (_classRefs == null)
-            _classRefs = new HashMap();
-
-        Integer refV = (Integer) _classRefs.get(type);
-
-        if (refV != null) {
-            int ref = refV.intValue();
-
-            if (SIZE < _offset + 32)
-                flush();
-
-            if (ref <= OBJECT_DIRECT_MAX) {
-                _buffer[_offset++] = (byte) (BC_OBJECT_DIRECT + ref);
-            } else {
-                _buffer[_offset++] = (byte) 'O';
-                writeInt(ref);
-            }
-
-            return ref;
-        } else {
-            int ref = _classRefs.size();
-
-            _classRefs.put(type, Integer.valueOf(ref));
-
-            if (SIZE < _offset + 32)
-                flush();
-
-            _buffer[_offset++] = (byte) 'C';
-
-            writeString(type);
-
-            return -1;
-        }
-    }
-
-    /**
-     * Writes the tail of the class definition to the stream.
-     */
-    @Override
-    public void writeClassFieldLength(int len)
-            throws IOException {
-        writeInt(len);
-    }
-
-    /**
-     * Writes the tail of the object definition to the stream.
-     */
-    @Override
-    public void writeObjectEnd()
-            throws IOException {
-    }
-
-    /**
-     * <code><pre>
-     * type ::= string
-     *      ::= int
-     * </code></pre>
-     */
-    private void writeType(String type)
-            throws IOException {
-        flushIfFull();
-
-        int len = type.length();
-        if (len == 0) {
-            throw new IllegalArgumentException("empty type is not allowed");
-        }
-
-        if (_typeRefs == null)
-            _typeRefs = new HashMap();
-
-        Integer typeRefV = (Integer) _typeRefs.get(type);
-
-        if (typeRefV != null) {
-            int typeRef = typeRefV.intValue();
-
-            writeInt(typeRef);
-        } else {
-            _typeRefs.put(type, Integer.valueOf(_typeRefs.size()));
-
-            writeString(type);
-        }
-    }
-
-    /**
-     * Writes a boolean value to the stream.  The boolean will be written
-     * with the following syntax:
-     * <p>
-     * <code><pre>
-     * T
-     * F
-     * </pre></code>
-     *
-     * @param value the boolean value to write.
-     */
-    @Override
-    public void writeBoolean(boolean value)
-            throws IOException {
-        if (SIZE < _offset + 16)
-            flush();
-
-        if (value)
-            _buffer[_offset++] = (byte) 'T';
-        else
-            _buffer[_offset++] = (byte) 'F';
-    }
-
-    /**
-     * Writes an integer value to the stream.  The integer will be written
-     * with the following syntax:
-     * <p>
-     * <code><pre>
-     * I b32 b24 b16 b8
-     * </pre></code>
-     *
-     * @param value the integer value to write.
-     */
-    @Override
-    public void writeInt(int value)
-            throws IOException {
-        int offset = _offset;
-        byte[] buffer = _buffer;
-
-        if (SIZE <= offset + 16) {
-            flush();
-            offset = _offset;
-        }
-
-        if (INT_DIRECT_MIN <= value && value <= INT_DIRECT_MAX)
-            buffer[offset++] = (byte) (value + BC_INT_ZERO);
-        else if (INT_BYTE_MIN <= value && value <= INT_BYTE_MAX) {
-            buffer[offset++] = (byte) (BC_INT_BYTE_ZERO + (value >> 8));
-            buffer[offset++] = (byte) (value);
-        } else if (INT_SHORT_MIN <= value && value <= INT_SHORT_MAX) {
-            buffer[offset++] = (byte) (BC_INT_SHORT_ZERO + (value >> 16));
-            buffer[offset++] = (byte) (value >> 8);
-            buffer[offset++] = (byte) (value);
-        } else {
-            buffer[offset++] = (byte) ('I');
-            buffer[offset++] = (byte) (value >> 24);
-            buffer[offset++] = (byte) (value >> 16);
-            buffer[offset++] = (byte) (value >> 8);
-            buffer[offset++] = (byte) (value);
-        }
-
-        _offset = offset;
-    }
-
-    /**
-     * Writes a long value to the stream.  The long will be written
-     * with the following syntax:
-     * <p>
-     * <code><pre>
-     * L b64 b56 b48 b40 b32 b24 b16 b8
-     * </pre></code>
-     *
-     * @param value the long value to write.
-     */
-    @Override
-    public void writeLong(long value)
-            throws IOException {
-        int offset = _offset;
-        byte[] buffer = _buffer;
-
-        if (SIZE <= offset + 16) {
-            flush();
-            offset = _offset;
-        }
-
-        if (LONG_DIRECT_MIN <= value && value <= LONG_DIRECT_MAX) {
-            buffer[offset++] = (byte) (value + BC_LONG_ZERO);
-        } else if (LONG_BYTE_MIN <= value && value <= LONG_BYTE_MAX) {
-            buffer[offset++] = (byte) (BC_LONG_BYTE_ZERO + (value >> 8));
-            buffer[offset++] = (byte) (value);
-        } else if (LONG_SHORT_MIN <= value && value <= LONG_SHORT_MAX) {
-            buffer[offset++] = (byte) (BC_LONG_SHORT_ZERO + (value >> 16));
-            buffer[offset++] = (byte) (value >> 8);
-            buffer[offset++] = (byte) (value);
-        } else if (-0x80000000L <= value && value <= 0x7fffffffL) {
-            buffer[offset + 0] = (byte) BC_LONG_INT;
-            buffer[offset + 1] = (byte) (value >> 24);
-            buffer[offset + 2] = (byte) (value >> 16);
-            buffer[offset + 3] = (byte) (value >> 8);
-            buffer[offset + 4] = (byte) (value);
-
-            offset += 5;
-        } else {
-            buffer[offset + 0] = (byte) 'L';
-            buffer[offset + 1] = (byte) (value >> 56);
-            buffer[offset + 2] = (byte) (value >> 48);
-            buffer[offset + 3] = (byte) (value >> 40);
-            buffer[offset + 4] = (byte) (value >> 32);
-            buffer[offset + 5] = (byte) (value >> 24);
-            buffer[offset + 6] = (byte) (value >> 16);
-            buffer[offset + 7] = (byte) (value >> 8);
-            buffer[offset + 8] = (byte) (value);
-
-            offset += 9;
-        }
-
-        _offset = offset;
-    }
-
-    /**
-     * Writes a double value to the stream.  The double will be written
-     * with the following syntax:
-     * <p>
-     * <code><pre>
-     * D b64 b56 b48 b40 b32 b24 b16 b8
-     * </pre></code>
-     *
-     * @param value the double value to write.
-     */
-    @Override
-    public void writeDouble(double value)
-            throws IOException {
-        int offset = _offset;
-        byte[] buffer = _buffer;
-
-        if (SIZE <= offset + 16) {
-            flush();
-            offset = _offset;
-        }
-
-        int intValue = (int) value;
-
-        if (intValue == value) {
-            if (intValue == 0) {
-                buffer[offset++] = (byte) BC_DOUBLE_ZERO;
-
-                _offset = offset;
-
-                return;
-            } else if (intValue == 1) {
-                buffer[offset++] = (byte) BC_DOUBLE_ONE;
-
-                _offset = offset;
-
-                return;
-            } else if (-0x80 <= intValue && intValue < 0x80) {
-                buffer[offset++] = (byte) BC_DOUBLE_BYTE;
-                buffer[offset++] = (byte) intValue;
-
-                _offset = offset;
-
-                return;
-            } else if (-0x8000 <= intValue && intValue < 0x8000) {
-                buffer[offset + 0] = (byte) BC_DOUBLE_SHORT;
-                buffer[offset + 1] = (byte) (intValue >> 8);
-                buffer[offset + 2] = (byte) intValue;
-
-                _offset = offset + 3;
-
-                return;
-            }
-        }
-
-        int mills = (int) (value * 1000);
-
-        if (0.001 * mills == value) {
-            buffer[offset + 0] = (byte) (BC_DOUBLE_MILL);
-            buffer[offset + 1] = (byte) (mills >> 24);
-            buffer[offset + 2] = (byte) (mills >> 16);
-            buffer[offset + 3] = (byte) (mills >> 8);
-            buffer[offset + 4] = (byte) (mills);
-
-            _offset = offset + 5;
-
-            return;
-        }
-
... 14633 lines suppressed ...