Merge remote-tracking branch 'origin/3.2.5'
# Conflicts:
# README.md
# pom.xml
diff --git a/.travis.yml b/.travis.yml
index 4d36f7e..1790f51 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -2,14 +2,14 @@
sudo: false # faster builds
jdk:
- - oraclejdk11
+ - openjdk11
- openjdk10
- - oraclejdk9
- - oraclejdk8
- - openjdk7
+ - openjdk9
+ - openjdk8
+ # - openjdk7
script:
- mvn clean package
after_success:
- - bash <(curl -s https://codecov.io/bash)
\ No newline at end of file
+ - bash <(curl -s https://codecov.io/bash)
diff --git a/README.md b/README.md
index 73a370f..fe8a126 100644
--- a/README.md
+++ b/README.md
@@ -1,15 +1,17 @@
-## Hessian Lite(Alibaba embed version)
+## Hessian Lite(Apache Dubbo private version)
-[![Build Status](https://travis-ci.org/dubbo/hessian-lite.svg?branch=master)](https://travis-ci.org/dubbo/hessian-lite)
-[![codecov](https://codecov.io/gh/dubbo/hessian-lite/branch/master/graph/badge.svg)](https://codecov.io/gh/dubbo/hessian-lite)
+[![Build Status](https://travis-ci.org/apache/dubbo-hessian-lite.svg?branch=master)](https://travis-ci.org/apache/dubbo-hessian-lite)
+[![codecov](https://codecov.io/gh/apache/dubbo-hessian-lite/branch/master/graph/badge.svg)](https://codecov.io/gh/apache/dubbo-hessian-lite)
[![Gitter](https://badges.gitter.im/alibaba/dubbo.svg)](https://gitter.im/alibaba/dubbo?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge)
![license](https://img.shields.io/github/license/alibaba/dubbo.svg)
![maven](https://img.shields.io/maven-central/v/com.alibaba/hessian-lite.svg)
-Hessian-lite is a Alibaba dubbo embed version of [official hessian](https://github.com/ebourg/hessian) initially. Then this module is separated from Dubbo. All branches of [Dubbo](https://github.com/apache/incubator-dubbo) : 2.5.x, 2.6.x(since 2.6.3) and 2.7.x are dependent on it , please see the details:
+Hessian-lite is a Alibaba dubbo embed version of [official hessian](https://github.com/ebourg/hessian) initially. Then this module is separated from Dubbo. All branches of [Dubbo](https://github.com/apache/dubbo) : 2.5.x, 2.6.x(since 2.6.3) and 2.7.x are dependent on it , please see the details:
-- [2018-07-13 Delete the code of dubbo/hessian-lite module of the 2.6.x and 2.5.x branches](https://lists.apache.org/thread.html/72f7bbca340e96fb7da6a7ada014312953cfccd19271fad8e60cbf39@%3Cdev.dubbo.apache.org%3E)
-- [2018-06-04 Moving hessian-lite from Dubbo codebase to eco-system](https://lists.apache.org/thread.html/872bbcada2db0f04145f853dd7c7f8abef589807b8089a5016478ec8@%3Cdev.dubbo.apache.org%3E)
+- [2018-07-13 Delete the code of apache/dubbo-hessian-lite module of the 2.6.x and 2.5.x branches](https://lists.apache.org/thread.html/72f7bbca340e96fb7da6a7ada014312953cfccd19271fad8e60cbf39@%3Cdev.dubbo.apache.org%3E)
+- [2018-06-04 Moving hessian-lite from Dubbo codebase to eco-system](https://lists.apache.org/thread.html/872bbcada2db0f04145f853dd7c7f8abef589807b8089a5016478ec8@%3Cdev.dubbo.apache.org%3E)
+
+Now we are trying to build a hessian group https://github.com/hessian-group to make maintainers of Hessian community work more closely together .
## Maven dependency
@@ -17,7 +19,7 @@
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>hessian-lite</artifactId>
- <version>3.2.5</version>
+ <version>3.2.6</version>
<dependency>
```
diff --git a/src/main/java/com/alibaba/com/caucho/hessian/io/AbstractHessianInput.java b/src/main/java/com/alibaba/com/caucho/hessian/io/AbstractHessianInput.java
index 1d63fec..db0e574 100644
--- a/src/main/java/com/alibaba/com/caucho/hessian/io/AbstractHessianInput.java
+++ b/src/main/java/com/alibaba/com/caucho/hessian/io/AbstractHessianInput.java
@@ -100,6 +100,8 @@
public void setSerializerFactory(SerializerFactory ser) {
}
+ public abstract boolean checkAndReadNull();
+
/**
* Reads the call
* <p>
diff --git a/src/main/java/com/alibaba/com/caucho/hessian/io/BasicDeserializer.java b/src/main/java/com/alibaba/com/caucho/hessian/io/BasicDeserializer.java
index 20c593f..dc631e5 100644
--- a/src/main/java/com/alibaba/com/caucho/hessian/io/BasicDeserializer.java
+++ b/src/main/java/com/alibaba/com/caucho/hessian/io/BasicDeserializer.java
@@ -148,6 +148,9 @@
@Override
public Object readObject(AbstractHessianInput in)
throws IOException {
+ if (in.checkAndReadNull()) {
+ return null;
+ }
switch (_code) {
case NULL:
// hessian/3490
diff --git a/src/main/java/com/alibaba/com/caucho/hessian/io/BasicSerializer.java b/src/main/java/com/alibaba/com/caucho/hessian/io/BasicSerializer.java
index 6d5aee9..4b9f359 100644
--- a/src/main/java/com/alibaba/com/caucho/hessian/io/BasicSerializer.java
+++ b/src/main/java/com/alibaba/com/caucho/hessian/io/BasicSerializer.java
@@ -106,6 +106,8 @@
break;
case FLOAT:
+ out.writeDouble(Double.parseDouble(String.valueOf(((Number) obj).floatValue())));
+ break;
case DOUBLE:
out.writeDouble(((Number) obj).doubleValue());
break;
diff --git a/src/main/java/com/alibaba/com/caucho/hessian/io/CollectionDeserializer.java b/src/main/java/com/alibaba/com/caucho/hessian/io/CollectionDeserializer.java
index 1347aa6..fb23606 100644
--- a/src/main/java/com/alibaba/com/caucho/hessian/io/CollectionDeserializer.java
+++ b/src/main/java/com/alibaba/com/caucho/hessian/io/CollectionDeserializer.java
@@ -91,8 +91,10 @@
deserializer = factory.getDeserializer(expectType.getName());
}
- while (!in.isEnd())
+ while (!in.isEnd()) {
list.add(deserializer != null ? deserializer.readObject(in) : in.readObject());
+ }
+
in.readEnd();
@@ -118,8 +120,10 @@
deserializer = factory.getDeserializer(expectType.getName());
}
- for (; length > 0; length--)
+ for (; length > 0; length--) {
list.add(deserializer != null ? deserializer.readObject(in) : in.readObject());
+ }
+
return list;
}
diff --git a/src/main/java/com/alibaba/com/caucho/hessian/io/Hessian2Input.java b/src/main/java/com/alibaba/com/caucho/hessian/io/Hessian2Input.java
index 8d6d7d7..f241d63 100644
--- a/src/main/java/com/alibaba/com/caucho/hessian/io/Hessian2Input.java
+++ b/src/main/java/com/alibaba/com/caucho/hessian/io/Hessian2Input.java
@@ -184,6 +184,19 @@
return _replyFault;
}
+ @Override
+ public boolean checkAndReadNull() {
+ try {
+ int tag = read();
+ if ('N' == tag) {
+ return true;
+ }
+ _offset--;
+ } catch (IOException ignored) {
+ }
+ return false;
+ }
+
/**
* Starts reading the call
* <p>
@@ -833,7 +846,7 @@
case 0xbf:
return tag - BC_INT_ZERO;
- /* byte int */
+ /* byte int */
case 0xc0:
case 0xc1:
case 0xc2:
@@ -852,7 +865,7 @@
case 0xcf:
return ((tag - BC_INT_BYTE_ZERO) << 8) + read();
- /* short int */
+ /* short int */
case 0xd0:
case 0xd1:
case 0xd2:
@@ -898,7 +911,7 @@
case 0xef:
return tag - BC_LONG_ZERO;
- /* byte long */
+ /* byte long */
case 0xf0:
case 0xf1:
case 0xf2:
@@ -917,7 +930,7 @@
case 0xff:
return ((tag - BC_LONG_BYTE_ZERO) << 8) + read();
- /* short long */
+ /* short long */
case 0x38:
case 0x39:
case 0x3a:
@@ -1052,7 +1065,7 @@
case 0xbf:
return tag - BC_INT_ZERO;
- /* byte int */
+ /* byte int */
case 0xc0:
case 0xc1:
case 0xc2:
@@ -1071,7 +1084,7 @@
case 0xcf:
return ((tag - BC_INT_BYTE_ZERO) << 8) + read();
- /* short int */
+ /* short int */
case 0xd0:
case 0xd1:
case 0xd2:
@@ -1123,7 +1136,7 @@
case 0xef:
return tag - BC_LONG_ZERO;
- /* byte long */
+ /* byte long */
case 0xf0:
case 0xf1:
case 0xf2:
@@ -1142,7 +1155,7 @@
case 0xff:
return ((tag - BC_LONG_BYTE_ZERO) << 8) + read();
- /* short long */
+ /* short long */
case 0x38:
case 0x39:
case 0x3a:
@@ -1280,7 +1293,7 @@
case 0xbf:
return tag - 0x90;
- /* byte int */
+ /* byte int */
case 0xc0:
case 0xc1:
case 0xc2:
@@ -1299,7 +1312,7 @@
case 0xcf:
return ((tag - BC_INT_BYTE_ZERO) << 8) + read();
- /* short int */
+ /* short int */
case 0xd0:
case 0xd1:
case 0xd2:
@@ -1342,7 +1355,7 @@
case 0xef:
return tag - BC_LONG_ZERO;
- /* byte long */
+ /* byte long */
case 0xf0:
case 0xf1:
case 0xf2:
@@ -1361,7 +1374,7 @@
case 0xff:
return ((tag - BC_LONG_BYTE_ZERO) << 8) + read();
- /* short long */
+ /* short long */
case 0x38:
case 0x39:
case 0x3a:
@@ -1437,7 +1450,6 @@
_chunkLength = 0;
return -1;
}
-
int tag = read();
switch (tag) {
@@ -1658,7 +1670,7 @@
case 0xbf:
return String.valueOf((tag - 0x90));
- /* byte int */
+ /* byte int */
case 0xc0:
case 0xc1:
case 0xc2:
@@ -1677,7 +1689,7 @@
case 0xcf:
return String.valueOf(((tag - BC_INT_BYTE_ZERO) << 8) + read());
- /* short int */
+ /* short int */
case 0xd0:
case 0xd1:
case 0xd2:
@@ -1721,7 +1733,7 @@
case 0xef:
return String.valueOf(tag - BC_LONG_ZERO);
- /* byte long */
+ /* byte long */
case 0xf0:
case 0xf1:
case 0xf2:
@@ -1740,7 +1752,7 @@
case 0xff:
return String.valueOf(((tag - BC_LONG_BYTE_ZERO) << 8) + read());
- /* short long */
+ /* short long */
case 0x38:
case 0x39:
case 0x3a:
@@ -3354,8 +3366,9 @@
case 'N':
return null;
- case 'B':
- case 'b':
+ case BC_BINARY:
+ case BC_BINARY_CHUNK:
+ case 'b': //maybe it's a mistype of BC_BINARY_CHUNK
_isLastChunk = tag == 'B';
_chunkLength = (read() << 8) + read();
break;
@@ -3379,7 +3392,10 @@
_isLastChunk = true;
_chunkLength = tag - 0x20;
break;
-
+ case 0x34: case 0x35: case 0x36: case 0x37:
+ _isLastChunk = true;
+ _chunkLength = (tag - 0x34) * 256 + read();
+ break;
default:
throw expect("binary", tag);
}
@@ -3402,13 +3418,14 @@
int code = read();
switch (code) {
- case 'b':
+ case BC_BINARY_CHUNK:
+ case 'b': //maybe it's a mistype of BC_BINARY_CHUNK
_isLastChunk = false;
_chunkLength = (read() << 8) + read();
break;
- case 'B':
+ case BC_BINARY:
_isLastChunk = true;
_chunkLength = (read() << 8) + read();
@@ -3433,7 +3450,10 @@
_isLastChunk = true;
_chunkLength = code - 0x20;
break;
-
+ case 0x34: case 0x35: case 0x36: case 0x37:
+ _isLastChunk = true;
+ _chunkLength = (code - 0x34) * 256 + read();
+ break;
default:
throw expect("byte[]", code);
}
diff --git a/src/main/java/com/alibaba/com/caucho/hessian/io/HessianInput.java b/src/main/java/com/alibaba/com/caucho/hessian/io/HessianInput.java
index ffc1732..14b3096 100644
--- a/src/main/java/com/alibaba/com/caucho/hessian/io/HessianInput.java
+++ b/src/main/java/com/alibaba/com/caucho/hessian/io/HessianInput.java
@@ -170,6 +170,11 @@
return _replyFault;
}
+ @Override
+ public boolean checkAndReadNull() {
+ return _peek == 'N';
+ }
+
/**
* Starts reading the call
* <p>
diff --git a/src/main/java/com/alibaba/com/caucho/hessian/io/JavaDeserializer.java b/src/main/java/com/alibaba/com/caucho/hessian/io/JavaDeserializer.java
index 229f685..974d7ba 100644
--- a/src/main/java/com/alibaba/com/caucho/hessian/io/JavaDeserializer.java
+++ b/src/main/java/com/alibaba/com/caucho/hessian/io/JavaDeserializer.java
@@ -59,6 +59,7 @@
import java.util.HashMap;
import java.util.List;
import java.util.Map;
+import java.util.Set;
import java.util.logging.Logger;
/**
@@ -374,7 +375,11 @@
} else if (List.class.equals(type)
&& field.getGenericType() != field.getType()) {
deser = new ObjectListFieldDeserializer(field);
- } else {
+ } else if (Set.class.equals(type)
+ && field.getGenericType() != field.getType()) {
+ deser = new ObjectSetFieldDeserializer(field);
+ }
+ else {
deser = new ObjectFieldDeserializer(field);
}
@@ -531,6 +536,33 @@
}
}
+ static class ObjectSetFieldDeserializer extends FieldDeserializer {
+ private final Field _field;
+
+ ObjectSetFieldDeserializer(Field field) {
+ _field = field;
+ }
+
+ @Override
+ void deserialize(AbstractHessianInput in, Object obj)
+ throws IOException {
+ Object value = null;
+
+ try {
+
+ Type[] types = ((ParameterizedType) _field.getGenericType()).getActualTypeArguments();
+ value = in.readObject(_field.getType(),
+ isPrimitive(types[0]) ? (Class<?>) types[0] : null
+ );
+
+ _field.set(obj, value);
+ } catch (Exception e) {
+ logDeserializeError(_field, obj, value, e);
+ }
+ }
+ }
+
+
static class IntFieldDeserializer extends FieldDeserializer {
private final Field _field;
diff --git a/src/main/java/com/alibaba/com/caucho/hessian/io/SerializerFactory.java b/src/main/java/com/alibaba/com/caucho/hessian/io/SerializerFactory.java
index 8ac5fde..20c4187 100644
--- a/src/main/java/com/alibaba/com/caucho/hessian/io/SerializerFactory.java
+++ b/src/main/java/com/alibaba/com/caucho/hessian/io/SerializerFactory.java
@@ -80,6 +80,7 @@
import java.util.Locale;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
+import java.util.concurrent.atomic.AtomicLong;
import java.util.logging.Level;
import java.util.logging.Logger;
@@ -94,7 +95,7 @@
private static Deserializer OBJECT_DESERIALIZER
= new BasicDeserializer(BasicDeserializer.OBJECT);
-
+ private static ConcurrentHashMap _unrecognizedTypeCache = new ConcurrentHashMap();
private static HashMap _staticSerializerMap;
private static HashMap _staticDeserializerMap;
private static HashMap _staticTypeMap;
@@ -647,7 +648,7 @@
deserializer = new ArrayDeserializer(subDeserializer.getType());
else
deserializer = new ArrayDeserializer(Object.class);
- } else {
+ } else if (_unrecognizedTypeCache.get(type) == null) {
try {
Class cl = Class.forName(type, false, _loader);
deserializer = getDeserializer(cl);
@@ -655,7 +656,12 @@
log.warning("Hessian/Burlap: '" + type + "' is an unknown class in " + _loader + ":\n" + e);
_typeNotFoundDeserializerMap.put(type, PRESENT);
log.log(Level.FINER, e.toString(), e);
+ _unrecognizedTypeCache.put(type, new AtomicLong(1L));
}
+ } else {
+ ((AtomicLong) _unrecognizedTypeCache.get(type)).incrementAndGet();
+ if (((AtomicLong) _unrecognizedTypeCache.get(type)).get() % 2000L == 0L)
+ ((AtomicLong) _unrecognizedTypeCache.get(type)).getAndSet(1L);
}
if (deserializer != null) {
diff --git a/src/test/java/com/alibaba/com/caucho/hessian/io/CollectionSerializerTest.java b/src/test/java/com/alibaba/com/caucho/hessian/io/CollectionSerializerTest.java
index 0b20240..75aa608 100644
--- a/src/test/java/com/alibaba/com/caucho/hessian/io/CollectionSerializerTest.java
+++ b/src/test/java/com/alibaba/com/caucho/hessian/io/CollectionSerializerTest.java
@@ -17,15 +17,18 @@
package com.alibaba.com.caucho.hessian.io;
import com.alibaba.com.caucho.hessian.io.base.SerializeTestBase;
-
-import org.junit.Assert;
-import org.junit.Test;
-
+import com.alibaba.com.caucho.hessian.io.beans.SubUser;
+import java.io.IOException;
+import java.util.Arrays;
import java.util.HashSet;
import java.util.LinkedList;
import java.util.List;
import java.util.Set;
import java.util.Vector;
+import java.util.concurrent.CountDownLatch;
+import java.util.concurrent.atomic.AtomicInteger;
+import org.junit.Assert;
+import org.junit.Test;
public class CollectionSerializerTest extends SerializeTestBase {
@Test
@@ -40,6 +43,46 @@
}
@Test
+ public void testSubUser() throws IOException {
+ int times = 100;
+ final CountDownLatch latch = new CountDownLatch(times);
+ final AtomicInteger error = new AtomicInteger();
+ for (int i = 0; i < times; i++) {
+ new Thread(new Runnable() {
+ @Override
+ public void run() {
+ for (int j = 0; j < 100; j++) {
+ try {
+ SubUser subUser = new SubUser();
+ subUser.setUserId(1);
+ subUser.setUserName("tony");
+ List<Integer> list1 = Arrays.asList(null, 3, 1);
+ List<Double> list2 = Arrays.asList(null, 1.1, 1.2);
+ List<Boolean> list3 = Arrays.asList(false, null, true);
+ subUser.setAgeList(list1);
+ subUser.setWeightList(list2);
+ subUser.setSexyList(list3);
+ SubUser serializeUser = baseHessian2Serialize(subUser);
+ Assert.assertEquals(subUser.getAgeList(), serializeUser.getAgeList());
+ Assert.assertEquals(subUser.getWeightList(), serializeUser.getWeightList());
+ Assert.assertEquals(subUser.getSexyList(), serializeUser.getSexyList());
+ } catch (Throwable e) {
+ error.incrementAndGet();
+ }
+ }
+ latch.countDown();
+ }
+ }).start();
+ }
+ try {
+ latch.await();
+ Assert.assertEquals(0, error.get());
+ } catch (InterruptedException e) {
+ e.printStackTrace();
+ }
+ }
+
+ @Test
public void testListSerializer() throws Exception {
List<Integer> list = new LinkedList<>();
diff --git a/src/test/java/com/alibaba/com/caucho/hessian/io/Hessian2StringShortTest.java b/src/test/java/com/alibaba/com/caucho/hessian/io/Hessian2StringShortTest.java
index 0b92f47..d59ef71 100644
--- a/src/test/java/com/alibaba/com/caucho/hessian/io/Hessian2StringShortTest.java
+++ b/src/test/java/com/alibaba/com/caucho/hessian/io/Hessian2StringShortTest.java
@@ -24,11 +24,7 @@
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
+import java.util.*;
import static junit.framework.TestCase.assertEquals;
import static junit.framework.TestCase.assertTrue;
@@ -207,4 +203,20 @@
assertEquals(Short.valueOf((short)0), deserialize.get(0));
assertEquals(Short.valueOf((short)60), deserialize.get(1));
}
+
+ @Test
+ public void serialize_short_set_then_deserialize() throws Exception {
+
+ Hessian2StringShortType stringShort = new Hessian2StringShortType();
+ Set<Short> shortSet = new HashSet<Short>();
+ shortSet.add((short) 0);
+ shortSet.add((short) 60);
+ stringShort.shortSet = shortSet;
+
+ Hessian2StringShortType deserialize = baseHessian2Serialize(stringShort);
+ assertTrue(deserialize.shortSet != null);
+ assertTrue(deserialize.shortSet.size() == 2);
+ assertTrue(deserialize.shortSet.contains((short) 0));
+ assertTrue(deserialize.shortSet.contains((short) 60));
+ }
}
diff --git a/src/test/java/com/alibaba/com/caucho/hessian/io/HessianJavaSerializeTest.java b/src/test/java/com/alibaba/com/caucho/hessian/io/HessianJavaSerializeTest.java
index 3a50709..5bb08a3 100644
--- a/src/test/java/com/alibaba/com/caucho/hessian/io/HessianJavaSerializeTest.java
+++ b/src/test/java/com/alibaba/com/caucho/hessian/io/HessianJavaSerializeTest.java
@@ -24,10 +24,12 @@
import org.junit.Assert;
import org.junit.Test;
+import java.util.ArrayList;
+import java.util.List;
+
/**
* fix hessian serialize bug:
* the filed of parent class will cover the filed of sub class
- *
*/
public class HessianJavaSerializeTest extends SerializeTestBase {
@@ -54,6 +56,23 @@
}
+
+ @Test
+ public void testSubUserWage() throws Exception {
+ SubUser subUser = new SubUser();
+ subUser.setUserId(1);
+ subUser.setUserName("tom");
+ List<Integer> list = new ArrayList<>();
+ list.add(null);
+ list.add(null);
+ list.add(3);
+ subUser.setAgeList(list);
+
+ SubUser serializedUser = baseHessian2Serialize(subUser);
+ Assert.assertEquals(subUser.getAgeList(), serializedUser.getAgeList());
+
+ }
+
@Test
public void testGetGrandsonUserName() throws Exception {
GrandsonUser grandsonUser = new GrandsonUser();
@@ -64,4 +83,12 @@
Assert.assertEquals("tom", serializedUser.getUserName());
}
+ @Test
+ public void testFloat() throws Exception {
+ Float fData = 99.8F;
+ Double dData = 99.8D;
+ Assert.assertEquals(dData, baseHessianSerialize(fData));
+ Assert.assertEquals(dData, baseHessian2Serialize(fData));
+ }
+
}
diff --git a/src/test/java/com/alibaba/com/caucho/hessian/io/beans/Hessian2StringShortType.java b/src/test/java/com/alibaba/com/caucho/hessian/io/beans/Hessian2StringShortType.java
index 4bc77c9..fd0df68 100644
--- a/src/test/java/com/alibaba/com/caucho/hessian/io/beans/Hessian2StringShortType.java
+++ b/src/test/java/com/alibaba/com/caucho/hessian/io/beans/Hessian2StringShortType.java
@@ -18,12 +18,15 @@
import java.io.Serializable;
import java.util.Map;
+import java.util.Set;
/**
* test short serialize & deserialize model
*/
public class Hessian2StringShortType implements Serializable {
+ public Set<Short> shortSet;
+
public Map<String, Short> stringShortMap;
public Map<String, Byte> stringByteMap;
diff --git a/src/test/java/com/alibaba/com/caucho/hessian/io/beans/SubUser.java b/src/test/java/com/alibaba/com/caucho/hessian/io/beans/SubUser.java
index 3c7214f..7553f48 100644
--- a/src/test/java/com/alibaba/com/caucho/hessian/io/beans/SubUser.java
+++ b/src/test/java/com/alibaba/com/caucho/hessian/io/beans/SubUser.java
@@ -17,19 +17,49 @@
package com.alibaba.com.caucho.hessian.io.beans;
import java.io.Serializable;
+import java.util.List;
/**
+ *
*/
public class SubUser extends BaseUser implements Serializable {
private static final long serialVersionUID = 4017613093053853415L;
private String userName;
+ private List<Integer> ageList;
+ private List<Double> weightList;
+ private List<Boolean> sexyList;
@Override
public String getUserName() {
return userName;
}
+
@Override
public void setUserName(String userName) {
this.userName = userName;
}
+
+ public List<Integer> getAgeList() {
+ return ageList;
+ }
+
+ public void setAgeList(List<Integer> ageList) {
+ this.ageList = ageList;
+ }
+
+ public List<Double> getWeightList() {
+ return weightList;
+ }
+
+ public void setWeightList(List<Double> weightList) {
+ this.weightList = weightList;
+ }
+
+ public List<Boolean> getSexyList() {
+ return sexyList;
+ }
+
+ public void setSexyList(List<Boolean> sexyList) {
+ this.sexyList = sexyList;
+ }
}