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
- * </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 <type> name for a <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 <string> <int> <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 ...