在创建Java对象时允许给予初始值
diff --git a/README.md b/README.md
index 880ba55..2a95326 100644
--- a/README.md
+++ b/README.md
@@ -34,7 +34,7 @@
 | 整型 | int, long | int |
 | 浮点类型 | float, double | float |
 | 字符串类型 | java.lang.String | str |
-| 列表类型 | _可迭代的对象_ | [] |
+| 列表类型 | Collection & Array | [] |
 | 自定义的对象类型 | java.lang.Object | ↓ _具体使用方法如下所示_ ↓ |
 
 ##### 使用Java的对象类型
@@ -43,8 +43,9 @@
 from dubbo.codec.encoder import Object
 
 # 创建channel对象
-channel = Object('com.qianmi.pc.base.api.constants.ChannelEnum')
-channel['name'] = 'D2C'
+channel = Object('com.qianmi.pc.base.api.constants.ChannelEnum', values={
+    'name': 'D2C'
+})
 
 # 创建spu_query_request对象
 spu_query_request = Object('com.qianmi.pc.item.api.spu.request.SpuQueryRequest')
@@ -72,9 +73,10 @@
 * Python字节相关的转化操作:<https://docs.python.org/2/library/struct.html>
 * Hessian2的编码规则:<http://hessian.caucho.com/doc/hessian-serialization.html>
 * 实现Hessian2编码时的参考:[参考1](https://github.com/WKPlus/pyhessian2/blob/3.1.5/pyhessian2/encoder.py),[参考2](https://github.com/zhouyougit/PyDubbo/blob/master/dubbo/hessian2.py)
+* 对于部分不清楚且通过查阅文档仍无法了解的编码方式,先使用Java的dubbo客户端正常调用接口,之后使用[Wireshark](https://en.wikipedia.org/wiki/Wireshark)抓包获取请求和响应的数据报文,仔细的分析报文来推测编码方式
 * Dubbo相关的编码规则:[参考1](http://fe.58qf.com/2017/11/07/node-dubbo/),[参考2](http://cxis.me/2017/03/19/Dubbo%E4%B8%AD%E7%BC%96%E7%A0%81%E5%92%8C%E8%A7%A3%E7%A0%81%E7%9A%84%E8%A7%A3%E6%9E%90/)
 * Dubbo的心跳机制:<http://www.cnblogs.com/java-zhao/p/8539046.html>
 * 部分实现参考了dubbo的Java源码中的实现
 * 对于所有的字符串,在网络传输前进行编码,编码一律使用unicode来完成,如果一个字符串是str则先将其decode为unicode之后再进行操作;
 * 对于所有的字符串,在网络上获取到的数据之后进行解码,解码得到的字符串是unicode,之后将其encode为str再交给客户程序;
-* 支持传输utf-8编码和Emoji😋
\ No newline at end of file
+* 支持传输utf-8编码和Emoji😋
diff --git a/dubbo/codec/encoder.py b/dubbo/codec/encoder.py
index 1f01b74..144dcbb 100644
--- a/dubbo/codec/encoder.py
+++ b/dubbo/codec/encoder.py
@@ -22,14 +22,17 @@
     创建一个Java对象
     """
 
-    def __init__(self, path):
+    def __init__(self, path, values=None):
         """
-        :param path: Java对象的路径,例如:java.lang.Object
+        :param path:   Java对象的路径,例如:java.lang.Object
+        :param values: 可以在创建对象时就进行赋值
         """
-        if not isinstance(path, str):
+        if not isinstance(path, (str, unicode)):
             raise ValueError('Object path {} should be string type.'.format(path))
         self.__path = path
-        self.__values = {}
+        if not isinstance(values, dict):
+            values = {}
+        self.__values = values
 
     def __getitem__(self, key):
         return self.__values[key]
diff --git a/tests/dubbo_test.py b/tests/dubbo_test.py
index 56bd483..5d1b907 100644
--- a/tests/dubbo_test.py
+++ b/tests/dubbo_test.py
@@ -20,7 +20,7 @@
     def setUp(self):
         init_log()  # 初始化日志配置,调用端需要自己配置日志属性
 
-        zk = ZkRegister('172.21.4.98:2181')
+        zk = ZkRegister('127.0.0.1:2181')
         self.dubbo = DubboClient('me.hourui.echo.provider.Echo', zk_register=zk)
         # self.dubbo = DubboClient('me.hourui.echo.provider.Echo', host='127.0.0.1:20880')
 
diff --git a/tests/run_test.py b/tests/run_test.py
index 9fa2597..62e90cd 100644
--- a/tests/run_test.py
+++ b/tests/run_test.py
@@ -16,18 +16,45 @@
         # self.dubbo = DubboClient('com.qianmi.pc.item.api.spu', host='172.21.36.82:20880')
 
     def test_run(self):
-        channel = Object('com.qianmi.pc.base.api.constants.ChannelEnum')
-        channel['name'] = 'D2C'
+        channel = Object('com.qianmi.pc.base.api.constants.ChannelEnum', values={
+            'name': 'D2C'
+        })
 
         spu_query_request = Object('com.qianmi.pc.item.api.spu.request.SpuQueryRequest')
         spu_query_request['chainMasterId'] = 'A000000'
         spu_query_request['channel'] = channel
-        spu_query_request['pageSize'] = 2000
-
+        spu_query_request['pageSize'] = 20
         result = self.spu_query_provider.call('query', spu_query_request)
-        pretty_print(result)
+        # pretty_print(result)
+        total = result['totalCount']
+        print total
         print len(result['dataList'])
 
+        data_list = result['dataList']
+        for data in data_list:
+            spu_id = data['spuId']
+            spu_desc_request = Object('com.qianmi.pc.item.api.spu.request.SpuDescriptionGetRequest')
+            spu_desc_request['spuId'] = spu_id
+            print spu_id
+            spu_desc_request['chainMasterId'] = 'A000000'
+            pretty_print(self.spu_query_provider.call('getDescription', spu_desc_request))
+
+        for data in data_list:
+            spu_request = Object('com.qianmi.pc.item.api.spu.request.SpuGetRequest')
+            spu_request['chainMasterId'] = 'A000000'
+            spu_request['spuId'] = data['spuId']
+            spu_request['channelEnum'] = channel
+
+            pretty_print(self.spu_query_provider.call('getById', spu_request))
+
+        spu_ids = map(lambda spu: spu['spuId'], data_list)
+        spu_ids_request = Object('com.qianmi.pc.item.api.spu.request.SpuListByIdsRequest')
+        spu_ids_request['chainMasterId'] = 'A000000'
+        spu_ids_request['channelEnum'] = channel
+        spu_ids_request['spuIds'] = spu_ids
+        batch_spu_request = self.spu_query_provider.call('listByIds', spu_ids_request)
+        pretty_print(batch_spu_request)
+
 
 def pretty_print(value):
     print json.dumps(value, ensure_ascii=False, indent=4, sort_keys=True)