This is an automated email from the ASF dual-hosted git repository.
rainyu pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/dubbo-hessian-lite.git
The following commit(s) were added to refs/heads/master by this push:
new caff4e14 perf: adjust handle-used xxxSerializers from overriding
`writeObject` method to overriding `writeReplace` method (#92)
caff4e14 is described below
commit caff4e147c9c3ec8c8ef7705763afee6122179fa
Author: Ares_xue <[email protected]>
AuthorDate: Wed Sep 24 23:54:45 2025 +0800
perf: adjust handle-used xxxSerializers from overriding `writeObject`
method to overriding `writeReplace` method (#92)
* fix: CalendarSerializer causes ref count errors, refer to
com.alibaba.com.caucho.hessian.io.WriteReplaceSerializer for repair
* refactor: The xxxSerializers that used HessianHandle implementation to
serialize object implement writeReplace to decrease resource occupation.
* revert: Rollback of incompatible code
* fix: Replenish a license header (ASF)
* clean: remove redundant Calendar test case.
clean: remove unused local variables.
* refactor: The JapaneseDateSerializer that used HessianHandle
implementation to serialize object implement writeReplace to decrease resource
occupation.
* refactor: The ZoneIdSerializer that used HessianHandle implementation to
serialize object implement writeReplace to decrease resource occupation.
* refactor: Add reference checks for xxxSerializers that need to be checked.
* refactor: Change the Serializer that directly writes a new replaced
object writeObject (does not implement writeReplace) to implement the
writeReplace interface to reduce resource usage.
* clean: Remove redundant Null checks
* fix: The length may be less than
0(com.alibaba.com.caucho.hessian.io.Hessian2Input#readObject:2356)
* refactor: Add the throw exception to the signature of the writeReplace
method
* refactor: The exception thrown by writeReplace should be IOException.
* fix: Since AnnotationSerializer supports references,
AnnotationDeserializer must set in.setRef(ref, annotation) accordingly after
in.addRef(null); otherwise it will result in a reference to null. I have also
checked other in.addRef(null).
* fix: Fix WeekFieldsDeserializer's handling of ref
* test: add testCollection for Modified xxxSerializer
* perf: When Annotation deserializing allocate init capacity directly
according to the expected size to avoid resize.
---------
Co-authored-by: xuebing <[email protected]>
---
.../com/caucho/hessian/io/AbstractSerializer.java | 2 +-
.../caucho/hessian/io/AnnotationDeserializer.java | 22 ++++---
.../com/caucho/hessian/io/BitSetSerializer.java | 12 +---
.../com/caucho/hessian/io/ByteArraySerializer.java | 5 +-
.../com/caucho/hessian/io/ClassSerializer.java | 31 +++++-----
.../caucho/hessian/io/CollectionDeserializer.java | 12 ++--
.../com/caucho/hessian/io/EnumSetSerializer.java | 16 ++---
.../caucho/hessian/io/InetAddressSerializer.java | 13 +---
.../caucho/hessian/io/InputStreamSerializer.java | 6 +-
.../com/caucho/hessian/io/LocaleSerializer.java | 13 +---
.../com/caucho/hessian/io/MapDeserializer.java | 2 +-
.../caucho/hessian/io/ObjectHandleSerializer.java | 23 +++----
.../com/caucho/hessian/io/SqlDateSerializer.java | 33 +++++-----
.../caucho/hessian/io/StringValueSerializer.java | 33 +++++-----
.../hessian/io/atomic/LongAdderSerializer.java | 3 +
.../chronology/AbstractChronologySerializer.java | 11 +---
.../ChronoLocalDateTimeImplSerializer.java | 11 +---
.../io/chronology/ChronoPeriodImplSerializer.java | 11 +---
.../ChronoZonedDateTimeImplSerializer.java | 11 +---
.../io/chronology/HijrahDateSerializer.java | 11 +---
...Seriailzer.java => JapaneseDateSerializer.java} | 14 ++---
.../io/chronology/JapaneseEraSerializer.java | 11 +---
.../io/chronology/MinguoDateSerializer.java | 11 +---
.../io/chronology/ThaiBuddhistDateSerializer.java | 11 +---
.../hessian/io/java8/DurationSerializer.java | 12 +---
.../caucho/hessian/io/java8/InstantSerializer.java | 12 +---
.../hessian/io/java8/LocalDateSerializer.java | 14 ++---
.../hessian/io/java8/LocalDateTimeSerializer.java | 13 ++--
.../hessian/io/java8/LocalTimeSerializer.java | 12 ++--
.../hessian/io/java8/MonthDaySerializer.java | 12 +---
.../hessian/io/java8/OffsetDateTimeSerializer.java | 12 +---
.../hessian/io/java8/OffsetTimeSerializer.java | 12 +---
.../caucho/hessian/io/java8/PeriodSerializer.java | 12 +---
.../SynchronizedRandomAccessListSerializer.java | 11 +---
.../UnmodifiableRandomAccessListSerializer.java | 11 +---
.../hessian/io/java8/WeekFieldsDeserializer.java | 4 +-
.../hessian/io/java8/YearMonthSerializer.java | 12 +---
.../caucho/hessian/io/java8/YearSerializer.java | 12 +---
.../caucho/hessian/io/java8/ZoneIdSerializer.java | 10 +--
.../hessian/io/java8/ZoneOffsetSerializer.java | 12 +---
.../hessian/io/java8/ZonedDateTimeSerializer.java | 12 +---
...erializer.java => ImmutableListSerializer.java} | 14 ++---
...Serializer.java => ImmutableMapSerializer.java} | 14 ++---
...Serializer.java => ImmutableSetSerializer.java} | 14 ++---
.../caucho/hessian/io/java9/List12Serializer.java | 37 -----------
.../caucho/hessian/io/java9/Map1Serializer.java | 37 -----------
.../caucho/hessian/io/java9/Set12Serializer.java | 37 -----------
.../caucho/hessian/io/java9/SubListSerializer.java | 37 -----------
.../hessian/io/socket/Inet4AddressSerializer.java | 3 +
.../hessian/io/socket/Inet6AddressSerializer.java | 3 +
.../io/socket/InetSocketAddressSerializer.java | 3 +
.../caucho/hessian/io/socket/URISerializer.java | 3 +
.../socket/UnixDomainSocketAddressSerializer.java | 3 +
.../resources/META-INF/dubbo/hessian/serializers | 16 ++---
.../apache/dubbo/hessian/java11/ImmutableTest.java | 52 ++++++++++++++++
.../apache/dubbo/hessian/java17/RecordTest.java | 72 ++++++++++++++++++++++
.../apache/dubbo/hessian/java17/StreamTest.java | 9 +++
.../java17/UnixDomainSocketAddressTest.java | 10 +++
.../hessian/java17/base/SerializeTestBase.java | 21 +++++++
.../com/caucho/hessian/io/AnnotationTest.java | 10 +++
.../com/caucho/hessian/io/BigDecimalTest.java | 10 +++
.../com/caucho/hessian/io/BigIntegerTest.java | 10 +++
.../caucho/hessian/io/BitSetSerializerTest.java | 13 ++++
.../alibaba/com/caucho/hessian/io/ClockTest.java | 10 +++
.../hessian/io/CollectionSerializerTest.java | 21 +++++++
.../com/caucho/hessian/io/CollectionsTest.java | 27 ++++++++
.../hessian/io/ConcurrentLinkedDequeTest.java | 19 ++++++
.../hessian/io/ConcurrentSkipListMapTest.java | 13 ++++
.../com/caucho/hessian/io/CurrencyTest.java | 10 +++
.../caucho/hessian/io/DateFormatSymbolsTest.java | 22 +++++++
.../alibaba/com/caucho/hessian/io/EnumSetTest.java | 10 +++
.../alibaba/com/caucho/hessian/io/FileTest.java | 10 +++
.../com/caucho/hessian/io/Hessian2UUIDTest.java | 15 +++++
.../hessian/io/HessianJavaSerializeTest.java | 46 ++++++++++++++
.../caucho/hessian/io/LinkedTransferQueueTest.java | 19 ++++++
.../caucho/hessian/io/LocaleSerializerTest.java | 10 +++
.../alibaba/com/caucho/hessian/io/LocaleTest.java | 10 +++
.../com/caucho/hessian/io/NumberFormatTest.java | 21 +++++++
.../hessian/io/PriorityBlockingQueueTest.java | 20 ++++++
.../com/caucho/hessian/io/PropertiesTest.java | 12 ++++
.../com/caucho/hessian/io/SimpleTimeZoneTest.java | 10 +++
.../com/caucho/hessian/io/StringBufferTest.java | 17 +++++
.../com/caucho/hessian/io/StringBuilderTest.java | 17 +++++
.../caucho/hessian/io/SynchronousQueueTest.java | 19 ++++++
.../com/caucho/hessian/io/ThrowableTest.java | 19 ++++++
.../alibaba/com/caucho/hessian/io/TreeMapTest.java | 13 ++++
.../alibaba/com/caucho/hessian/io/TreeSetTest.java | 14 +++++
.../com/alibaba/com/caucho/hessian/io/URITest.java | 10 +++
.../alibaba/com/caucho/hessian/io/VectorTest.java | 14 +++++
.../com/caucho/hessian/io/WeekFieldsTest.java | 10 +++
.../caucho/hessian/io/atomic/LongAdderTest.java | 18 ++++++
.../caucho/hessian/io/base/SerializeTestBase.java | 20 +++++-
.../caucho/hessian/io/issue73/SerializeTest.java | 29 +++++++++
93 files changed, 910 insertions(+), 546 deletions(-)
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
index 456dbc14..d5447b96 100644
---
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
@@ -106,7 +106,7 @@ abstract public class AbstractSerializer implements
Serializer {
}
}
- protected Object writeReplace(Object obj) {
+ protected Object writeReplace(Object obj) throws IOException {
return null;
}
diff --git
a/hessian-lite/src/main/java/com/alibaba/com/caucho/hessian/io/AnnotationDeserializer.java
b/hessian-lite/src/main/java/com/alibaba/com/caucho/hessian/io/AnnotationDeserializer.java
index 7b04ccf8..c6ca0fed 100644
---
a/hessian-lite/src/main/java/com/alibaba/com/caucho/hessian/io/AnnotationDeserializer.java
+++
b/hessian-lite/src/main/java/com/alibaba/com/caucho/hessian/io/AnnotationDeserializer.java
@@ -88,10 +88,13 @@ public class AnnotationDeserializer extends
AbstractMapDeserializer {
in.readMapEnd();
- return Proxy.newProxyInstance(_annType.getClassLoader(),
- new Class[]{_annType},
- new AnnotationInvocationHandler(_annType, valueMap));
+ Object annotation =
Proxy.newProxyInstance(_annType.getClassLoader(),
+ new Class[]{_annType},
+ new AnnotationInvocationHandler(_annType, valueMap));
+ in.setRef(ref, annotation);
+
+ return annotation;
} catch (IOException e) {
throw e;
} catch (Exception e) {
@@ -105,9 +108,9 @@ public class AnnotationDeserializer extends
AbstractMapDeserializer {
String[] fieldNames = (String[]) fields;
try {
- in.addRef(null);
+ int ref = in.addRef(null);
- HashMap<String, Object> valueMap = new HashMap<String, Object>(8);
+ HashMap<String, Object> valueMap = new
HashMap<>(MapUtil.capacity(fieldNames.length));
for (int i = 0; i < fieldNames.length; i++) {
String name = fieldNames[i];
@@ -115,10 +118,13 @@ public class AnnotationDeserializer extends
AbstractMapDeserializer {
valueMap.put(name, in.readObject());
}
- return Proxy.newProxyInstance(_annType.getClassLoader(),
- new Class[]{_annType},
- new AnnotationInvocationHandler(_annType, valueMap));
+ Object annotation =
Proxy.newProxyInstance(_annType.getClassLoader(),
+ new Class[]{_annType},
+ new AnnotationInvocationHandler(_annType, valueMap));
+
+ in.setRef(ref, annotation);
+ return annotation;
} catch (IOException e) {
throw e;
} catch (Exception e) {
diff --git
a/hessian-lite/src/main/java/com/alibaba/com/caucho/hessian/io/BitSetSerializer.java
b/hessian-lite/src/main/java/com/alibaba/com/caucho/hessian/io/BitSetSerializer.java
index bc5099a4..2c55ec3b 100644
---
a/hessian-lite/src/main/java/com/alibaba/com/caucho/hessian/io/BitSetSerializer.java
+++
b/hessian-lite/src/main/java/com/alibaba/com/caucho/hessian/io/BitSetSerializer.java
@@ -49,7 +49,6 @@
package com.alibaba.com.caucho.hessian.io;
-import java.io.IOException;
import java.util.BitSet;
/**
@@ -63,14 +62,7 @@ public class BitSetSerializer extends AbstractSerializer {
}
@Override
- public void writeObject(Object obj, AbstractHessianOutput out)
- throws IOException {
- if (obj == null)
- out.writeNull();
- else {
- BitSet bitSet = (BitSet) obj;
-
- out.writeObject(new BitSetHandle(bitSet.toLongArray()));
- }
+ public Object writeReplace(Object obj){
+ return new BitSetHandle(((BitSet) obj).toLongArray());
}
}
diff --git
a/hessian-lite/src/main/java/com/alibaba/com/caucho/hessian/io/ByteArraySerializer.java
b/hessian-lite/src/main/java/com/alibaba/com/caucho/hessian/io/ByteArraySerializer.java
index 6f15715c..c8649c02 100644
---
a/hessian-lite/src/main/java/com/alibaba/com/caucho/hessian/io/ByteArraySerializer.java
+++
b/hessian-lite/src/main/java/com/alibaba/com/caucho/hessian/io/ByteArraySerializer.java
@@ -70,9 +70,6 @@ public class ByteArraySerializer extends AbstractSerializer
throws IOException {
byte[] data = (byte[]) obj;
- if (data != null)
- out.writeBytes(data, 0, data.length);
- else
- out.writeNull();
+ out.writeBytes(data, 0, data.length);
}
}
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
index b65411e5..d8d62822 100644
---
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
@@ -56,28 +56,25 @@ import java.io.IOException;
public class ClassSerializer extends AbstractSerializer {
public void writeObject(Object obj, AbstractHessianOutput out)
throws IOException {
+ if (out.addRef(obj)) {
+ return;
+ }
+
Class cl = (Class) obj;
+ int ref = out.writeObjectBegin("java.lang.Class");
- if (cl == null) {
- out.writeNull();
- } else if (out.addRef(obj)) {
- return;
+ if (ref < -1) {
+ out.writeString("name");
+ out.writeString(cl.getName());
+ out.writeMapEnd();
} else {
- int ref = out.writeObjectBegin("java.lang.Class");
-
- if (ref < -1) {
+ if (ref == -1) {
+ out.writeInt(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());
+ 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
index 3d1447cb..fceb98a7 100644
---
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
@@ -129,9 +129,9 @@ public class CollectionDeserializer extends
AbstractListDeserializer {
throws IOException {
Collection list = null;
- if (_type == null)
- list = new ArrayList(expectedSize);
- else if (!_type.isInterface()) {
+ if (_type == null) {
+ list = expectedSize <= 0 ? new ArrayList() : new
ArrayList(expectedSize);
+ } else if (!_type.isInterface()) {
try {
list = (Collection) _type.newInstance();
} catch (Exception e) {
@@ -143,9 +143,9 @@ public class CollectionDeserializer extends
AbstractListDeserializer {
list = new TreeSet();
else if (Set.class.isAssignableFrom(_type))
list = new HashSet(MapUtil.capacity(expectedSize));
- else if (Collection.class.isAssignableFrom(_type))
- list = new ArrayList(expectedSize);
- else {
+ else if (Collection.class.isAssignableFrom(_type)) {
+ list = expectedSize <= 0 ? new ArrayList() : new
ArrayList(expectedSize);
+ } else {
try {
list = (Collection) _type.newInstance();
} catch (Exception e) {
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
index c512a507..585d99fd 100644
---
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
@@ -17,9 +17,9 @@
package com.alibaba.com.caucho.hessian.io;
import com.alibaba.com.caucho.hessian.HessianException;
+import java.io.IOException;
import sun.misc.Unsafe;
-import java.io.IOException;
import java.lang.reflect.Field;
import java.util.EnumSet;
import java.util.logging.Level;
@@ -67,15 +67,11 @@ public class EnumSetSerializer extends AbstractSerializer {
}
@Override
- public void writeObject(Object obj, AbstractHessianOutput out) throws
IOException {
- if (obj == null) {
- out.writeNull();
- } else {
- EnumSet enumSet = (EnumSet) obj;
- Class type = getElementClass(enumSet);
- Object[] objects = enumSet.toArray();
- out.writeObject(new EnumSetHandler(type, objects));
- }
+ public Object writeReplace(Object obj) throws IOException {
+ EnumSet enumSet = (EnumSet) obj;
+ Class type = getElementClass(enumSet);
+ Object[] objects = enumSet.toArray();
+ return new EnumSetHandler(type, objects);
}
private Class<?> getElementClass(EnumSet enumSet) throws IOException {
diff --git
a/hessian-lite/src/main/java/com/alibaba/com/caucho/hessian/io/InetAddressSerializer.java
b/hessian-lite/src/main/java/com/alibaba/com/caucho/hessian/io/InetAddressSerializer.java
index c0785a6e..0a70ce6b 100644
---
a/hessian-lite/src/main/java/com/alibaba/com/caucho/hessian/io/InetAddressSerializer.java
+++
b/hessian-lite/src/main/java/com/alibaba/com/caucho/hessian/io/InetAddressSerializer.java
@@ -48,7 +48,6 @@
package com.alibaba.com.caucho.hessian.io;
-import java.io.IOException;
import java.net.InetAddress;
/**
@@ -62,14 +61,8 @@ public class InetAddressSerializer extends
AbstractSerializer {
}
@Override
- public void writeObject(Object obj, AbstractHessianOutput out)
- throws IOException {
- if (obj == null)
- out.writeNull();
- else {
- InetAddress addr = (InetAddress) obj;
- out.writeObject(new InetAddressHandle(addr.getHostName(),
- addr.getAddress()));
- }
+ public Object writeReplace(Object obj) {
+ InetAddress addr = (InetAddress) obj;
+ return new InetAddressHandle(addr.getHostName(), addr.getAddress());
}
}
diff --git
a/hessian-lite/src/main/java/com/alibaba/com/caucho/hessian/io/InputStreamSerializer.java
b/hessian-lite/src/main/java/com/alibaba/com/caucho/hessian/io/InputStreamSerializer.java
index ecb51652..5cd4c580 100644
---
a/hessian-lite/src/main/java/com/alibaba/com/caucho/hessian/io/InputStreamSerializer.java
+++
b/hessian-lite/src/main/java/com/alibaba/com/caucho/hessian/io/InputStreamSerializer.java
@@ -62,10 +62,6 @@ public class InputStreamSerializer extends
AbstractSerializer {
throws IOException {
InputStream is = (InputStream) obj;
- if (is == null)
- out.writeNull();
- else {
- out.writeByteStream(is);
- }
+ out.writeByteStream(is);
}
}
diff --git
a/hessian-lite/src/main/java/com/alibaba/com/caucho/hessian/io/LocaleSerializer.java
b/hessian-lite/src/main/java/com/alibaba/com/caucho/hessian/io/LocaleSerializer.java
index 41138d8a..f165f4e3 100644
---
a/hessian-lite/src/main/java/com/alibaba/com/caucho/hessian/io/LocaleSerializer.java
+++
b/hessian-lite/src/main/java/com/alibaba/com/caucho/hessian/io/LocaleSerializer.java
@@ -49,7 +49,6 @@
package com.alibaba.com.caucho.hessian.io;
-import java.io.IOException;
import java.util.Locale;
/**
@@ -57,14 +56,8 @@ import java.util.Locale;
*/
public class LocaleSerializer extends AbstractSerializer {
@Override
- public void writeObject(Object obj, AbstractHessianOutput out)
- throws IOException {
- if (obj == null)
- out.writeNull();
- else {
- Locale locale = (Locale) obj;
-
- out.writeObject(new LocaleHandle(locale.toString()));
- }
+ public Object writeReplace(Object obj) {
+ Locale locale = (Locale) obj;
+ return new LocaleHandle(locale.toString());
}
}
diff --git
a/hessian-lite/src/main/java/com/alibaba/com/caucho/hessian/io/MapDeserializer.java
b/hessian-lite/src/main/java/com/alibaba/com/caucho/hessian/io/MapDeserializer.java
index 45f99d4c..253540f7 100644
---
a/hessian-lite/src/main/java/com/alibaba/com/caucho/hessian/io/MapDeserializer.java
+++
b/hessian-lite/src/main/java/com/alibaba/com/caucho/hessian/io/MapDeserializer.java
@@ -152,7 +152,7 @@ public class MapDeserializer extends
AbstractMapDeserializer {
String[] fieldNames = (String[]) fields;
Map<Object, Object> map = createMap(fieldNames.length);
- int ref = in.addRef(map);
+ in.addRef(map);
for (int i = 0; i < fieldNames.length; i++) {
String name = fieldNames[i];
diff --git
a/hessian-lite/src/main/java/com/alibaba/com/caucho/hessian/io/ObjectHandleSerializer.java
b/hessian-lite/src/main/java/com/alibaba/com/caucho/hessian/io/ObjectHandleSerializer.java
index b135aa37..dfc969ea 100644
---
a/hessian-lite/src/main/java/com/alibaba/com/caucho/hessian/io/ObjectHandleSerializer.java
+++
b/hessian-lite/src/main/java/com/alibaba/com/caucho/hessian/io/ObjectHandleSerializer.java
@@ -58,21 +58,18 @@ public class ObjectHandleSerializer extends
AbstractSerializer {
public void writeObject(Object obj, AbstractHessianOutput out)
throws IOException {
- if (obj == null)
- out.writeNull();
- else {
- if (out.addRef(obj))
- return;
+ if (out.addRef(obj)) {
+ return;
+ }
- int ref = out.writeObjectBegin("object");
+ int ref = out.writeObjectBegin("object");
- if (ref < -1) {
- out.writeMapEnd();
- } else {
- if (ref == -1) {
- out.writeInt(0);
- out.writeObjectBegin("object");
- }
+ if (ref < -1) {
+ out.writeMapEnd();
+ } else {
+ if (ref == -1) {
+ out.writeInt(0);
+ out.writeObjectBegin("object");
}
}
}
diff --git
a/hessian-lite/src/main/java/com/alibaba/com/caucho/hessian/io/SqlDateSerializer.java
b/hessian-lite/src/main/java/com/alibaba/com/caucho/hessian/io/SqlDateSerializer.java
index c812c7ed..ddc6afa1 100644
---
a/hessian-lite/src/main/java/com/alibaba/com/caucho/hessian/io/SqlDateSerializer.java
+++
b/hessian-lite/src/main/java/com/alibaba/com/caucho/hessian/io/SqlDateSerializer.java
@@ -57,29 +57,26 @@ import java.util.Date;
public class SqlDateSerializer extends AbstractSerializer {
public void writeObject(Object obj, AbstractHessianOutput out)
throws IOException {
- if (obj == null)
- out.writeNull();
- else {
- Class cl = obj.getClass();
+ if (out.addRef(obj)) {
+ return;
+ }
- if (out.addRef(obj))
- return;
+ Class cl = obj.getClass();
- int ref = out.writeObjectBegin(cl.getName());
+ int ref = out.writeObjectBegin(cl.getName());
- if (ref < -1) {
+ if (ref < -1) {
+ out.writeString("value");
+ out.writeUTCDate(((Date) obj).getTime());
+ out.writeMapEnd();
+ } else {
+ if (ref == -1) {
+ out.writeInt(1);
out.writeString("value");
- out.writeUTCDate(((Date) obj).getTime());
- out.writeMapEnd();
- } else {
- if (ref == -1) {
- out.writeInt(1);
- out.writeString("value");
- out.writeObjectBegin(cl.getName());
- }
-
- out.writeUTCDate(((Date) obj).getTime());
+ out.writeObjectBegin(cl.getName());
}
+
+ out.writeUTCDate(((Date) obj).getTime());
}
}
}
diff --git
a/hessian-lite/src/main/java/com/alibaba/com/caucho/hessian/io/StringValueSerializer.java
b/hessian-lite/src/main/java/com/alibaba/com/caucho/hessian/io/StringValueSerializer.java
index 42ac4108..82dcb7bd 100644
---
a/hessian-lite/src/main/java/com/alibaba/com/caucho/hessian/io/StringValueSerializer.java
+++
b/hessian-lite/src/main/java/com/alibaba/com/caucho/hessian/io/StringValueSerializer.java
@@ -58,29 +58,26 @@ public class StringValueSerializer extends
AbstractSerializer {
public void writeObject(Object obj, AbstractHessianOutput out)
throws IOException {
- if (obj == null)
- out.writeNull();
- else {
- if (out.addRef(obj))
- return;
+ if (out.addRef(obj)) {
+ return;
+ }
- Class cl = obj.getClass();
+ Class cl = obj.getClass();
- int ref = out.writeObjectBegin(cl.getName());
+ int ref = out.writeObjectBegin(cl.getName());
- if (ref < -1) {
+ if (ref < -1) {
+ out.writeString("value");
+ out.writeString(obj.toString());
+ out.writeMapEnd();
+ } else {
+ if (ref == -1) {
+ out.writeInt(1);
out.writeString("value");
- out.writeString(obj.toString());
- out.writeMapEnd();
- } else {
- if (ref == -1) {
- out.writeInt(1);
- out.writeString("value");
- out.writeObjectBegin(cl.getName());
- }
-
- out.writeString(obj.toString());
+ out.writeObjectBegin(cl.getName());
}
+
+ out.writeString(obj.toString());
}
}
}
diff --git
a/hessian-lite/src/main/java/com/alibaba/com/caucho/hessian/io/atomic/LongAdderSerializer.java
b/hessian-lite/src/main/java/com/alibaba/com/caucho/hessian/io/atomic/LongAdderSerializer.java
index 2fa26299..716ae221 100644
---
a/hessian-lite/src/main/java/com/alibaba/com/caucho/hessian/io/atomic/LongAdderSerializer.java
+++
b/hessian-lite/src/main/java/com/alibaba/com/caucho/hessian/io/atomic/LongAdderSerializer.java
@@ -30,6 +30,9 @@ public class LongAdderSerializer extends AbstractSerializer {
@Override
public void writeObject(Object obj, AbstractHessianOutput out)
throws IOException {
+ if (out.addRef(obj)) {
+ return;
+ }
String replacedClName =
"java.util.concurrent.atomic.LongAdder$SerializationProxy";
diff --git
a/hessian-lite/src/main/java/com/alibaba/com/caucho/hessian/io/chronology/AbstractChronologySerializer.java
b/hessian-lite/src/main/java/com/alibaba/com/caucho/hessian/io/chronology/AbstractChronologySerializer.java
index dd8ff7b2..aef32626 100644
---
a/hessian-lite/src/main/java/com/alibaba/com/caucho/hessian/io/chronology/AbstractChronologySerializer.java
+++
b/hessian-lite/src/main/java/com/alibaba/com/caucho/hessian/io/chronology/AbstractChronologySerializer.java
@@ -16,21 +16,14 @@
*/
package com.alibaba.com.caucho.hessian.io.chronology;
-import com.alibaba.com.caucho.hessian.io.AbstractHessianOutput;
import com.alibaba.com.caucho.hessian.io.AbstractSerializer;
-import java.io.IOException;
import java.time.chrono.AbstractChronology;
public class AbstractChronologySerializer<T> extends AbstractSerializer {
@Override
- public void writeObject(Object obj, AbstractHessianOutput out) throws
IOException {
- if (obj == null) {
- out.writeNull();
- return;
- }
-
- out.writeObject(new AbstractChronologyHandle((AbstractChronology)
obj));
+ public Object writeReplace(Object obj) {
+ return new AbstractChronologyHandle((AbstractChronology) obj);
}
}
diff --git
a/hessian-lite/src/main/java/com/alibaba/com/caucho/hessian/io/chronology/ChronoLocalDateTimeImplSerializer.java
b/hessian-lite/src/main/java/com/alibaba/com/caucho/hessian/io/chronology/ChronoLocalDateTimeImplSerializer.java
index 53507405..a0742e93 100644
---
a/hessian-lite/src/main/java/com/alibaba/com/caucho/hessian/io/chronology/ChronoLocalDateTimeImplSerializer.java
+++
b/hessian-lite/src/main/java/com/alibaba/com/caucho/hessian/io/chronology/ChronoLocalDateTimeImplSerializer.java
@@ -16,21 +16,14 @@
*/
package com.alibaba.com.caucho.hessian.io.chronology;
-import com.alibaba.com.caucho.hessian.io.AbstractHessianOutput;
import com.alibaba.com.caucho.hessian.io.AbstractSerializer;
-import java.io.IOException;
import java.time.chrono.ChronoLocalDateTime;
public class ChronoLocalDateTimeImplSerializer <T> extends AbstractSerializer {
@Override
- public void writeObject(Object obj, AbstractHessianOutput out) throws
IOException {
- if (obj == null) {
- out.writeNull();
- return;
- }
-
- out.writeObject(new
ChronoLocalDateTimeImplHandle((ChronoLocalDateTime) obj));
+ public Object writeReplace(Object obj) {
+ return new ChronoLocalDateTimeImplHandle((ChronoLocalDateTime) obj);
}
}
diff --git
a/hessian-lite/src/main/java/com/alibaba/com/caucho/hessian/io/chronology/ChronoPeriodImplSerializer.java
b/hessian-lite/src/main/java/com/alibaba/com/caucho/hessian/io/chronology/ChronoPeriodImplSerializer.java
index 83a1804b..d950220d 100644
---
a/hessian-lite/src/main/java/com/alibaba/com/caucho/hessian/io/chronology/ChronoPeriodImplSerializer.java
+++
b/hessian-lite/src/main/java/com/alibaba/com/caucho/hessian/io/chronology/ChronoPeriodImplSerializer.java
@@ -16,21 +16,14 @@
*/
package com.alibaba.com.caucho.hessian.io.chronology;
-import com.alibaba.com.caucho.hessian.io.AbstractHessianOutput;
import com.alibaba.com.caucho.hessian.io.AbstractSerializer;
-import java.io.IOException;
import java.time.chrono.ChronoPeriod;
public class ChronoPeriodImplSerializer <T> extends AbstractSerializer {
@Override
- public void writeObject(Object obj, AbstractHessianOutput out) throws
IOException {
- if (obj == null) {
- out.writeNull();
- return;
- }
-
- out.writeObject(new ChronoPeriodImplHandle((ChronoPeriod) obj));
+ public Object writeReplace(Object obj) {
+ return new ChronoPeriodImplHandle((ChronoPeriod) obj);
}
}
diff --git
a/hessian-lite/src/main/java/com/alibaba/com/caucho/hessian/io/chronology/ChronoZonedDateTimeImplSerializer.java
b/hessian-lite/src/main/java/com/alibaba/com/caucho/hessian/io/chronology/ChronoZonedDateTimeImplSerializer.java
index 4f1e5489..c4aa313b 100644
---
a/hessian-lite/src/main/java/com/alibaba/com/caucho/hessian/io/chronology/ChronoZonedDateTimeImplSerializer.java
+++
b/hessian-lite/src/main/java/com/alibaba/com/caucho/hessian/io/chronology/ChronoZonedDateTimeImplSerializer.java
@@ -16,21 +16,14 @@
*/
package com.alibaba.com.caucho.hessian.io.chronology;
-import com.alibaba.com.caucho.hessian.io.AbstractHessianOutput;
import com.alibaba.com.caucho.hessian.io.AbstractSerializer;
-import java.io.IOException;
import java.time.chrono.ChronoZonedDateTime;
public class ChronoZonedDateTimeImplSerializer <T> extends AbstractSerializer {
@Override
- public void writeObject(Object obj, AbstractHessianOutput out) throws
IOException {
- if (obj == null) {
- out.writeNull();
- return;
- }
-
- out.writeObject(new
ChronoZonedDateTimeImplHandle((ChronoZonedDateTime) obj));
+ public Object writeReplace(Object obj) {
+ return new ChronoZonedDateTimeImplHandle((ChronoZonedDateTime) obj);
}
}
diff --git
a/hessian-lite/src/main/java/com/alibaba/com/caucho/hessian/io/chronology/HijrahDateSerializer.java
b/hessian-lite/src/main/java/com/alibaba/com/caucho/hessian/io/chronology/HijrahDateSerializer.java
index 220efded..f26f6ae7 100644
---
a/hessian-lite/src/main/java/com/alibaba/com/caucho/hessian/io/chronology/HijrahDateSerializer.java
+++
b/hessian-lite/src/main/java/com/alibaba/com/caucho/hessian/io/chronology/HijrahDateSerializer.java
@@ -16,21 +16,14 @@
*/
package com.alibaba.com.caucho.hessian.io.chronology;
-import com.alibaba.com.caucho.hessian.io.AbstractHessianOutput;
import com.alibaba.com.caucho.hessian.io.AbstractSerializer;
-import java.io.IOException;
import java.time.chrono.HijrahDate;
public class HijrahDateSerializer <T> extends AbstractSerializer {
@Override
- public void writeObject(Object obj, AbstractHessianOutput out) throws
IOException {
- if (obj == null) {
- out.writeNull();
- return;
- }
-
- out.writeObject(new HijrahDateHandle((HijrahDate) obj));
+ public Object writeReplace(Object obj) {
+ return new HijrahDateHandle((HijrahDate) obj);
}
}
diff --git
a/hessian-lite/src/main/java/com/alibaba/com/caucho/hessian/io/chronology/JapaneseDateSeriailzer.java
b/hessian-lite/src/main/java/com/alibaba/com/caucho/hessian/io/chronology/JapaneseDateSerializer.java
similarity index 70%
rename from
hessian-lite/src/main/java/com/alibaba/com/caucho/hessian/io/chronology/JapaneseDateSeriailzer.java
rename to
hessian-lite/src/main/java/com/alibaba/com/caucho/hessian/io/chronology/JapaneseDateSerializer.java
index 659bbd1a..2eb540bd 100644
---
a/hessian-lite/src/main/java/com/alibaba/com/caucho/hessian/io/chronology/JapaneseDateSeriailzer.java
+++
b/hessian-lite/src/main/java/com/alibaba/com/caucho/hessian/io/chronology/JapaneseDateSerializer.java
@@ -16,21 +16,15 @@
*/
package com.alibaba.com.caucho.hessian.io.chronology;
-import com.alibaba.com.caucho.hessian.io.AbstractHessianOutput;
import com.alibaba.com.caucho.hessian.io.AbstractSerializer;
-import java.io.IOException;
import java.time.chrono.JapaneseDate;
-public class JapaneseDateSeriailzer <T> extends AbstractSerializer {
+public class JapaneseDateSerializer<T> extends AbstractSerializer {
@Override
- public void writeObject(Object obj, AbstractHessianOutput out) throws
IOException {
- if (obj == null) {
- out.writeNull();
- return;
- }
-
- out.writeObject(new JapaneseDateHandle((JapaneseDate) obj));
+ public Object writeReplace(Object obj) {
+ return new JapaneseDateHandle((JapaneseDate) obj);
}
+
}
diff --git
a/hessian-lite/src/main/java/com/alibaba/com/caucho/hessian/io/chronology/JapaneseEraSerializer.java
b/hessian-lite/src/main/java/com/alibaba/com/caucho/hessian/io/chronology/JapaneseEraSerializer.java
index b910b8cf..0fe64dbb 100644
---
a/hessian-lite/src/main/java/com/alibaba/com/caucho/hessian/io/chronology/JapaneseEraSerializer.java
+++
b/hessian-lite/src/main/java/com/alibaba/com/caucho/hessian/io/chronology/JapaneseEraSerializer.java
@@ -16,21 +16,14 @@
*/
package com.alibaba.com.caucho.hessian.io.chronology;
-import com.alibaba.com.caucho.hessian.io.AbstractHessianOutput;
import com.alibaba.com.caucho.hessian.io.AbstractSerializer;
-import java.io.IOException;
import java.time.chrono.JapaneseEra;
public class JapaneseEraSerializer <T> extends AbstractSerializer {
@Override
- public void writeObject(Object obj, AbstractHessianOutput out) throws
IOException {
- if (obj == null) {
- out.writeNull();
- return;
- }
-
- out.writeObject(new JapaneseEraHandle((JapaneseEra) obj));
+ public Object writeReplace(Object obj) {
+ return new JapaneseEraHandle((JapaneseEra) obj);
}
}
diff --git
a/hessian-lite/src/main/java/com/alibaba/com/caucho/hessian/io/chronology/MinguoDateSerializer.java
b/hessian-lite/src/main/java/com/alibaba/com/caucho/hessian/io/chronology/MinguoDateSerializer.java
index 74a95f64..a921da84 100644
---
a/hessian-lite/src/main/java/com/alibaba/com/caucho/hessian/io/chronology/MinguoDateSerializer.java
+++
b/hessian-lite/src/main/java/com/alibaba/com/caucho/hessian/io/chronology/MinguoDateSerializer.java
@@ -16,21 +16,14 @@
*/
package com.alibaba.com.caucho.hessian.io.chronology;
-import com.alibaba.com.caucho.hessian.io.AbstractHessianOutput;
import com.alibaba.com.caucho.hessian.io.AbstractSerializer;
-import java.io.IOException;
import java.time.chrono.MinguoDate;
public class MinguoDateSerializer <T> extends AbstractSerializer {
@Override
- public void writeObject(Object obj, AbstractHessianOutput out) throws
IOException {
- if (obj == null) {
- out.writeNull();
- return;
- }
-
- out.writeObject(new MinguoDateHandle((MinguoDate) obj));
+ public Object writeReplace(Object obj) {
+ return new MinguoDateHandle((MinguoDate) obj);
}
}
diff --git
a/hessian-lite/src/main/java/com/alibaba/com/caucho/hessian/io/chronology/ThaiBuddhistDateSerializer.java
b/hessian-lite/src/main/java/com/alibaba/com/caucho/hessian/io/chronology/ThaiBuddhistDateSerializer.java
index 978c5fc9..befd08b8 100644
---
a/hessian-lite/src/main/java/com/alibaba/com/caucho/hessian/io/chronology/ThaiBuddhistDateSerializer.java
+++
b/hessian-lite/src/main/java/com/alibaba/com/caucho/hessian/io/chronology/ThaiBuddhistDateSerializer.java
@@ -16,21 +16,14 @@
*/
package com.alibaba.com.caucho.hessian.io.chronology;
-import com.alibaba.com.caucho.hessian.io.AbstractHessianOutput;
import com.alibaba.com.caucho.hessian.io.AbstractSerializer;
-import java.io.IOException;
import java.time.chrono.ThaiBuddhistDate;
public class ThaiBuddhistDateSerializer <T> extends AbstractSerializer {
@Override
- public void writeObject(Object obj, AbstractHessianOutput out) throws
IOException {
- if (obj == null) {
- out.writeNull();
- return;
- }
-
- out.writeObject(new ThaiBuddhistDateHandle((ThaiBuddhistDate) obj));
+ public Object writeReplace(Object obj) {
+ return new ThaiBuddhistDateHandle((ThaiBuddhistDate) obj);
}
}
diff --git
a/hessian-lite/src/main/java/com/alibaba/com/caucho/hessian/io/java8/DurationSerializer.java
b/hessian-lite/src/main/java/com/alibaba/com/caucho/hessian/io/java8/DurationSerializer.java
index ba30a6ee..719f4cd9 100755
---
a/hessian-lite/src/main/java/com/alibaba/com/caucho/hessian/io/java8/DurationSerializer.java
+++
b/hessian-lite/src/main/java/com/alibaba/com/caucho/hessian/io/java8/DurationSerializer.java
@@ -18,20 +18,12 @@
package com.alibaba.com.caucho.hessian.io.java8;
-import com.alibaba.com.caucho.hessian.io.AbstractHessianOutput;
import com.alibaba.com.caucho.hessian.io.AbstractSerializer;
-import java.io.IOException;
-
public class DurationSerializer<T> extends AbstractSerializer {
@Override
- public void writeObject(Object obj, AbstractHessianOutput out) throws
IOException {
- if (obj == null) {
- out.writeNull();
- return;
- }
-
- out.writeObject(new DurationHandle(obj));
+ public Object writeReplace(Object obj) {
+ return new DurationHandle(obj);
}
}
diff --git
a/hessian-lite/src/main/java/com/alibaba/com/caucho/hessian/io/java8/InstantSerializer.java
b/hessian-lite/src/main/java/com/alibaba/com/caucho/hessian/io/java8/InstantSerializer.java
index d31c4854..b15744a2 100755
---
a/hessian-lite/src/main/java/com/alibaba/com/caucho/hessian/io/java8/InstantSerializer.java
+++
b/hessian-lite/src/main/java/com/alibaba/com/caucho/hessian/io/java8/InstantSerializer.java
@@ -18,20 +18,12 @@
package com.alibaba.com.caucho.hessian.io.java8;
-import com.alibaba.com.caucho.hessian.io.AbstractHessianOutput;
import com.alibaba.com.caucho.hessian.io.AbstractSerializer;
-import java.io.IOException;
-
public class InstantSerializer<T> extends AbstractSerializer {
@Override
- public void writeObject(Object obj, AbstractHessianOutput out) throws
IOException {
- if (obj == null) {
- out.writeNull();
- return;
- }
-
- out.writeObject(new InstantHandle(obj));
+ public Object writeReplace(Object obj) {
+ return new InstantHandle(obj);
}
}
diff --git
a/hessian-lite/src/main/java/com/alibaba/com/caucho/hessian/io/java8/LocalDateSerializer.java
b/hessian-lite/src/main/java/com/alibaba/com/caucho/hessian/io/java8/LocalDateSerializer.java
index 99c1a0b9..67aff600 100755
---
a/hessian-lite/src/main/java/com/alibaba/com/caucho/hessian/io/java8/LocalDateSerializer.java
+++
b/hessian-lite/src/main/java/com/alibaba/com/caucho/hessian/io/java8/LocalDateSerializer.java
@@ -28,18 +28,13 @@ public class LocalDateSerializer<T> extends
AbstractSerializer {
@Override
public void writeObject(Object obj, AbstractHessianOutput out) throws
IOException {
- if (obj == null) {
- out.writeNull();
- return;
- }
-
if (SerializationConfig.isCompactMode()) {
if (out.addRef(obj)) {
return;
}
Class<?> cl = obj.getClass();
-
+
int ref = out.writeObjectBegin(cl.getName());
LocalDate localDate = (LocalDate) obj;
@@ -55,8 +50,13 @@ public class LocalDateSerializer<T> extends
AbstractSerializer {
out.writeLong(localDate.toEpochDay());
}
} else {
- out.writeObject(new LocalDateHandle(obj));
+ super.writeObject(obj, out);
}
}
+
+ @Override
+ protected Object writeReplace(Object obj) {
+ return new LocalDateHandle(obj);
+ }
}
diff --git
a/hessian-lite/src/main/java/com/alibaba/com/caucho/hessian/io/java8/LocalDateTimeSerializer.java
b/hessian-lite/src/main/java/com/alibaba/com/caucho/hessian/io/java8/LocalDateTimeSerializer.java
index d72848bf..4abae3e8 100755
---
a/hessian-lite/src/main/java/com/alibaba/com/caucho/hessian/io/java8/LocalDateTimeSerializer.java
+++
b/hessian-lite/src/main/java/com/alibaba/com/caucho/hessian/io/java8/LocalDateTimeSerializer.java
@@ -26,11 +26,6 @@ public class LocalDateTimeSerializer<T> extends
AbstractSerializer {
@Override
public void writeObject(Object obj, AbstractHessianOutput out) throws
IOException {
- if (obj == null) {
- out.writeNull();
- return;
- }
-
if (SerializationConfig.isCompactMode()) {
if (out.addRef(obj)) {
return;
@@ -59,7 +54,13 @@ public class LocalDateTimeSerializer<T> extends
AbstractSerializer {
out.writeLong(localDateTime.toLocalTime().toNanoOfDay());
}
} else {
- out.writeObject(new LocalDateTimeHandle(obj));
+ super.writeObject(obj, out);
}
}
+
+ @Override
+ protected Object writeReplace(Object obj) {
+ return new LocalDateTimeHandle(obj);
+ }
+
}
diff --git
a/hessian-lite/src/main/java/com/alibaba/com/caucho/hessian/io/java8/LocalTimeSerializer.java
b/hessian-lite/src/main/java/com/alibaba/com/caucho/hessian/io/java8/LocalTimeSerializer.java
index f8c1d09c..c62b3fb4 100755
---
a/hessian-lite/src/main/java/com/alibaba/com/caucho/hessian/io/java8/LocalTimeSerializer.java
+++
b/hessian-lite/src/main/java/com/alibaba/com/caucho/hessian/io/java8/LocalTimeSerializer.java
@@ -26,11 +26,6 @@ public class LocalTimeSerializer<T> extends
AbstractSerializer {
@Override
public void writeObject(Object obj, AbstractHessianOutput out) throws
IOException {
- if (obj == null) {
- out.writeNull();
- return;
- }
-
if (SerializationConfig.isCompactMode()) {
if (out.addRef(obj)) {
return;
@@ -53,8 +48,13 @@ public class LocalTimeSerializer<T> extends
AbstractSerializer {
out.writeLong(localTime.toNanoOfDay());
}
} else {
- out.writeObject(new LocalTimeHandle(obj));
+ super.writeObject(obj, out);
}
}
+ @Override
+ protected Object writeReplace(Object obj) {
+ return new LocalTimeHandle(obj);
+ }
+
}
diff --git
a/hessian-lite/src/main/java/com/alibaba/com/caucho/hessian/io/java8/MonthDaySerializer.java
b/hessian-lite/src/main/java/com/alibaba/com/caucho/hessian/io/java8/MonthDaySerializer.java
index 708cd043..6bc55bc9 100755
---
a/hessian-lite/src/main/java/com/alibaba/com/caucho/hessian/io/java8/MonthDaySerializer.java
+++
b/hessian-lite/src/main/java/com/alibaba/com/caucho/hessian/io/java8/MonthDaySerializer.java
@@ -18,20 +18,12 @@
package com.alibaba.com.caucho.hessian.io.java8;
-import com.alibaba.com.caucho.hessian.io.AbstractHessianOutput;
import com.alibaba.com.caucho.hessian.io.AbstractSerializer;
-import java.io.IOException;
-
public class MonthDaySerializer<T> extends AbstractSerializer {
@Override
- public void writeObject(Object obj, AbstractHessianOutput out) throws
IOException {
- if (obj == null) {
- out.writeNull();
- return;
- }
-
- out.writeObject(new MonthDayHandle(obj));
+ public Object writeReplace(Object obj) {
+ return new MonthDayHandle(obj);
}
}
diff --git
a/hessian-lite/src/main/java/com/alibaba/com/caucho/hessian/io/java8/OffsetDateTimeSerializer.java
b/hessian-lite/src/main/java/com/alibaba/com/caucho/hessian/io/java8/OffsetDateTimeSerializer.java
index 63726d62..4337cd69 100755
---
a/hessian-lite/src/main/java/com/alibaba/com/caucho/hessian/io/java8/OffsetDateTimeSerializer.java
+++
b/hessian-lite/src/main/java/com/alibaba/com/caucho/hessian/io/java8/OffsetDateTimeSerializer.java
@@ -18,20 +18,12 @@
package com.alibaba.com.caucho.hessian.io.java8;
-import com.alibaba.com.caucho.hessian.io.AbstractHessianOutput;
import com.alibaba.com.caucho.hessian.io.AbstractSerializer;
-import java.io.IOException;
-
public class OffsetDateTimeSerializer<T> extends AbstractSerializer {
@Override
- public void writeObject(Object obj, AbstractHessianOutput out) throws
IOException {
- if (obj == null) {
- out.writeNull();
- return;
- }
-
- out.writeObject(new OffsetDateTimeHandle(obj));
+ public Object writeReplace(Object obj) {
+ return new OffsetDateTimeHandle(obj);
}
}
diff --git
a/hessian-lite/src/main/java/com/alibaba/com/caucho/hessian/io/java8/OffsetTimeSerializer.java
b/hessian-lite/src/main/java/com/alibaba/com/caucho/hessian/io/java8/OffsetTimeSerializer.java
index 25317324..1df9c81f 100755
---
a/hessian-lite/src/main/java/com/alibaba/com/caucho/hessian/io/java8/OffsetTimeSerializer.java
+++
b/hessian-lite/src/main/java/com/alibaba/com/caucho/hessian/io/java8/OffsetTimeSerializer.java
@@ -18,20 +18,12 @@
package com.alibaba.com.caucho.hessian.io.java8;
-import com.alibaba.com.caucho.hessian.io.AbstractHessianOutput;
import com.alibaba.com.caucho.hessian.io.AbstractSerializer;
-import java.io.IOException;
-
public class OffsetTimeSerializer<T> extends AbstractSerializer {
@Override
- public void writeObject(Object obj, AbstractHessianOutput out) throws
IOException {
- if (obj == null) {
- out.writeNull();
- return;
- }
-
- out.writeObject(new OffsetTimeHandle(obj));
+ public Object writeReplace(Object obj) {
+ return new OffsetTimeHandle(obj);
}
}
diff --git
a/hessian-lite/src/main/java/com/alibaba/com/caucho/hessian/io/java8/PeriodSerializer.java
b/hessian-lite/src/main/java/com/alibaba/com/caucho/hessian/io/java8/PeriodSerializer.java
index b7edfecc..276b53f4 100755
---
a/hessian-lite/src/main/java/com/alibaba/com/caucho/hessian/io/java8/PeriodSerializer.java
+++
b/hessian-lite/src/main/java/com/alibaba/com/caucho/hessian/io/java8/PeriodSerializer.java
@@ -18,20 +18,12 @@
package com.alibaba.com.caucho.hessian.io.java8;
-import com.alibaba.com.caucho.hessian.io.AbstractHessianOutput;
import com.alibaba.com.caucho.hessian.io.AbstractSerializer;
-import java.io.IOException;
-
public class PeriodSerializer<T> extends AbstractSerializer {
@Override
- public void writeObject(Object obj, AbstractHessianOutput out) throws
IOException {
- if (obj == null) {
- out.writeNull();
- return;
- }
-
- out.writeObject(new PeriodHandle(obj));
+ public Object writeReplace(Object obj) {
+ return new PeriodHandle(obj);
}
}
diff --git
a/hessian-lite/src/main/java/com/alibaba/com/caucho/hessian/io/java8/SynchronizedRandomAccessListSerializer.java
b/hessian-lite/src/main/java/com/alibaba/com/caucho/hessian/io/java8/SynchronizedRandomAccessListSerializer.java
index 13fcbcca..882854de 100644
---
a/hessian-lite/src/main/java/com/alibaba/com/caucho/hessian/io/java8/SynchronizedRandomAccessListSerializer.java
+++
b/hessian-lite/src/main/java/com/alibaba/com/caucho/hessian/io/java8/SynchronizedRandomAccessListSerializer.java
@@ -16,10 +16,8 @@
*/
package com.alibaba.com.caucho.hessian.io.java8;
-import com.alibaba.com.caucho.hessian.io.AbstractHessianOutput;
import com.alibaba.com.caucho.hessian.io.AbstractSerializer;
-import java.io.IOException;
import java.util.Collection;
import java.util.Collections;
import java.util.LinkedList;
@@ -27,12 +25,7 @@ import java.util.LinkedList;
public class SynchronizedRandomAccessListSerializer <T> extends
AbstractSerializer {
@Override
- public void writeObject(Object obj, AbstractHessianOutput out) throws
IOException {
- if (obj == null) {
- out.writeNull();
- return;
- }
-
- out.writeObject(Collections.synchronizedList(new
LinkedList<T>((Collection<T>) obj)));
+ protected Object writeReplace(Object obj) {
+ return Collections.synchronizedList(new LinkedList<T>((Collection<T>)
obj));
}
}
diff --git
a/hessian-lite/src/main/java/com/alibaba/com/caucho/hessian/io/java8/UnmodifiableRandomAccessListSerializer.java
b/hessian-lite/src/main/java/com/alibaba/com/caucho/hessian/io/java8/UnmodifiableRandomAccessListSerializer.java
index d5eb553b..79447faa 100644
---
a/hessian-lite/src/main/java/com/alibaba/com/caucho/hessian/io/java8/UnmodifiableRandomAccessListSerializer.java
+++
b/hessian-lite/src/main/java/com/alibaba/com/caucho/hessian/io/java8/UnmodifiableRandomAccessListSerializer.java
@@ -16,10 +16,8 @@
*/
package com.alibaba.com.caucho.hessian.io.java8;
-import com.alibaba.com.caucho.hessian.io.AbstractHessianOutput;
import com.alibaba.com.caucho.hessian.io.AbstractSerializer;
-import java.io.IOException;
import java.util.Collection;
import java.util.Collections;
import java.util.LinkedList;
@@ -27,12 +25,7 @@ import java.util.LinkedList;
public class UnmodifiableRandomAccessListSerializer<T> extends
AbstractSerializer {
@Override
- public void writeObject(Object obj, AbstractHessianOutput out) throws
IOException {
- if (obj == null) {
- out.writeNull();
- return;
- }
-
- out.writeObject(Collections.unmodifiableList(new
LinkedList<T>((Collection<T>) obj)));
+ protected Object writeReplace(Object obj) {
+ return Collections.unmodifiableList(new LinkedList<T>((Collection<T>)
obj));
}
}
diff --git
a/hessian-lite/src/main/java/com/alibaba/com/caucho/hessian/io/java8/WeekFieldsDeserializer.java
b/hessian-lite/src/main/java/com/alibaba/com/caucho/hessian/io/java8/WeekFieldsDeserializer.java
index f65bc454..e414a47a 100644
---
a/hessian-lite/src/main/java/com/alibaba/com/caucho/hessian/io/java8/WeekFieldsDeserializer.java
+++
b/hessian-lite/src/main/java/com/alibaba/com/caucho/hessian/io/java8/WeekFieldsDeserializer.java
@@ -49,6 +49,8 @@ public class WeekFieldsDeserializer extends
AbstractDeserializer {
String[] fieldNames)
throws IOException {
try {
+ int ref = in.addRef(null);
+
DayOfWeek firstDayOfWeek = null;
int minimalDays = 0;
for (String fieldName : fieldNames) {
@@ -62,7 +64,7 @@ public class WeekFieldsDeserializer extends
AbstractDeserializer {
}
Object obj = WeekFields.of(firstDayOfWeek, minimalDays);
- in.addRef(obj);
+ in.setRef(ref, obj);
return obj;
} catch (IOException e) {
diff --git
a/hessian-lite/src/main/java/com/alibaba/com/caucho/hessian/io/java8/YearMonthSerializer.java
b/hessian-lite/src/main/java/com/alibaba/com/caucho/hessian/io/java8/YearMonthSerializer.java
index dc120920..1996c1bf 100755
---
a/hessian-lite/src/main/java/com/alibaba/com/caucho/hessian/io/java8/YearMonthSerializer.java
+++
b/hessian-lite/src/main/java/com/alibaba/com/caucho/hessian/io/java8/YearMonthSerializer.java
@@ -18,20 +18,12 @@
package com.alibaba.com.caucho.hessian.io.java8;
-import com.alibaba.com.caucho.hessian.io.AbstractHessianOutput;
import com.alibaba.com.caucho.hessian.io.AbstractSerializer;
-import java.io.IOException;
-
public class YearMonthSerializer<T> extends AbstractSerializer {
@Override
- public void writeObject(Object obj, AbstractHessianOutput out) throws
IOException {
- if (obj == null) {
- out.writeNull();
- return;
- }
-
- out.writeObject(new YearMonthHandle(obj));
+ public Object writeReplace(Object obj) {
+ return new YearMonthHandle(obj);
}
}
diff --git
a/hessian-lite/src/main/java/com/alibaba/com/caucho/hessian/io/java8/YearSerializer.java
b/hessian-lite/src/main/java/com/alibaba/com/caucho/hessian/io/java8/YearSerializer.java
index 2973fc9b..ce96e9e0 100755
---
a/hessian-lite/src/main/java/com/alibaba/com/caucho/hessian/io/java8/YearSerializer.java
+++
b/hessian-lite/src/main/java/com/alibaba/com/caucho/hessian/io/java8/YearSerializer.java
@@ -18,20 +18,12 @@
package com.alibaba.com.caucho.hessian.io.java8;
-import com.alibaba.com.caucho.hessian.io.AbstractHessianOutput;
import com.alibaba.com.caucho.hessian.io.AbstractSerializer;
-import java.io.IOException;
-
public class YearSerializer<T> extends AbstractSerializer {
@Override
- public void writeObject(Object obj, AbstractHessianOutput out) throws
IOException {
- if (obj == null) {
- out.writeNull();
- return;
- }
-
- out.writeObject(new YearHandle(obj));
+ public Object writeReplace(Object obj) {
+ return new YearHandle(obj);
}
}
diff --git
a/hessian-lite/src/main/java/com/alibaba/com/caucho/hessian/io/java8/ZoneIdSerializer.java
b/hessian-lite/src/main/java/com/alibaba/com/caucho/hessian/io/java8/ZoneIdSerializer.java
index 18a03d3b..6675cccd 100755
---
a/hessian-lite/src/main/java/com/alibaba/com/caucho/hessian/io/java8/ZoneIdSerializer.java
+++
b/hessian-lite/src/main/java/com/alibaba/com/caucho/hessian/io/java8/ZoneIdSerializer.java
@@ -18,10 +18,8 @@
package com.alibaba.com.caucho.hessian.io.java8;
-import com.alibaba.com.caucho.hessian.io.AbstractHessianOutput;
import com.alibaba.com.caucho.hessian.io.AbstractSerializer;
-import java.io.IOException;
public class ZoneIdSerializer extends AbstractSerializer {
@@ -32,12 +30,8 @@ public class ZoneIdSerializer extends AbstractSerializer {
}
@Override
- public void writeObject(Object obj, AbstractHessianOutput out) throws
IOException {
- if (obj == null) {
- out.writeNull();
- } else {
- out.writeObject(new ZoneIdHandle(obj));
- }
+ protected Object writeReplace(Object obj) {
+ return new ZoneIdHandle(obj);
}
}
diff --git
a/hessian-lite/src/main/java/com/alibaba/com/caucho/hessian/io/java8/ZoneOffsetSerializer.java
b/hessian-lite/src/main/java/com/alibaba/com/caucho/hessian/io/java8/ZoneOffsetSerializer.java
index 72a28c2c..de7bb57d 100755
---
a/hessian-lite/src/main/java/com/alibaba/com/caucho/hessian/io/java8/ZoneOffsetSerializer.java
+++
b/hessian-lite/src/main/java/com/alibaba/com/caucho/hessian/io/java8/ZoneOffsetSerializer.java
@@ -18,20 +18,12 @@
package com.alibaba.com.caucho.hessian.io.java8;
-import com.alibaba.com.caucho.hessian.io.AbstractHessianOutput;
import com.alibaba.com.caucho.hessian.io.AbstractSerializer;
-import java.io.IOException;
-
public class ZoneOffsetSerializer<T> extends AbstractSerializer {
@Override
- public void writeObject(Object obj, AbstractHessianOutput out) throws
IOException {
- if (obj == null) {
- out.writeNull();
- return;
- }
-
- out.writeObject(new ZoneOffsetHandle(obj));
+ public Object writeReplace(Object obj) {
+ return new ZoneOffsetHandle(obj);
}
}
diff --git
a/hessian-lite/src/main/java/com/alibaba/com/caucho/hessian/io/java8/ZonedDateTimeSerializer.java
b/hessian-lite/src/main/java/com/alibaba/com/caucho/hessian/io/java8/ZonedDateTimeSerializer.java
index 32dd460d..1c4652e6 100755
---
a/hessian-lite/src/main/java/com/alibaba/com/caucho/hessian/io/java8/ZonedDateTimeSerializer.java
+++
b/hessian-lite/src/main/java/com/alibaba/com/caucho/hessian/io/java8/ZonedDateTimeSerializer.java
@@ -18,20 +18,12 @@
package com.alibaba.com.caucho.hessian.io.java8;
-import com.alibaba.com.caucho.hessian.io.AbstractHessianOutput;
import com.alibaba.com.caucho.hessian.io.AbstractSerializer;
-import java.io.IOException;
-
public class ZonedDateTimeSerializer<T> extends AbstractSerializer {
@Override
- public void writeObject(Object obj, AbstractHessianOutput out) throws
IOException {
- if (obj == null) {
- out.writeNull();
- return;
- }
-
- out.writeObject(new ZonedDateTimeHandle(obj));
+ public Object writeReplace(Object obj) {
+ return new ZonedDateTimeHandle(obj);
}
}
diff --git
a/hessian-lite/src/main/java/com/alibaba/com/caucho/hessian/io/java9/ListNSerializer.java
b/hessian-lite/src/main/java/com/alibaba/com/caucho/hessian/io/java9/ImmutableListSerializer.java
similarity index 72%
rename from
hessian-lite/src/main/java/com/alibaba/com/caucho/hessian/io/java9/ListNSerializer.java
rename to
hessian-lite/src/main/java/com/alibaba/com/caucho/hessian/io/java9/ImmutableListSerializer.java
index 0279f300..359f8928 100644
---
a/hessian-lite/src/main/java/com/alibaba/com/caucho/hessian/io/java9/ListNSerializer.java
+++
b/hessian-lite/src/main/java/com/alibaba/com/caucho/hessian/io/java9/ImmutableListSerializer.java
@@ -16,22 +16,16 @@
*/
package com.alibaba.com.caucho.hessian.io.java9;
-import com.alibaba.com.caucho.hessian.io.AbstractHessianOutput;
import com.alibaba.com.caucho.hessian.io.AbstractSerializer;
-import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
-public class ListNSerializer extends AbstractSerializer {
+public class ImmutableListSerializer extends AbstractSerializer {
@Override
- public void writeObject(Object obj, AbstractHessianOutput out) throws
IOException {
- if (obj == null) {
- out.writeNull();
- return;
- }
-
- out.writeObject(new ArrayList<>((List) obj));
+ protected Object writeReplace(Object obj) {
+ return new ArrayList<>((List) obj);
}
+
}
diff --git
a/hessian-lite/src/main/java/com/alibaba/com/caucho/hessian/io/java9/MapNSerializer.java
b/hessian-lite/src/main/java/com/alibaba/com/caucho/hessian/io/java9/ImmutableMapSerializer.java
similarity index 72%
rename from
hessian-lite/src/main/java/com/alibaba/com/caucho/hessian/io/java9/MapNSerializer.java
rename to
hessian-lite/src/main/java/com/alibaba/com/caucho/hessian/io/java9/ImmutableMapSerializer.java
index 7d799148..819b36a2 100644
---
a/hessian-lite/src/main/java/com/alibaba/com/caucho/hessian/io/java9/MapNSerializer.java
+++
b/hessian-lite/src/main/java/com/alibaba/com/caucho/hessian/io/java9/ImmutableMapSerializer.java
@@ -16,22 +16,16 @@
*/
package com.alibaba.com.caucho.hessian.io.java9;
-import com.alibaba.com.caucho.hessian.io.AbstractHessianOutput;
import com.alibaba.com.caucho.hessian.io.AbstractSerializer;
-import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
-public class MapNSerializer extends AbstractSerializer {
+public class ImmutableMapSerializer extends AbstractSerializer {
@Override
- public void writeObject(Object obj, AbstractHessianOutput out) throws
IOException {
- if (obj == null) {
- out.writeNull();
- return;
- }
-
- out.writeObject(new HashMap<>((Map) obj));
+ protected Object writeReplace(Object obj) {
+ return new HashMap<>((Map) obj);
}
+
}
diff --git
a/hessian-lite/src/main/java/com/alibaba/com/caucho/hessian/io/java9/SetNSerializer.java
b/hessian-lite/src/main/java/com/alibaba/com/caucho/hessian/io/java9/ImmutableSetSerializer.java
similarity index 72%
rename from
hessian-lite/src/main/java/com/alibaba/com/caucho/hessian/io/java9/SetNSerializer.java
rename to
hessian-lite/src/main/java/com/alibaba/com/caucho/hessian/io/java9/ImmutableSetSerializer.java
index 9fdf0f72..0ca7ed2d 100644
---
a/hessian-lite/src/main/java/com/alibaba/com/caucho/hessian/io/java9/SetNSerializer.java
+++
b/hessian-lite/src/main/java/com/alibaba/com/caucho/hessian/io/java9/ImmutableSetSerializer.java
@@ -16,22 +16,16 @@
*/
package com.alibaba.com.caucho.hessian.io.java9;
-import com.alibaba.com.caucho.hessian.io.AbstractHessianOutput;
import com.alibaba.com.caucho.hessian.io.AbstractSerializer;
-import java.io.IOException;
import java.util.HashSet;
import java.util.Set;
-public class SetNSerializer extends AbstractSerializer {
+public class ImmutableSetSerializer extends AbstractSerializer {
@Override
- public void writeObject(Object obj, AbstractHessianOutput out) throws
IOException {
- if (obj == null) {
- out.writeNull();
- return;
- }
-
- out.writeObject(new HashSet<>((Set) obj));
+ protected Object writeReplace(Object obj) {
+ return new HashSet<>((Set) obj);
}
+
}
diff --git
a/hessian-lite/src/main/java/com/alibaba/com/caucho/hessian/io/java9/List12Serializer.java
b/hessian-lite/src/main/java/com/alibaba/com/caucho/hessian/io/java9/List12Serializer.java
deleted file mode 100644
index 4a661766..00000000
---
a/hessian-lite/src/main/java/com/alibaba/com/caucho/hessian/io/java9/List12Serializer.java
+++ /dev/null
@@ -1,37 +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.java9;
-
-import com.alibaba.com.caucho.hessian.io.AbstractHessianOutput;
-import com.alibaba.com.caucho.hessian.io.AbstractSerializer;
-
-import java.io.IOException;
-import java.util.ArrayList;
-import java.util.List;
-
-public class List12Serializer extends AbstractSerializer {
-
- @Override
- public void writeObject(Object obj, AbstractHessianOutput out) throws
IOException {
- if (obj == null) {
- out.writeNull();
- return;
- }
-
- out.writeObject(new ArrayList<>((List) obj));
- }
-}
diff --git
a/hessian-lite/src/main/java/com/alibaba/com/caucho/hessian/io/java9/Map1Serializer.java
b/hessian-lite/src/main/java/com/alibaba/com/caucho/hessian/io/java9/Map1Serializer.java
deleted file mode 100644
index 4831716e..00000000
---
a/hessian-lite/src/main/java/com/alibaba/com/caucho/hessian/io/java9/Map1Serializer.java
+++ /dev/null
@@ -1,37 +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.java9;
-
-import com.alibaba.com.caucho.hessian.io.AbstractHessianOutput;
-import com.alibaba.com.caucho.hessian.io.AbstractSerializer;
-
-import java.io.IOException;
-import java.util.HashMap;
-import java.util.Map;
-
-public class Map1Serializer extends AbstractSerializer {
-
- @Override
- public void writeObject(Object obj, AbstractHessianOutput out) throws
IOException {
- if (obj == null) {
- out.writeNull();
- return;
- }
-
- out.writeObject(new HashMap<>((Map) obj));
- }
-}
diff --git
a/hessian-lite/src/main/java/com/alibaba/com/caucho/hessian/io/java9/Set12Serializer.java
b/hessian-lite/src/main/java/com/alibaba/com/caucho/hessian/io/java9/Set12Serializer.java
deleted file mode 100644
index 85291139..00000000
---
a/hessian-lite/src/main/java/com/alibaba/com/caucho/hessian/io/java9/Set12Serializer.java
+++ /dev/null
@@ -1,37 +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.java9;
-
-import com.alibaba.com.caucho.hessian.io.AbstractHessianOutput;
-import com.alibaba.com.caucho.hessian.io.AbstractSerializer;
-
-import java.io.IOException;
-import java.util.HashSet;
-import java.util.Set;
-
-public class Set12Serializer extends AbstractSerializer {
-
- @Override
- public void writeObject(Object obj, AbstractHessianOutput out) throws
IOException {
- if (obj == null) {
- out.writeNull();
- return;
- }
-
- out.writeObject(new HashSet<>((Set) obj));
- }
-}
diff --git
a/hessian-lite/src/main/java/com/alibaba/com/caucho/hessian/io/java9/SubListSerializer.java
b/hessian-lite/src/main/java/com/alibaba/com/caucho/hessian/io/java9/SubListSerializer.java
deleted file mode 100644
index db35c9e1..00000000
---
a/hessian-lite/src/main/java/com/alibaba/com/caucho/hessian/io/java9/SubListSerializer.java
+++ /dev/null
@@ -1,37 +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.java9;
-
-import com.alibaba.com.caucho.hessian.io.AbstractHessianOutput;
-import com.alibaba.com.caucho.hessian.io.AbstractSerializer;
-
-import java.io.IOException;
-import java.util.ArrayList;
-import java.util.List;
-
-public class SubListSerializer extends AbstractSerializer {
-
- @Override
- public void writeObject(Object obj, AbstractHessianOutput out) throws
IOException {
- if (obj == null) {
- out.writeNull();
- return;
- }
-
- out.writeObject(new ArrayList<>((List) obj));
- }
-}
diff --git
a/hessian-lite/src/main/java/com/alibaba/com/caucho/hessian/io/socket/Inet4AddressSerializer.java
b/hessian-lite/src/main/java/com/alibaba/com/caucho/hessian/io/socket/Inet4AddressSerializer.java
index db67c9c8..d5a81a8b 100644
---
a/hessian-lite/src/main/java/com/alibaba/com/caucho/hessian/io/socket/Inet4AddressSerializer.java
+++
b/hessian-lite/src/main/java/com/alibaba/com/caucho/hessian/io/socket/Inet4AddressSerializer.java
@@ -27,6 +27,9 @@ public class Inet4AddressSerializer extends
AbstractSerializer {
@Override
public void writeObject(Object obj, AbstractHessianOutput out)
throws IOException {
+ if (out.addRef(obj)) {
+ return;
+ }
String replacedClName = "java.net.InetAddress";
diff --git
a/hessian-lite/src/main/java/com/alibaba/com/caucho/hessian/io/socket/Inet6AddressSerializer.java
b/hessian-lite/src/main/java/com/alibaba/com/caucho/hessian/io/socket/Inet6AddressSerializer.java
index ea96026b..918db384 100644
---
a/hessian-lite/src/main/java/com/alibaba/com/caucho/hessian/io/socket/Inet6AddressSerializer.java
+++
b/hessian-lite/src/main/java/com/alibaba/com/caucho/hessian/io/socket/Inet6AddressSerializer.java
@@ -28,6 +28,9 @@ public class Inet6AddressSerializer extends
AbstractSerializer {
@Override
public void writeObject(Object obj, AbstractHessianOutput out)
throws IOException {
+ if (out.addRef(obj)) {
+ return;
+ }
String replacedClName = "java.net.Inet6Address";
diff --git
a/hessian-lite/src/main/java/com/alibaba/com/caucho/hessian/io/socket/InetSocketAddressSerializer.java
b/hessian-lite/src/main/java/com/alibaba/com/caucho/hessian/io/socket/InetSocketAddressSerializer.java
index 51c52e3f..34a1ec0f 100644
---
a/hessian-lite/src/main/java/com/alibaba/com/caucho/hessian/io/socket/InetSocketAddressSerializer.java
+++
b/hessian-lite/src/main/java/com/alibaba/com/caucho/hessian/io/socket/InetSocketAddressSerializer.java
@@ -27,6 +27,9 @@ public class InetSocketAddressSerializer extends
AbstractSerializer {
@Override
public void writeObject(Object obj, AbstractHessianOutput out)
throws IOException {
+ if (out.addRef(obj)) {
+ return;
+ }
String replacedClName = "java.net.InetSocketAddress";
diff --git
a/hessian-lite/src/main/java/com/alibaba/com/caucho/hessian/io/socket/URISerializer.java
b/hessian-lite/src/main/java/com/alibaba/com/caucho/hessian/io/socket/URISerializer.java
index 05de4259..ac76aa55 100644
---
a/hessian-lite/src/main/java/com/alibaba/com/caucho/hessian/io/socket/URISerializer.java
+++
b/hessian-lite/src/main/java/com/alibaba/com/caucho/hessian/io/socket/URISerializer.java
@@ -27,6 +27,9 @@ public class URISerializer extends AbstractSerializer {
@Override
public void writeObject(Object obj, AbstractHessianOutput out)
throws IOException {
+ if (out.addRef(obj)) {
+ return;
+ }
String replacedClName = "java.net.URI";
diff --git
a/hessian-lite/src/main/java/com/alibaba/com/caucho/hessian/io/socket/UnixDomainSocketAddressSerializer.java
b/hessian-lite/src/main/java/com/alibaba/com/caucho/hessian/io/socket/UnixDomainSocketAddressSerializer.java
index 4f8fba63..35a002ad 100644
---
a/hessian-lite/src/main/java/com/alibaba/com/caucho/hessian/io/socket/UnixDomainSocketAddressSerializer.java
+++
b/hessian-lite/src/main/java/com/alibaba/com/caucho/hessian/io/socket/UnixDomainSocketAddressSerializer.java
@@ -42,6 +42,9 @@ public class UnixDomainSocketAddressSerializer extends
AbstractSerializer {
@Override
public void writeObject(Object obj, AbstractHessianOutput out)
throws IOException {
+ if (out.addRef(obj)) {
+ return;
+ }
String replacedClName = "java.net.UnixDomainSocketAddress$Ser";
diff --git a/hessian-lite/src/main/resources/META-INF/dubbo/hessian/serializers
b/hessian-lite/src/main/resources/META-INF/dubbo/hessian/serializers
index 67d647ea..8d69a927 100644
--- a/hessian-lite/src/main/resources/META-INF/dubbo/hessian/serializers
+++ b/hessian-lite/src/main/resources/META-INF/dubbo/hessian/serializers
@@ -16,13 +16,13 @@
java.time.YearMonth=com.alibaba.com.caucho.hessian.io.java8.YearMonthSerializer
java.time.ZonedDateTime=com.alibaba.com.caucho.hessian.io.java8.ZonedDateTimeSerializer
java.time.ZoneId=com.alibaba.com.caucho.hessian.io.java8.ZoneIdSerializer
java.time.ZoneOffset=com.alibaba.com.caucho.hessian.io.java8.ZoneOffsetSerializer
-java.util.ImmutableCollections$List12=com.alibaba.com.caucho.hessian.io.java9.List12Serializer
-java.util.ImmutableCollections$ListN=com.alibaba.com.caucho.hessian.io.java9.ListNSerializer
-java.util.ImmutableCollections$Map1=com.alibaba.com.caucho.hessian.io.java9.Map1Serializer
-java.util.ImmutableCollections$MapN=com.alibaba.com.caucho.hessian.io.java9.MapNSerializer
-java.util.ImmutableCollections$Set12=com.alibaba.com.caucho.hessian.io.java9.Set12Serializer
-java.util.ImmutableCollections$SetN=com.alibaba.com.caucho.hessian.io.java9.SetNSerializer
-java.util.ImmutableCollections$SubList=com.alibaba.com.caucho.hessian.io.java9.SubListSerializer
+java.util.ImmutableCollections$List12=com.alibaba.com.caucho.hessian.io.java9.ImmutableListSerializer
+java.util.ImmutableCollections$ListN=com.alibaba.com.caucho.hessian.io.java9.ImmutableListSerializer
+java.util.ImmutableCollections$Map1=com.alibaba.com.caucho.hessian.io.java9.ImmutableMapSerializer
+java.util.ImmutableCollections$MapN=com.alibaba.com.caucho.hessian.io.java9.ImmutableMapSerializer
+java.util.ImmutableCollections$Set12=com.alibaba.com.caucho.hessian.io.java9.ImmutableSetSerializer
+java.util.ImmutableCollections$SetN=com.alibaba.com.caucho.hessian.io.java9.ImmutableSetSerializer
+java.util.ImmutableCollections$SubList=com.alibaba.com.caucho.hessian.io.java9.ImmutableListSerializer
java.util.Collections$UnmodifiableRandomAccessList=com.alibaba.com.caucho.hessian.io.java8.UnmodifiableRandomAccessListSerializer
java.util.Collections$SynchronizedRandomAccessList=com.alibaba.com.caucho.hessian.io.java8.SynchronizedRandomAccessListSerializer
java.time.chrono.HijrahChronology=com.alibaba.com.caucho.hessian.io.chronology.AbstractChronologySerializer
@@ -33,7 +33,7 @@
java.time.chrono.ThaiBuddhistChronology=com.alibaba.com.caucho.hessian.io.chrono
java.time.chrono.ChronoLocalDateTimeImpl=com.alibaba.com.caucho.hessian.io.chronology.ChronoLocalDateTimeImplSerializer
java.time.chrono.ChronoPeriodImpl=com.alibaba.com.caucho.hessian.io.chronology.ChronoPeriodImplSerializer
java.time.chrono.ChronoZonedDateTimeImpl=com.alibaba.com.caucho.hessian.io.chronology.ChronoZonedDateTimeImplSerializer
-java.time.chrono.JapaneseDate=com.alibaba.com.caucho.hessian.io.chronology.JapaneseDateSeriailzer
+java.time.chrono.JapaneseDate=com.alibaba.com.caucho.hessian.io.chronology.JapaneseDateSerializer
java.time.chrono.JapaneseEra=com.alibaba.com.caucho.hessian.io.chronology.JapaneseEraSerializer
java.time.chrono.HijrahDate=com.alibaba.com.caucho.hessian.io.chronology.HijrahDateSerializer
java.time.chrono.MinguoDate=com.alibaba.com.caucho.hessian.io.chronology.MinguoDateSerializer
diff --git
a/java-11-test/src/test/java/org/apache/dubbo/hessian/java11/ImmutableTest.java
b/java-11-test/src/test/java/org/apache/dubbo/hessian/java11/ImmutableTest.java
index f69f803a..eb60a64c 100644
---
a/java-11-test/src/test/java/org/apache/dubbo/hessian/java11/ImmutableTest.java
+++
b/java-11-test/src/test/java/org/apache/dubbo/hessian/java11/ImmutableTest.java
@@ -23,6 +23,7 @@ import org.junit.jupiter.api.Test;
import java.io.IOException;
import java.io.Serializable;
+import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.Objects;
@@ -98,4 +99,55 @@ public class ImmutableTest extends SerializeTestBase {
return Objects.hash(a, b, c);
}
}
+
+ @Test
+ public void testCollection() throws IOException {
+ List<Object> list = new ArrayList<>();
+
+ assertImmutableList(list, List.of());
+ assertImmutableList(list, List.of(1));
+ assertImmutableList(list, List.of(1, 2));
+ assertImmutableList(list, List.of(1, 2, 3));
+
+ assertImmutableMap(list, Map.of());
+ assertImmutableMap(list, Map.of(1, 2));
+ assertImmutableMap(list, Map.of(1, 2, 3, 4));
+ assertImmutableMap(list, Map.of(1, 2, 3, 4, 5, 6));
+
+ assertImmutableSet(list, Set.of());
+ assertImmutableSet(list, Set.of(1));
+ assertImmutableSet(list, Set.of(1, 2));
+ assertImmutableSet(list, Set.of(1, 2, 3));
+ }
+
+ private void assertImmutableList(List<Object> list, List<?> immutableList)
throws IOException {
+ list.clear();
+ list.add(immutableList);
+ list.add(immutableList);
+ List<Object> result = baseHessian2Serialize(list);
+ Assertions.assertEquals(list.size(), result.size());
+ Assertions.assertSame(result.get(0), result.get(1));
+ Assertions.assertEquals(immutableList, result.get(0));
+ }
+
+ private void assertImmutableMap(List<Object> list, Map<Object, Object>
map) throws IOException {
+ list.clear();
+ list.add(map);
+ list.add(map);
+ List<Object> result = baseHessian2Serialize(list);
+ Assertions.assertEquals(list.size(), result.size());
+ Assertions.assertSame(result.get(0), result.get(1));
+ Assertions.assertEquals(map, result.get(0));
+ }
+
+ private void assertImmutableSet(List<Object> list, Set<Object> set) throws
IOException {
+ list.clear();
+ list.add(set);
+ list.add(set);
+ List<Object> result = baseHessian2Serialize(list);
+ Assertions.assertEquals(list.size(), result.size());
+ Assertions.assertSame(result.iterator().next(),
result.iterator().next());
+ Assertions.assertEquals(set, result.get(0));
+ }
+
}
diff --git
a/java-17-test/src/test/java/org/apache/dubbo/hessian/java17/RecordTest.java
b/java-17-test/src/test/java/org/apache/dubbo/hessian/java17/RecordTest.java
index e4f69bd8..807ead75 100644
--- a/java-17-test/src/test/java/org/apache/dubbo/hessian/java17/RecordTest.java
+++ b/java-17-test/src/test/java/org/apache/dubbo/hessian/java17/RecordTest.java
@@ -26,6 +26,7 @@ import org.junit.jupiter.api.Test;
import java.io.IOException;
import java.io.Serial;
import java.io.Serializable;
+import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.stream.IntStream;
@@ -295,4 +296,75 @@ public class RecordTest extends SerializeTestBase {
List<Sample> samples = Arrays.asList(sample1, sample2, sample3,
sample4);
testEquals(samples);
}
+
+ @Test
+ public void testCollection() throws IOException {
+ List<Object> list = new ArrayList<>();
+
+ var record = new RecordRectangle("one", 2, 3L, 4.0);
+ testCollection(list, record);
+
+ var emptyRecord = new EmptyRecord();
+ testCollection(list, emptyRecord);
+
+ var recordPoint = new RecordPoint(1, 1);
+ testCollection(list, recordPoint);
+
+ // 参考上面的所有方法都执行testCollection
+ var recordWithConstructor = new RecordWithConstructor("ten");
+ testCollection(list, recordWithConstructor);
+
+ var recordOfRecord = new RecordOfRecord(new RecordRectangle("one", 2,
3L, 4.0));
+ testCollection(list, recordOfRecord);
+
+ var arr = new RecordPoint[100];
+ IntStream.range(0, 100).forEach(i -> arr[i] = new RecordPoint(i, i +
1));
+ testCollection(list, arr);
+
+ var recordWithArray = new RecordWithArray(new RecordRectangle[]{new
RecordRectangle("one", 2, 3L, 4.0)});
+ testCollection(list, recordWithArray);
+
+ var recordWithNull = new RecordWithNull(null, null, null);
+ testCollection(list, recordWithNull);
+
+ var recordWithDefaultValues = new RecordWithDefaultValues(
+ (byte) 0, (short) 0, 0, 0l, 0.0f, 0.0d, '\u0000', false);
+ testCollection(list, recordWithDefaultValues);
+
+ var r = new R(1L, 1, "foo");
+ testCollection(list, r);
+
+ var r1 = new R1(1, 1L, "foo");
+ testCollection(list, r1);
+
+ var r2 = new R2("foo", 1, 1L);
+ testCollection(list, r2);
+
+ var r3 = new R3("foo");
+ testCollection(list, r3);
+
+ var r4 = new R4("foo", 1, 1L, null);
+ testCollection(list, r4);
+
+ var r5 = new R5("foo", 1, 1L,
+ false, (byte) 0, (short) 0, '\u0000', 0, 0L, 0.0f, 0.0d,
+ null, null, null, null, null, null, null, null);
+ testCollection(list, r5);
+
+ var recordWithSuperType = new RecordWithSuperType(1L);
+ testCollection(list, recordWithSuperType);
+
+ PackagePrivateRecord packagePrivateRecord = new
PackagePrivateRecord(1, "s1");
+ testCollection(list, packagePrivateRecord);
+
+ PrivateRecord privateRecord = new PrivateRecord("s2", 2);
+ testCollection(list, privateRecord);
+
+ Sample sample1 = new Sample("1", X.A);
+ Sample sample2 = new Sample("2", X.A);
+ Sample sample3 = new Sample("3", X.A);
+ Sample sample4 = new Sample("4", X.B);
+ List<Sample> samples = Arrays.asList(sample1, sample2, sample3,
sample4);
+ testCollection(list, samples);
+ }
}
diff --git
a/java-17-test/src/test/java/org/apache/dubbo/hessian/java17/StreamTest.java
b/java-17-test/src/test/java/org/apache/dubbo/hessian/java17/StreamTest.java
index 7556edba..25653555 100644
--- a/java-17-test/src/test/java/org/apache/dubbo/hessian/java17/StreamTest.java
+++ b/java-17-test/src/test/java/org/apache/dubbo/hessian/java17/StreamTest.java
@@ -16,6 +16,7 @@
*/
package org.apache.dubbo.hessian.java17;
+import java.util.ArrayList;
import org.apache.dubbo.hessian.java17.base.SerializeTestBase;
import org.junit.jupiter.api.Assertions;
@@ -31,4 +32,12 @@ public class StreamTest extends SerializeTestBase {
List<Integer> list = Stream.of(1, 2, 3).toList();
Assertions.assertEquals(list, baseHessian2Serialize(list));
}
+
+ @Test
+ void testCollection() throws IOException {
+ List<Object> list = new ArrayList<>();
+
+ List<Integer> streamList = Stream.of(1, 2, 3).toList();
+ testCollection(list, streamList);
+ }
}
diff --git
a/java-17-test/src/test/java/org/apache/dubbo/hessian/java17/UnixDomainSocketAddressTest.java
b/java-17-test/src/test/java/org/apache/dubbo/hessian/java17/UnixDomainSocketAddressTest.java
index 642c6fb7..62b37a3f 100644
---
a/java-17-test/src/test/java/org/apache/dubbo/hessian/java17/UnixDomainSocketAddressTest.java
+++
b/java-17-test/src/test/java/org/apache/dubbo/hessian/java17/UnixDomainSocketAddressTest.java
@@ -23,6 +23,8 @@ import org.junit.jupiter.api.Test;
import java.io.IOException;
import java.net.UnixDomainSocketAddress;
+import java.util.ArrayList;
+import java.util.List;
public class UnixDomainSocketAddressTest extends SerializeTestBase {
@Test
@@ -30,4 +32,12 @@ public class UnixDomainSocketAddressTest extends
SerializeTestBase {
UnixDomainSocketAddress unixDomainSocketAddress =
UnixDomainSocketAddress.of("/etc/test");
Assertions.assertEquals(unixDomainSocketAddress,
baseHessian2Serialize(unixDomainSocketAddress));
}
+
+ @Test
+ void testCollection() throws IOException {
+ List<Object> list = new ArrayList<>();
+
+ UnixDomainSocketAddress unixDomainSocketAddress =
UnixDomainSocketAddress.of("/etc/test");
+ testCollection(list, unixDomainSocketAddress);
+ }
}
diff --git
a/java-17-test/src/test/java/org/apache/dubbo/hessian/java17/base/SerializeTestBase.java
b/java-17-test/src/test/java/org/apache/dubbo/hessian/java17/base/SerializeTestBase.java
index 22b45dee..a1bcb0ae 100644
---
a/java-17-test/src/test/java/org/apache/dubbo/hessian/java17/base/SerializeTestBase.java
+++
b/java-17-test/src/test/java/org/apache/dubbo/hessian/java17/base/SerializeTestBase.java
@@ -22,6 +22,8 @@ import com.alibaba.com.caucho.hessian.io.Hessian2Output;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
+import java.util.List;
+import org.junit.jupiter.api.Assertions;
/**
* hessian base serialize utils
@@ -60,4 +62,23 @@ public class SerializeTestBase {
Hessian2Input input = new Hessian2Input(bin);
return input.readObject(cl);
}
+
+ protected <T> void testCollection(List<Object> list, T t) throws
IOException {
+ try {
+ list.clear();
+ list.add(t);
+ list.add(t);
+ List<Object> result = baseHessian2Serialize(list);
+ Assertions.assertEquals(list.size(), result.size());
+ Assertions.assertSame(result.get(0), result.get(1));
+ if (t instanceof Object[]) {
+ Assertions.assertArrayEquals((Object[]) t, (Object[])
result.get(0));
+ } else {
+ Assertions.assertEquals(t, result.get(0));
+ }
+ } finally {
+ list.clear();
+ }
+ }
+
}
diff --git
a/java-8-test/src/test/java/com/alibaba/com/caucho/hessian/io/AnnotationTest.java
b/java-8-test/src/test/java/com/alibaba/com/caucho/hessian/io/AnnotationTest.java
index 3b247848..464e2b61 100644
---
a/java-8-test/src/test/java/com/alibaba/com/caucho/hessian/io/AnnotationTest.java
+++
b/java-8-test/src/test/java/com/alibaba/com/caucho/hessian/io/AnnotationTest.java
@@ -25,6 +25,8 @@ import java.io.IOException;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.Target;
+import java.util.ArrayList;
+import java.util.List;
public class AnnotationTest extends SerializeTestBase {
@Test
@@ -36,6 +38,14 @@ public class AnnotationTest extends SerializeTestBase {
Assertions.assertEquals(annotation, testAnnotation);
}
+ @Test
+ void testCollection() throws IOException {
+ List<Object> list = new ArrayList<>();
+
+ TestAnnotation annotation =
AnnotatedClass.class.getAnnotation(TestAnnotation.class);
+ testCollection(list, annotation);
+ }
+
@TestAnnotation(byteValue = 1, intValue = 2, shortValue = 3, floatValue =
4.0f, doubleValue = 5.0, value = "test")
public static class AnnotatedClass {
}
diff --git
a/java-8-test/src/test/java/com/alibaba/com/caucho/hessian/io/BigDecimalTest.java
b/java-8-test/src/test/java/com/alibaba/com/caucho/hessian/io/BigDecimalTest.java
index 5b2a733d..b627851f 100644
---
a/java-8-test/src/test/java/com/alibaba/com/caucho/hessian/io/BigDecimalTest.java
+++
b/java-8-test/src/test/java/com/alibaba/com/caucho/hessian/io/BigDecimalTest.java
@@ -24,6 +24,8 @@ import org.junit.jupiter.api.condition.JRE;
import java.io.IOException;
import java.math.BigDecimal;
+import java.util.ArrayList;
+import java.util.List;
public class BigDecimalTest extends SerializeTestBase {
@Test
@@ -44,4 +46,12 @@ public class BigDecimalTest extends SerializeTestBase {
Assertions.assertEquals(obj, hessian4ToHessian3(obj));
Assertions.assertEquals(obj, hessian3ToHessian4(obj));
}
+
+ @Test
+ void testCollection() throws IOException {
+ List<Object> list = new ArrayList<>();
+
+ BigDecimal originalBigDecimal = new BigDecimal("123.456");
+ testCollection(list, originalBigDecimal);
+ }
}
diff --git
a/java-8-test/src/test/java/com/alibaba/com/caucho/hessian/io/BigIntegerTest.java
b/java-8-test/src/test/java/com/alibaba/com/caucho/hessian/io/BigIntegerTest.java
index 20274efa..8fc847d1 100644
---
a/java-8-test/src/test/java/com/alibaba/com/caucho/hessian/io/BigIntegerTest.java
+++
b/java-8-test/src/test/java/com/alibaba/com/caucho/hessian/io/BigIntegerTest.java
@@ -24,6 +24,8 @@ import org.junit.jupiter.api.condition.JRE;
import java.io.IOException;
import java.math.BigInteger;
+import java.util.ArrayList;
+import java.util.List;
public class BigIntegerTest extends SerializeTestBase {
@Test
@@ -44,4 +46,12 @@ public class BigIntegerTest extends SerializeTestBase {
Assertions.assertEquals(obj, hessian4ToHessian3(obj));
Assertions.assertEquals(obj, hessian3ToHessian4(obj));
}
+
+ @Test
+ void testCollection() throws IOException {
+ List<Object> list = new ArrayList<>();
+
+ BigInteger originalBigInteger = new BigInteger("1234567890");
+ testCollection(list, originalBigInteger);
+ }
}
diff --git
a/java-8-test/src/test/java/com/alibaba/com/caucho/hessian/io/BitSetSerializerTest.java
b/java-8-test/src/test/java/com/alibaba/com/caucho/hessian/io/BitSetSerializerTest.java
index 84e2b640..0f285959 100644
---
a/java-8-test/src/test/java/com/alibaba/com/caucho/hessian/io/BitSetSerializerTest.java
+++
b/java-8-test/src/test/java/com/alibaba/com/caucho/hessian/io/BitSetSerializerTest.java
@@ -21,7 +21,9 @@ import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test;
import java.io.IOException;
+import java.util.ArrayList;
import java.util.BitSet;
+import java.util.List;
public class BitSetSerializerTest extends SerializeTestBase {
@@ -38,6 +40,17 @@ public class BitSetSerializerTest extends SerializeTestBase {
assertBitSet(BitSet.valueOf(words));
}
+ @Test
+ public void testCollection() throws IOException {
+ List<Object> list = new ArrayList<>();
+
+ BitSet bitSet = new BitSet();
+ bitSet.set(1);
+ bitSet.set(3);
+ bitSet.set(5);
+ testCollection(list, bitSet);
+ }
+
private void assertBitSet(BitSet bitSet) throws IOException {
Assertions.assertEquals(bitSet, baseHessian2Serialize(bitSet));
Assertions.assertEquals(bitSet, hessian4ToHessian3(bitSet));
diff --git
a/java-8-test/src/test/java/com/alibaba/com/caucho/hessian/io/ClockTest.java
b/java-8-test/src/test/java/com/alibaba/com/caucho/hessian/io/ClockTest.java
index d60f9ab9..ccf0e94e 100644
--- a/java-8-test/src/test/java/com/alibaba/com/caucho/hessian/io/ClockTest.java
+++ b/java-8-test/src/test/java/com/alibaba/com/caucho/hessian/io/ClockTest.java
@@ -26,6 +26,8 @@ import org.junit.jupiter.api.condition.JRE;
import java.io.IOException;
import java.time.Clock;
import java.time.ZoneId;
+import java.util.ArrayList;
+import java.util.List;
public class ClockTest extends SerializeTestBase {
@Test
@@ -46,4 +48,12 @@ public class ClockTest extends SerializeTestBase {
Assertions.assertEquals(obj.getZone(),
hessian4ToHessian3(obj).getZone());
Assertions.assertEquals(obj.getZone(),
hessian3ToHessian4(obj).getZone());
}
+
+ @Test
+ void testCollection() throws IOException {
+ List<Object> list = new ArrayList<>();
+
+ Clock originalClock = Clock.system(ZoneId.of("Asia/Shanghai"));
+ testCollection(list, originalClock);
+ }
}
diff --git
a/java-8-test/src/test/java/com/alibaba/com/caucho/hessian/io/CollectionSerializerTest.java
b/java-8-test/src/test/java/com/alibaba/com/caucho/hessian/io/CollectionSerializerTest.java
index 7c4a1433..1330466e 100644
---
a/java-8-test/src/test/java/com/alibaba/com/caucho/hessian/io/CollectionSerializerTest.java
+++
b/java-8-test/src/test/java/com/alibaba/com/caucho/hessian/io/CollectionSerializerTest.java
@@ -18,6 +18,7 @@ package com.alibaba.com.caucho.hessian.io;
import com.alibaba.com.caucho.hessian.io.base.SerializeTestBase;
import com.alibaba.com.caucho.hessian.io.beans.SubUser;
+import java.util.ArrayList;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test;
@@ -105,4 +106,24 @@ public class CollectionSerializerTest extends
SerializeTestBase {
List deserialize = baseHessian2Serialize(vector);
Assertions.assertTrue(deserialize.equals(vector));
}
+
+ @Test
+ public void testCollection() throws Exception {
+ List<Object> list = new ArrayList<>();
+
+ Set set = new HashSet();
+ set.add(1111);
+ set.add(2222);
+ testCollection(list, set);
+
+ Vector vector = new Vector();
+ vector.add(1111);
+ vector.add(2222);
+ testCollection(list, vector);
+
+ List<String> stringList = new ArrayList<>();
+ stringList.add("1111");
+ stringList.add("2222");
+ testCollection(list, stringList);
+ }
}
diff --git
a/java-8-test/src/test/java/com/alibaba/com/caucho/hessian/io/CollectionsTest.java
b/java-8-test/src/test/java/com/alibaba/com/caucho/hessian/io/CollectionsTest.java
index 6b80d59b..b273af7e 100644
---
a/java-8-test/src/test/java/com/alibaba/com/caucho/hessian/io/CollectionsTest.java
+++
b/java-8-test/src/test/java/com/alibaba/com/caucho/hessian/io/CollectionsTest.java
@@ -146,4 +146,31 @@ public class CollectionsTest extends SerializeTestBase {
Assertions.assertEquals(copiesList.subList(1, 2),
hessian3ToHessian3(copiesList.subList(1, 2)));
Assertions.assertEquals(copiesList.subList(1, 2),
hessian4ToHessian3(copiesList.subList(1, 2)));
}
+
+ @Test
+ void testCollection() throws IOException {
+ List<Object> list = new ArrayList<>();
+
+ List<Integer> arrayList = new ArrayList<>();
+ arrayList.add(1);
+ arrayList.add(2);
+ arrayList.add(3);
+ List<Integer> unmodifiableList =
Collections.unmodifiableList(arrayList);
+ testCollection(list, unmodifiableList);
+
+ List<Integer> linkedList = new LinkedList<>();
+ linkedList.add(1);
+ linkedList.add(2);
+ linkedList.add(3);
+ unmodifiableList = Collections.unmodifiableList(linkedList);
+ testCollection(list, unmodifiableList);
+
+ List<Integer> synchronizedList =
Collections.synchronizedList(arrayList);
+ testCollection(list, synchronizedList);
+ synchronizedList = Collections.synchronizedList(linkedList);
+ testCollection(list, synchronizedList);
+
+ List<Integer> copiesList = Collections.nCopies(3, 1);
+ testCollection(list, copiesList);
+ }
}
diff --git
a/java-8-test/src/test/java/com/alibaba/com/caucho/hessian/io/ConcurrentLinkedDequeTest.java
b/java-8-test/src/test/java/com/alibaba/com/caucho/hessian/io/ConcurrentLinkedDequeTest.java
index 909f0d23..0f2389be 100644
---
a/java-8-test/src/test/java/com/alibaba/com/caucho/hessian/io/ConcurrentLinkedDequeTest.java
+++
b/java-8-test/src/test/java/com/alibaba/com/caucho/hessian/io/ConcurrentLinkedDequeTest.java
@@ -24,6 +24,7 @@ import org.junit.jupiter.api.condition.JRE;
import java.io.IOException;
import java.util.ArrayList;
+import java.util.List;
import java.util.concurrent.ConcurrentLinkedDeque;
public class ConcurrentLinkedDequeTest extends SerializeTestBase {
@@ -58,4 +59,22 @@ public class ConcurrentLinkedDequeTest extends
SerializeTestBase {
Assertions.assertEquals(new ArrayList<>(originalDeque), new
ArrayList<>(hessian3ToHessian3(originalDeque)));
Assertions.assertEquals(new ArrayList<>(originalDeque), new
ArrayList<>(hessian3ToHessian4(originalDeque)));
}
+
+ @Test
+ void testCollection() throws IOException {
+ ConcurrentLinkedDeque<String> originalDeque = new
ConcurrentLinkedDeque<>();
+ originalDeque.add("one");
+ originalDeque.add("two");
+ originalDeque.add("three");
+
+ List<ConcurrentLinkedDeque<String>> list = new ArrayList<>();
+ list.add(originalDeque);
+ list.add(originalDeque);
+
+ List<ConcurrentLinkedDeque<String>> result =
baseHessian2Serialize(list);
+
+ Assertions.assertEquals(list.size(), result.size());
+ Assertions.assertSame(result.get(0), result.get(1));
+ Assertions.assertEquals(new ArrayList<>(originalDeque), new
ArrayList<>(result.get(0)));
+ }
}
diff --git
a/java-8-test/src/test/java/com/alibaba/com/caucho/hessian/io/ConcurrentSkipListMapTest.java
b/java-8-test/src/test/java/com/alibaba/com/caucho/hessian/io/ConcurrentSkipListMapTest.java
index a133ab2c..0b6cb030 100644
---
a/java-8-test/src/test/java/com/alibaba/com/caucho/hessian/io/ConcurrentSkipListMapTest.java
+++
b/java-8-test/src/test/java/com/alibaba/com/caucho/hessian/io/ConcurrentSkipListMapTest.java
@@ -23,6 +23,8 @@ import org.junit.jupiter.api.condition.EnabledForJreRange;
import org.junit.jupiter.api.condition.JRE;
import java.io.IOException;
+import java.util.ArrayList;
+import java.util.List;
import java.util.Map;
import java.util.concurrent.ConcurrentSkipListMap;
@@ -74,4 +76,15 @@ public class ConcurrentSkipListMapTest extends
SerializeTestBase {
Assertions.assertEquals(v, resultEntry.getValue());
});
}
+
+ @Test
+ void testCollection() throws IOException {
+ List<Object> list = new ArrayList<>();
+
+ ConcurrentSkipListMap<String, Integer> originalMap = new
ConcurrentSkipListMap<>();
+ originalMap.put("one", 1);
+ originalMap.put("two", 2);
+ originalMap.put("three", 3);
+ list.add(originalMap);
+ }
}
diff --git
a/java-8-test/src/test/java/com/alibaba/com/caucho/hessian/io/CurrencyTest.java
b/java-8-test/src/test/java/com/alibaba/com/caucho/hessian/io/CurrencyTest.java
index 43e2f2c5..b872dc7b 100644
---
a/java-8-test/src/test/java/com/alibaba/com/caucho/hessian/io/CurrencyTest.java
+++
b/java-8-test/src/test/java/com/alibaba/com/caucho/hessian/io/CurrencyTest.java
@@ -23,7 +23,9 @@ import org.junit.jupiter.api.condition.EnabledForJreRange;
import org.junit.jupiter.api.condition.JRE;
import java.io.IOException;
+import java.util.ArrayList;
import java.util.Currency;
+import java.util.List;
public class CurrencyTest extends SerializeTestBase {
@@ -48,4 +50,12 @@ public class CurrencyTest extends SerializeTestBase {
Assertions.assertEquals(currency, hessian3ToHessian4(currency));
Assertions.assertEquals(currency, hessian4ToHessian3(currency));
}
+
+ @Test
+ void testCollection() throws IOException {
+ List<Object> list = new ArrayList<>();
+
+ Currency currency = Currency.getInstance("USD");
+ testCollection(list, currency);
+ }
}
diff --git
a/java-8-test/src/test/java/com/alibaba/com/caucho/hessian/io/DateFormatSymbolsTest.java
b/java-8-test/src/test/java/com/alibaba/com/caucho/hessian/io/DateFormatSymbolsTest.java
index 0d471b64..60aee540 100644
---
a/java-8-test/src/test/java/com/alibaba/com/caucho/hessian/io/DateFormatSymbolsTest.java
+++
b/java-8-test/src/test/java/com/alibaba/com/caucho/hessian/io/DateFormatSymbolsTest.java
@@ -24,6 +24,8 @@ import org.junit.jupiter.api.condition.JRE;
import java.io.IOException;
import java.text.DateFormatSymbols;
+import java.util.ArrayList;
+import java.util.List;
import java.util.Locale;
public class DateFormatSymbolsTest extends SerializeTestBase {
@@ -73,4 +75,24 @@ public class DateFormatSymbolsTest extends SerializeTestBase
{
Assertions.assertArrayEquals(obj.getWeekdays(),
hessian3ToHessian4(obj).getWeekdays());
Assertions.assertArrayEquals(obj.getShortWeekdays(),
hessian3ToHessian4(obj).getShortWeekdays());
}
+
+ @Test
+ void testCollection() throws IOException {
+ DateFormatSymbols originalDateFormatSymbols = new
DateFormatSymbols(Locale.US);
+
+ List<DateFormatSymbols> list = new ArrayList<>();
+ list.add(originalDateFormatSymbols);
+ list.add(originalDateFormatSymbols);
+
+ List<DateFormatSymbols> result = baseHessian2Serialize(list);
+
+ Assertions.assertEquals(list.size(), result.size());
+ Assertions.assertSame(result.get(0), result.get(1));
+
Assertions.assertArrayEquals(originalDateFormatSymbols.getAmPmStrings(),
result.get(0).getAmPmStrings());
+ Assertions.assertArrayEquals(originalDateFormatSymbols.getEras(),
result.get(0).getEras());
+ Assertions.assertArrayEquals(originalDateFormatSymbols.getMonths(),
result.get(0).getMonths());
+
Assertions.assertArrayEquals(originalDateFormatSymbols.getShortMonths(),
result.get(0).getShortMonths());
+ Assertions.assertArrayEquals(originalDateFormatSymbols.getWeekdays(),
result.get(0).getWeekdays());
+
Assertions.assertArrayEquals(originalDateFormatSymbols.getShortWeekdays(),
result.get(0).getShortWeekdays());
+ }
}
diff --git
a/java-8-test/src/test/java/com/alibaba/com/caucho/hessian/io/EnumSetTest.java
b/java-8-test/src/test/java/com/alibaba/com/caucho/hessian/io/EnumSetTest.java
index f40113dc..190bbbc0 100644
---
a/java-8-test/src/test/java/com/alibaba/com/caucho/hessian/io/EnumSetTest.java
+++
b/java-8-test/src/test/java/com/alibaba/com/caucho/hessian/io/EnumSetTest.java
@@ -23,7 +23,9 @@ import org.junit.jupiter.api.condition.EnabledForJreRange;
import org.junit.jupiter.api.condition.JRE;
import java.io.IOException;
+import java.util.ArrayList;
import java.util.EnumSet;
+import java.util.List;
enum TestEnumSet {
ONE, TWO, THREE
@@ -80,4 +82,12 @@ public class EnumSetTest extends SerializeTestBase {
Assertions.assertEquals(largeEnumSet,
hessian3ToHessian4(largeEnumSet));
Assertions.assertEquals(largeEnumSet,
hessian4ToHessian3(largeEnumSet));
}
+
+ @Test
+ void testCollection() throws IOException {
+ List<Object> list = new ArrayList<>();
+
+ EnumSet<TestEnumSet> originalEnumSet = EnumSet.of(TestEnumSet.ONE,
TestEnumSet.TWO);
+ testCollection(list, originalEnumSet);
+ }
}
diff --git
a/java-8-test/src/test/java/com/alibaba/com/caucho/hessian/io/FileTest.java
b/java-8-test/src/test/java/com/alibaba/com/caucho/hessian/io/FileTest.java
index d2c4ce85..c67735a1 100644
--- a/java-8-test/src/test/java/com/alibaba/com/caucho/hessian/io/FileTest.java
+++ b/java-8-test/src/test/java/com/alibaba/com/caucho/hessian/io/FileTest.java
@@ -24,6 +24,8 @@ import org.junit.jupiter.api.condition.JRE;
import java.io.File;
import java.io.IOException;
+import java.util.ArrayList;
+import java.util.List;
public class FileTest extends SerializeTestBase {
@Test
@@ -44,4 +46,12 @@ public class FileTest extends SerializeTestBase {
Assertions.assertEquals(obj, hessian4ToHessian3(obj));
Assertions.assertEquals(obj, hessian3ToHessian4(obj));
}
+
+ @Test
+ void testCollection() throws IOException {
+ List<Object> list = new ArrayList<>();
+
+ File originalFile = new File("test.txt");
+ testCollection(list, originalFile);
+ }
}
diff --git
a/java-8-test/src/test/java/com/alibaba/com/caucho/hessian/io/Hessian2UUIDTest.java
b/java-8-test/src/test/java/com/alibaba/com/caucho/hessian/io/Hessian2UUIDTest.java
index b3c7a0de..667d93d2 100644
---
a/java-8-test/src/test/java/com/alibaba/com/caucho/hessian/io/Hessian2UUIDTest.java
+++
b/java-8-test/src/test/java/com/alibaba/com/caucho/hessian/io/Hessian2UUIDTest.java
@@ -97,4 +97,19 @@ public class Hessian2UUIDTest extends SerializeTestBase {
assertEquals(actual, hessian3ToHessian4(actual));
}
+ @Test
+ public void testCollection() throws IOException {
+ UUID uuid = UUID.randomUUID();
+
+ List<UUID> list = new ArrayList<>();
+ list.add(uuid);
+ list.add(uuid);
+
+ List<UUID> result = baseHessian2Serialize(list);
+
+ assertEquals(list.size(), result.size());
+ assertEquals(uuid, result.get(0));
+ assertEquals(uuid, result.get(1));
+ assertEquals(result.get(0), result.get(1));
+ }
}
diff --git
a/java-8-test/src/test/java/com/alibaba/com/caucho/hessian/io/HessianJavaSerializeTest.java
b/java-8-test/src/test/java/com/alibaba/com/caucho/hessian/io/HessianJavaSerializeTest.java
index acdd2f55..651ab643 100644
---
a/java-8-test/src/test/java/com/alibaba/com/caucho/hessian/io/HessianJavaSerializeTest.java
+++
b/java-8-test/src/test/java/com/alibaba/com/caucho/hessian/io/HessianJavaSerializeTest.java
@@ -164,4 +164,50 @@ public class HessianJavaSerializeTest extends
SerializeTestBase {
Assertions.assertEquals(dData, hessian3ToHessian4(fData));
}
+ @Test
+ public void testCollection() throws Exception {
+ BaseUser baseUser = new BaseUser();
+ baseUser.setUserId(1);
+ baseUser.setUserName("tom");
+ List<BaseUser> baseUserList = new ArrayList<>();
+ baseUserList.add(baseUser);
+ baseUserList.add(baseUser);
+ List<BaseUser> result = baseHessian2Serialize(baseUserList);
+ Assertions.assertEquals(baseUserList.size(), result.size());
+ Assertions.assertSame(result.get(0), result.get(1));
+ Assertions.assertEquals("tom", result.get(0).getUserName());
+
+ SubUser subUser = new SubUser();
+ subUser.setUserId(1);
+ subUser.setUserName("tom");
+ List<SubUser> subUserList = new ArrayList<>();
+ subUserList.add(subUser);
+ subUserList.add(subUser);
+ List<SubUser> subUserResult = baseHessian2Serialize(subUserList);
+ Assertions.assertEquals(subUserList.size(), subUserResult.size());
+ Assertions.assertSame(subUserResult.get(0), subUserResult.get(1));
+ Assertions.assertEquals("tom", subUserResult.get(0).getUserName());
+
+ List<Integer> list = new ArrayList<>();
+ list.add(null);
+ list.add(null);
+ list.add(3);
+ subUser.setAgeList(list);
+ subUserResult = baseHessian2Serialize(subUserList);
+ Assertions.assertEquals(subUserList.size(), subUserResult.size());
+ Assertions.assertSame(subUserResult.get(0), subUserResult.get(1));
+ Assertions.assertEquals("tom", subUserResult.get(0).getUserName());
+
+ GrandsonUser grandsonUser = new GrandsonUser();
+ grandsonUser.setUserId(1);
+ grandsonUser.setUserName("tom");
+ List<GrandsonUser> grandsonUserList = new ArrayList<>();
+ grandsonUserList.add(grandsonUser);
+ grandsonUserList.add(grandsonUser);
+ List<GrandsonUser> grandsonUserResult =
baseHessian2Serialize(grandsonUserList);
+ Assertions.assertEquals(grandsonUserList.size(),
grandsonUserResult.size());
+ Assertions.assertSame(grandsonUserResult.get(0),
grandsonUserResult.get(1));
+ Assertions.assertEquals("tom",
grandsonUserResult.get(0).getUserName());
+ }
+
}
diff --git
a/java-8-test/src/test/java/com/alibaba/com/caucho/hessian/io/LinkedTransferQueueTest.java
b/java-8-test/src/test/java/com/alibaba/com/caucho/hessian/io/LinkedTransferQueueTest.java
index 1d3f5ceb..7173b52c 100644
---
a/java-8-test/src/test/java/com/alibaba/com/caucho/hessian/io/LinkedTransferQueueTest.java
+++
b/java-8-test/src/test/java/com/alibaba/com/caucho/hessian/io/LinkedTransferQueueTest.java
@@ -24,6 +24,7 @@ import org.junit.jupiter.api.condition.JRE;
import java.io.IOException;
import java.util.ArrayList;
+import java.util.List;
import java.util.concurrent.LinkedTransferQueue;
public class LinkedTransferQueueTest extends SerializeTestBase {
@@ -55,4 +56,22 @@ public class LinkedTransferQueueTest extends
SerializeTestBase {
Assertions.assertEquals(new ArrayList<>(obj), new
ArrayList<>(hessian4ToHessian3(obj)));
Assertions.assertEquals(new ArrayList<>(obj), new
ArrayList<>(hessian3ToHessian4(obj)));
}
+
+ @Test
+ void testCollection() throws IOException {
+ LinkedTransferQueue<Integer> originalLinkedTransferQueue = new
LinkedTransferQueue<>();
+ originalLinkedTransferQueue.offer(1);
+ originalLinkedTransferQueue.offer(2);
+ originalLinkedTransferQueue.offer(3);
+
+ List<LinkedTransferQueue<Integer>> list = new ArrayList<>();
+ list.add(originalLinkedTransferQueue);
+ list.add(originalLinkedTransferQueue);
+
+ List<LinkedTransferQueue<Integer>> result =
baseHessian2Serialize(list);
+
+ Assertions.assertEquals(list.size(), result.size());
+ Assertions.assertSame(result.get(0), result.get(1));
+ Assertions.assertEquals(new ArrayList<>(originalLinkedTransferQueue),
new ArrayList<>(result.get(0)));
+ }
}
diff --git
a/java-8-test/src/test/java/com/alibaba/com/caucho/hessian/io/LocaleSerializerTest.java
b/java-8-test/src/test/java/com/alibaba/com/caucho/hessian/io/LocaleSerializerTest.java
index f4a57075..5f616ce3 100644
---
a/java-8-test/src/test/java/com/alibaba/com/caucho/hessian/io/LocaleSerializerTest.java
+++
b/java-8-test/src/test/java/com/alibaba/com/caucho/hessian/io/LocaleSerializerTest.java
@@ -23,6 +23,8 @@ import org.junit.jupiter.api.condition.EnabledForJreRange;
import org.junit.jupiter.api.condition.JRE;
import java.io.IOException;
+import java.util.ArrayList;
+import java.util.List;
import java.util.Locale;
public class LocaleSerializerTest extends SerializeTestBase {
@@ -49,6 +51,14 @@ public class LocaleSerializerTest extends SerializeTestBase {
assertLocaleCompact(new Locale("zh-hant", "CN", "GBK"));
}
+ @Test
+ public void testCollection() throws IOException {
+ List<Object> list = new ArrayList<>();
+
+ Locale locale = new Locale("zh", "CN", "Hans");
+ testCollection(list, locale);
+ }
+
private void assertLocale(Locale locale) throws IOException {
Assertions.assertEquals(locale, baseHessian2Serialize(locale));
}
diff --git
a/java-8-test/src/test/java/com/alibaba/com/caucho/hessian/io/LocaleTest.java
b/java-8-test/src/test/java/com/alibaba/com/caucho/hessian/io/LocaleTest.java
index 054b68cd..9e97d05c 100644
---
a/java-8-test/src/test/java/com/alibaba/com/caucho/hessian/io/LocaleTest.java
+++
b/java-8-test/src/test/java/com/alibaba/com/caucho/hessian/io/LocaleTest.java
@@ -23,6 +23,8 @@ import org.junit.jupiter.api.condition.EnabledForJreRange;
import org.junit.jupiter.api.condition.JRE;
import java.io.IOException;
+import java.util.ArrayList;
+import java.util.List;
import java.util.Locale;
public class LocaleTest extends SerializeTestBase {
@@ -44,4 +46,12 @@ public class LocaleTest extends SerializeTestBase {
Assertions.assertEquals(obj, hessian4ToHessian3(obj));
Assertions.assertEquals(obj, hessian3ToHessian4(obj));
}
+
+ @Test
+ void testCollection() throws IOException {
+ List<Object> list = new ArrayList<>();
+
+ Locale locale = Locale.US;
+ testCollection(list, locale);
+ }
}
diff --git
a/java-8-test/src/test/java/com/alibaba/com/caucho/hessian/io/NumberFormatTest.java
b/java-8-test/src/test/java/com/alibaba/com/caucho/hessian/io/NumberFormatTest.java
index d5cdd71f..4b938a14 100644
---
a/java-8-test/src/test/java/com/alibaba/com/caucho/hessian/io/NumberFormatTest.java
+++
b/java-8-test/src/test/java/com/alibaba/com/caucho/hessian/io/NumberFormatTest.java
@@ -24,6 +24,8 @@ import org.junit.jupiter.api.condition.JRE;
import java.io.IOException;
import java.text.NumberFormat;
+import java.util.ArrayList;
+import java.util.List;
import java.util.Locale;
public class NumberFormatTest extends SerializeTestBase {
@@ -78,4 +80,23 @@ public class NumberFormatTest extends SerializeTestBase {
// TODO Support currency
// Assertions.assertEquals(obj.getCurrency(),
hessian3ToHessian4(obj).getCurrency());
}
+
+ @Test
+ void testCollection() throws IOException {
+ NumberFormat originalNumberFormat =
NumberFormat.getInstance(Locale.US);
+
+ List<NumberFormat> list = new ArrayList<>();
+ list.add(originalNumberFormat);
+ list.add(originalNumberFormat);
+
+ List<NumberFormat> result = baseHessian2Serialize(list);
+
+ Assertions.assertEquals(list.size(), result.size());
+ Assertions.assertSame(result.get(0), result.get(1));
+
Assertions.assertEquals(originalNumberFormat.getMaximumFractionDigits(),
result.get(0).getMaximumFractionDigits());
+
Assertions.assertEquals(originalNumberFormat.getMaximumIntegerDigits(),
result.get(0).getMaximumIntegerDigits());
+
Assertions.assertEquals(originalNumberFormat.getMinimumFractionDigits(),
result.get(0).getMinimumFractionDigits());
+
Assertions.assertEquals(originalNumberFormat.getMinimumIntegerDigits(),
result.get(0).getMinimumIntegerDigits());
+ Assertions.assertEquals(originalNumberFormat.getRoundingMode(),
result.get(0).getRoundingMode());
+ }
}
diff --git
a/java-8-test/src/test/java/com/alibaba/com/caucho/hessian/io/PriorityBlockingQueueTest.java
b/java-8-test/src/test/java/com/alibaba/com/caucho/hessian/io/PriorityBlockingQueueTest.java
index 8e6a6689..ce2b307f 100644
---
a/java-8-test/src/test/java/com/alibaba/com/caucho/hessian/io/PriorityBlockingQueueTest.java
+++
b/java-8-test/src/test/java/com/alibaba/com/caucho/hessian/io/PriorityBlockingQueueTest.java
@@ -24,6 +24,7 @@ import org.junit.jupiter.api.condition.JRE;
import java.io.IOException;
import java.util.ArrayList;
+import java.util.List;
import java.util.concurrent.PriorityBlockingQueue;
public class PriorityBlockingQueueTest extends SerializeTestBase {
@@ -58,4 +59,23 @@ public class PriorityBlockingQueueTest extends
SerializeTestBase {
Assertions.assertEquals(new
ArrayList<>(originalPriorityBlockingQueue), new
ArrayList<>(hessian3ToHessian3(originalPriorityBlockingQueue)));
Assertions.assertEquals(new
ArrayList<>(originalPriorityBlockingQueue), new
ArrayList<>(hessian3ToHessian4(originalPriorityBlockingQueue)));
}
+
+ @Test
+ void testCollection() throws IOException {
+ PriorityBlockingQueue<Integer> originalPriorityBlockingQueue = new
PriorityBlockingQueue<>(16, Integer::compareTo);
+ originalPriorityBlockingQueue.add(1);
+ originalPriorityBlockingQueue.add(2);
+ originalPriorityBlockingQueue.add(4);
+ originalPriorityBlockingQueue.add(-1);
+
+ List<PriorityBlockingQueue<Integer>> list = new ArrayList<>();
+ list.add(originalPriorityBlockingQueue);
+ list.add(originalPriorityBlockingQueue);
+
+ List<PriorityBlockingQueue<Integer>> result =
baseHessian2Serialize(list);
+
+ Assertions.assertEquals(list.size(), result.size());
+ Assertions.assertSame(result.get(0), result.get(1));
+ Assertions.assertEquals(new
ArrayList<>(originalPriorityBlockingQueue), new ArrayList<>(result.get(0)));
+ }
}
diff --git
a/java-8-test/src/test/java/com/alibaba/com/caucho/hessian/io/PropertiesTest.java
b/java-8-test/src/test/java/com/alibaba/com/caucho/hessian/io/PropertiesTest.java
index db357cf1..19533e8e 100644
---
a/java-8-test/src/test/java/com/alibaba/com/caucho/hessian/io/PropertiesTest.java
+++
b/java-8-test/src/test/java/com/alibaba/com/caucho/hessian/io/PropertiesTest.java
@@ -23,6 +23,8 @@ import org.junit.jupiter.api.condition.EnabledForJreRange;
import org.junit.jupiter.api.condition.JRE;
import java.io.IOException;
+import java.util.ArrayList;
+import java.util.List;
import java.util.Properties;
public class PropertiesTest extends SerializeTestBase {
@@ -48,4 +50,14 @@ public class PropertiesTest extends SerializeTestBase {
Assertions.assertEquals(obj, hessian4ToHessian3(obj));
Assertions.assertEquals(obj, hessian3ToHessian4(obj));
}
+
+ @Test
+ void testCollection() throws IOException {
+ List<Object> list = new ArrayList<>();
+
+ Properties originalProperties = new Properties();
+ originalProperties.setProperty("key1", "value1");
+ originalProperties.setProperty("key2", "value2");
+ testCollection(list, originalProperties);
+ }
}
diff --git
a/java-8-test/src/test/java/com/alibaba/com/caucho/hessian/io/SimpleTimeZoneTest.java
b/java-8-test/src/test/java/com/alibaba/com/caucho/hessian/io/SimpleTimeZoneTest.java
index 1b6b25ae..501d91fd 100644
---
a/java-8-test/src/test/java/com/alibaba/com/caucho/hessian/io/SimpleTimeZoneTest.java
+++
b/java-8-test/src/test/java/com/alibaba/com/caucho/hessian/io/SimpleTimeZoneTest.java
@@ -21,6 +21,8 @@ import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test;
import java.io.IOException;
+import java.util.ArrayList;
+import java.util.List;
import java.util.SimpleTimeZone;
public class SimpleTimeZoneTest extends SerializeTestBase {
@@ -32,4 +34,12 @@ public class SimpleTimeZoneTest extends SerializeTestBase {
Assertions.assertEquals(originalTimeZone, result);
}
+
+ @Test
+ void testCollection() throws IOException {
+ List<Object> list = new ArrayList<>();
+
+ SimpleTimeZone originalTimeZone = new SimpleTimeZone(3600000, "ID");
+ testCollection(list, originalTimeZone);
+ }
}
diff --git
a/java-8-test/src/test/java/com/alibaba/com/caucho/hessian/io/StringBufferTest.java
b/java-8-test/src/test/java/com/alibaba/com/caucho/hessian/io/StringBufferTest.java
index 43f0cb82..d314e5fa 100644
---
a/java-8-test/src/test/java/com/alibaba/com/caucho/hessian/io/StringBufferTest.java
+++
b/java-8-test/src/test/java/com/alibaba/com/caucho/hessian/io/StringBufferTest.java
@@ -23,6 +23,8 @@ import org.junit.jupiter.api.condition.EnabledForJreRange;
import org.junit.jupiter.api.condition.JRE;
import java.io.IOException;
+import java.util.ArrayList;
+import java.util.List;
public class StringBufferTest extends SerializeTestBase {
@Test
@@ -43,4 +45,19 @@ public class StringBufferTest extends SerializeTestBase {
Assertions.assertEquals(obj.toString(),
hessian4ToHessian3(obj).toString());
Assertions.assertEquals(obj.toString(),
hessian3ToHessian4(obj).toString());
}
+
+ @Test
+ void testCollection() throws IOException {
+ StringBuffer originalStringBuffer = new StringBuffer("Hello, World!");
+
+ List<StringBuffer> list = new ArrayList<>();
+ list.add(originalStringBuffer);
+ list.add(originalStringBuffer);
+
+ List<StringBuffer> result = baseHessian2Serialize(list);
+
+ Assertions.assertEquals(list.size(), result.size());
+ Assertions.assertSame(result.get(0), result.get(1));
+ Assertions.assertEquals(originalStringBuffer.toString(),
result.get(0).toString());
+ }
}
diff --git
a/java-8-test/src/test/java/com/alibaba/com/caucho/hessian/io/StringBuilderTest.java
b/java-8-test/src/test/java/com/alibaba/com/caucho/hessian/io/StringBuilderTest.java
index 1bdfaf4b..d2ce611e 100644
---
a/java-8-test/src/test/java/com/alibaba/com/caucho/hessian/io/StringBuilderTest.java
+++
b/java-8-test/src/test/java/com/alibaba/com/caucho/hessian/io/StringBuilderTest.java
@@ -23,6 +23,8 @@ import org.junit.jupiter.api.condition.EnabledForJreRange;
import org.junit.jupiter.api.condition.JRE;
import java.io.IOException;
+import java.util.ArrayList;
+import java.util.List;
public class StringBuilderTest extends SerializeTestBase {
@Test
@@ -43,4 +45,19 @@ public class StringBuilderTest extends SerializeTestBase {
Assertions.assertEquals(obj.toString(),
hessian4ToHessian3(obj).toString());
Assertions.assertEquals(obj.toString(),
hessian3ToHessian4(obj).toString());
}
+
+ @Test
+ void testCollection() throws IOException {
+ StringBuilder originalStringBuilder = new StringBuilder("test");
+
+ List<StringBuilder> list = new ArrayList<>();
+ list.add(originalStringBuilder);
+ list.add(originalStringBuilder);
+
+ List<StringBuilder> result = baseHessian2Serialize(list);
+
+ Assertions.assertEquals(list.size(), result.size());
+ Assertions.assertSame(result.get(0), result.get(1));
+ Assertions.assertEquals(originalStringBuilder.toString(),
result.get(0).toString());
+ }
}
diff --git
a/java-8-test/src/test/java/com/alibaba/com/caucho/hessian/io/SynchronousQueueTest.java
b/java-8-test/src/test/java/com/alibaba/com/caucho/hessian/io/SynchronousQueueTest.java
index 9add2939..5832f2c6 100644
---
a/java-8-test/src/test/java/com/alibaba/com/caucho/hessian/io/SynchronousQueueTest.java
+++
b/java-8-test/src/test/java/com/alibaba/com/caucho/hessian/io/SynchronousQueueTest.java
@@ -24,6 +24,7 @@ import org.junit.jupiter.api.condition.JRE;
import java.io.IOException;
import java.util.ArrayList;
+import java.util.List;
import java.util.concurrent.SynchronousQueue;
public class SynchronousQueueTest extends SerializeTestBase {
@@ -55,4 +56,22 @@ public class SynchronousQueueTest extends SerializeTestBase {
Assertions.assertEquals(new ArrayList<>(obj), new
ArrayList<>(hessian4ToHessian3(obj)));
Assertions.assertEquals(new ArrayList<>(obj), new
ArrayList<>(hessian3ToHessian4(obj)));
}
+
+ @Test
+ void testCollection() throws IOException {
+ SynchronousQueue<Integer> originalSynchronousQueue = new
SynchronousQueue<>();
+ originalSynchronousQueue.offer(1);
+ originalSynchronousQueue.offer(2);
+ originalSynchronousQueue.offer(3);
+
+ List<SynchronousQueue<Integer>> list = new ArrayList<>();
+ list.add(originalSynchronousQueue);
+ list.add(originalSynchronousQueue);
+
+ List<SynchronousQueue<Integer>> result = baseHessian2Serialize(list);
+
+ Assertions.assertEquals(list.size(), result.size());
+ Assertions.assertSame(result.get(0), result.get(1));
+ Assertions.assertEquals(new ArrayList<>(originalSynchronousQueue), new
ArrayList<>(result.get(0)));
+ }
}
diff --git
a/java-8-test/src/test/java/com/alibaba/com/caucho/hessian/io/ThrowableTest.java
b/java-8-test/src/test/java/com/alibaba/com/caucho/hessian/io/ThrowableTest.java
index daf96fb1..d7a143a2 100644
---
a/java-8-test/src/test/java/com/alibaba/com/caucho/hessian/io/ThrowableTest.java
+++
b/java-8-test/src/test/java/com/alibaba/com/caucho/hessian/io/ThrowableTest.java
@@ -23,6 +23,8 @@ import org.junit.jupiter.api.condition.EnabledForJreRange;
import org.junit.jupiter.api.condition.JRE;
import java.io.IOException;
+import java.util.ArrayList;
+import java.util.List;
public class ThrowableTest extends SerializeTestBase {
@Test
@@ -55,4 +57,21 @@ public class ThrowableTest extends SerializeTestBase {
Assertions.assertEquals(throwable.getMessage(),
hessian3ToHessian4(throwable).getMessage());
Assertions.assertEquals(throwable.getLocalizedMessage(),
hessian3ToHessian4(throwable).getLocalizedMessage());
}
+
+ @Test
+ void testCollection() throws IOException {
+ Throwable throwable = new Throwable("test");
+
+ List<Throwable> list = new ArrayList<>();
+ list.add(throwable);
+ list.add(throwable);
+
+ List<Throwable> result = baseHessian2Serialize(list);
+
+ Assertions.assertEquals(list.size(), result.size());
+ Assertions.assertSame(result.get(0), result.get(1));
+ Assertions.assertArrayEquals(throwable.getStackTrace(),
result.get(0).getStackTrace());
+ Assertions.assertEquals(throwable.getMessage(),
result.get(0).getMessage());
+ Assertions.assertEquals(throwable.getLocalizedMessage(),
result.get(0).getLocalizedMessage());
+ }
}
diff --git
a/java-8-test/src/test/java/com/alibaba/com/caucho/hessian/io/TreeMapTest.java
b/java-8-test/src/test/java/com/alibaba/com/caucho/hessian/io/TreeMapTest.java
index 45e67063..2e44578d 100644
---
a/java-8-test/src/test/java/com/alibaba/com/caucho/hessian/io/TreeMapTest.java
+++
b/java-8-test/src/test/java/com/alibaba/com/caucho/hessian/io/TreeMapTest.java
@@ -23,6 +23,8 @@ import org.junit.jupiter.api.condition.EnabledForJreRange;
import org.junit.jupiter.api.condition.JRE;
import java.io.IOException;
+import java.util.ArrayList;
+import java.util.List;
import java.util.Map;
import java.util.TreeMap;
@@ -77,4 +79,15 @@ public class TreeMapTest extends SerializeTestBase {
Assertions.assertEquals(v, resultEntry.getValue());
});
}
+
+ @Test
+ void testCollection() throws IOException {
+ List<Object> list = new ArrayList<>();
+
+ TreeMap<String, Integer> originalTreeMap = new TreeMap<>();
+ originalTreeMap.put("one", 1);
+ originalTreeMap.put("two", 2);
+ originalTreeMap.put("three", 3);
+ testCollection(list, originalTreeMap);
+ }
}
diff --git
a/java-8-test/src/test/java/com/alibaba/com/caucho/hessian/io/TreeSetTest.java
b/java-8-test/src/test/java/com/alibaba/com/caucho/hessian/io/TreeSetTest.java
index 1c261148..8285cc6e 100644
---
a/java-8-test/src/test/java/com/alibaba/com/caucho/hessian/io/TreeSetTest.java
+++
b/java-8-test/src/test/java/com/alibaba/com/caucho/hessian/io/TreeSetTest.java
@@ -23,6 +23,8 @@ import org.junit.jupiter.api.condition.EnabledForJreRange;
import org.junit.jupiter.api.condition.JRE;
import java.io.IOException;
+import java.util.ArrayList;
+import java.util.List;
import java.util.TreeSet;
public class TreeSetTest extends SerializeTestBase {
@@ -58,4 +60,16 @@ public class TreeSetTest extends SerializeTestBase {
Assertions.assertEquals(treeSet, hessian3ToHessian3(treeSet));
Assertions.assertEquals(treeSet, hessian3ToHessian4(treeSet));
}
+
+ @Test
+ void testCollection() throws IOException {
+ List<Object> list = new ArrayList<>();
+
+ TreeSet<Integer> treeSet = new TreeSet<>(Integer::compareTo);
+ treeSet.add(1);
+ treeSet.add(2);
+ treeSet.add(4);
+ treeSet.add(-1);
+ testCollection(list, treeSet);
+ }
}
diff --git
a/java-8-test/src/test/java/com/alibaba/com/caucho/hessian/io/URITest.java
b/java-8-test/src/test/java/com/alibaba/com/caucho/hessian/io/URITest.java
index 8df93287..eff66626 100644
--- a/java-8-test/src/test/java/com/alibaba/com/caucho/hessian/io/URITest.java
+++ b/java-8-test/src/test/java/com/alibaba/com/caucho/hessian/io/URITest.java
@@ -25,6 +25,8 @@ import org.junit.jupiter.api.condition.JRE;
import java.io.IOException;
import java.net.URI;
import java.net.URISyntaxException;
+import java.util.ArrayList;
+import java.util.List;
public class URITest extends SerializeTestBase {
@Test
@@ -56,4 +58,12 @@ public class URITest extends SerializeTestBase {
Assertions.assertEquals(originalURI.toString(), result.toString());
}
+
+ @Test
+ void testCollection() throws IOException, URISyntaxException {
+ List<Object> list = new ArrayList<>();
+
+ URI originalURI = new
URI("http://username:[email protected]:8080/path/to/resource?param1=value1¶m2=value2#fragment");
+ testCollection(list, originalURI);
+ }
}
diff --git
a/java-8-test/src/test/java/com/alibaba/com/caucho/hessian/io/VectorTest.java
b/java-8-test/src/test/java/com/alibaba/com/caucho/hessian/io/VectorTest.java
index 49e3a204..095f37cd 100644
---
a/java-8-test/src/test/java/com/alibaba/com/caucho/hessian/io/VectorTest.java
+++
b/java-8-test/src/test/java/com/alibaba/com/caucho/hessian/io/VectorTest.java
@@ -23,6 +23,8 @@ import org.junit.jupiter.api.condition.EnabledForJreRange;
import org.junit.jupiter.api.condition.JRE;
import java.io.IOException;
+import java.util.ArrayList;
+import java.util.List;
import java.util.Vector;
public class VectorTest extends SerializeTestBase {
@@ -57,4 +59,16 @@ public class VectorTest extends SerializeTestBase {
Assertions.assertEquals(treeSet, hessian3ToHessian3(treeSet));
Assertions.assertEquals(treeSet, hessian3ToHessian4(treeSet));
}
+
+ @Test
+ void testCollection() throws IOException {
+ List<Object> list = new ArrayList<>();
+
+ Vector<Integer> vector = new Vector<>();
+ vector.add(1);
+ vector.add(2);
+ vector.add(4);
+ vector.add(-1);
+ testCollection(list, vector);
+ }
}
diff --git
a/java-8-test/src/test/java/com/alibaba/com/caucho/hessian/io/WeekFieldsTest.java
b/java-8-test/src/test/java/com/alibaba/com/caucho/hessian/io/WeekFieldsTest.java
index 205525fc..778ed2ab 100644
---
a/java-8-test/src/test/java/com/alibaba/com/caucho/hessian/io/WeekFieldsTest.java
+++
b/java-8-test/src/test/java/com/alibaba/com/caucho/hessian/io/WeekFieldsTest.java
@@ -22,6 +22,8 @@ import org.junit.jupiter.api.Test;
import java.io.IOException;
import java.time.temporal.WeekFields;
+import java.util.ArrayList;
+import java.util.List;
import java.util.Locale;
public class WeekFieldsTest extends SerializeTestBase {
@@ -33,4 +35,12 @@ public class WeekFieldsTest extends SerializeTestBase {
Assertions.assertEquals(originalWeekFields, result);
}
+
+ @Test
+ void testCollection() throws IOException {
+ List<Object> list = new ArrayList<>();
+
+ WeekFields originalWeekFields = WeekFields.of(Locale.FRANCE);
+ testCollection(list, originalWeekFields);
+ }
}
diff --git
a/java-8-test/src/test/java/com/alibaba/com/caucho/hessian/io/atomic/LongAdderTest.java
b/java-8-test/src/test/java/com/alibaba/com/caucho/hessian/io/atomic/LongAdderTest.java
index 44278f6d..4aaf8287 100644
---
a/java-8-test/src/test/java/com/alibaba/com/caucho/hessian/io/atomic/LongAdderTest.java
+++
b/java-8-test/src/test/java/com/alibaba/com/caucho/hessian/io/atomic/LongAdderTest.java
@@ -21,6 +21,8 @@ import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test;
import java.io.IOException;
+import java.util.ArrayList;
+import java.util.List;
import java.util.concurrent.atomic.LongAdder;
public class LongAdderTest extends SerializeTestBase {
@@ -31,4 +33,20 @@ public class LongAdderTest extends SerializeTestBase {
Assertions.assertEquals(longAdder.longValue(),
baseHessian2Serialize(longAdder).longValue());
}
+
+ @Test
+ void testCollection() throws IOException {
+ LongAdder longAdder = new LongAdder();
+ longAdder.add(1);
+
+ List<LongAdder> list = new ArrayList<>();
+ list.add(longAdder);
+ list.add(longAdder);
+
+ List<LongAdder> result = baseHessian2Serialize(list);
+
+ Assertions.assertEquals(list.size(), result.size());
+ Assertions.assertSame(result.get(0), result.get(1));
+ Assertions.assertEquals(longAdder.longValue(),
result.get(0).longValue());
+ }
}
diff --git
a/java-8-test/src/test/java/com/alibaba/com/caucho/hessian/io/base/SerializeTestBase.java
b/java-8-test/src/test/java/com/alibaba/com/caucho/hessian/io/base/SerializeTestBase.java
index e661f98b..582fbcb4 100644
---
a/java-8-test/src/test/java/com/alibaba/com/caucho/hessian/io/base/SerializeTestBase.java
+++
b/java-8-test/src/test/java/com/alibaba/com/caucho/hessian/io/base/SerializeTestBase.java
@@ -22,6 +22,8 @@ import com.alibaba.com.caucho.hessian.io.Hessian2Output;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
+import java.util.List;
+import org.junit.jupiter.api.Assertions;
/**
* hessian base serialize utils
@@ -85,5 +87,21 @@ public class SerializeTestBase {
return (T) input.readObject();
}
-
+ protected <T> void testCollection(List<Object> list, T t) throws
IOException {
+ try {
+ list.clear();
+ list.add(t);
+ list.add(t);
+ List<Object> result = baseHessian2Serialize(list);
+ Assertions.assertEquals(list.size(), result.size());
+ Assertions.assertSame(result.get(0), result.get(1));
+ if (t instanceof Object[]) {
+ Assertions.assertArrayEquals((Object[]) t, (Object[])
result.get(0));
+ } else {
+ Assertions.assertEquals(t, result.get(0));
+ }
+ } finally {
+ list.clear();
+ }
+ }
}
diff --git
a/java-8-test/src/test/java/com/alibaba/com/caucho/hessian/io/issue73/SerializeTest.java
b/java-8-test/src/test/java/com/alibaba/com/caucho/hessian/io/issue73/SerializeTest.java
index 992149ed..dea14967 100644
---
a/java-8-test/src/test/java/com/alibaba/com/caucho/hessian/io/issue73/SerializeTest.java
+++
b/java-8-test/src/test/java/com/alibaba/com/caucho/hessian/io/issue73/SerializeTest.java
@@ -17,6 +17,7 @@
package com.alibaba.com.caucho.hessian.io.issue73;
import com.alibaba.com.caucho.hessian.io.base.SerializeTestBase;
+import java.util.ArrayList;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test;
@@ -57,4 +58,32 @@ public class SerializeTest extends SerializeTestBase {
Assertions.assertEquals(result, hessian3ToHessian4(result));
}
+
+ @Test
+ void testCollection() throws IOException {
+ List<Object> list = new ArrayList<>();
+
+ ComplainDto complainDto = new ComplainDto();
+ complainDto.setAppealReason("1");
+ complainDto.setAppealState(2);
+ complainDto.setAppealType((byte) 3);
+ complainDto.setClass1Name("4");
+ complainDto.setClass2Name("5");
+ complainDto.setClass3Name("6");
+ complainDto.setComplainDate("7");
+ complainDto.setComplainOi(Arrays.asList("8"));
+ complainDto.setComplainOrderId("9");
+ complainDto.setComplainResult("10");
+ complainDto.setComplainStatus((byte) 11);
+ complainDto.setComplainStatusName("12");
+ complainDto.setCustomerName("13");
+ complainDto.setRemark("14");
+ complainDto.setShowType(Boolean.TRUE);
+ complainDto.setSurplusDate("15");
+ complainDto.setTotal(BigDecimal.valueOf(16L));
+ complainDto.setTotalType((byte) 17);
+ complainDto.setUserAccessory(Arrays.asList("18"));
+ testCollection(list, complainDto);
+ }
+
}