diff --git a/examples/dubbo/go-client/app/client.go b/examples/dubbo/go-client/app/client.go
index 5231457f7d21cc62b93a630df24584743832b980..c95654267dd6ba2a8400888e0fcb6d299fad0cf8 100644
--- a/examples/dubbo/go-client/app/client.go
+++ b/examples/dubbo/go-client/app/client.go
@@ -83,6 +83,13 @@ func main() {
 	}
 	println("response result: %v", ret)
 
+	println("\n\n\nstart to test dubbo - GetUsers")
+	ret1, err := conMap["com.ikurento.user.UserProvider"].GetRPCService().(*UserProvider).GetUsers([]interface{}{[]interface{}{"A002", "A003"}})
+	if err != nil {
+		panic(err)
+	}
+	println("response result: %v", ret1)
+
 	println("\n\n\nstart to test dubbo - getUser")
 	user = &User{}
 	err = conMap["com.ikurento.user.UserProvider"].GetRPCService().(*UserProvider).GetUser2(context.TODO(), []interface{}{1}, user)
diff --git a/examples/dubbo/go-client/app/user.go b/examples/dubbo/go-client/app/user.go
index 9ac1974d3e7ac2cebfe6c7cadd369a27a7853a62..7e9d3daedf756b79318160995ace0d8222b39b05 100644
--- a/examples/dubbo/go-client/app/user.go
+++ b/examples/dubbo/go-client/app/user.go
@@ -93,6 +93,7 @@ func (User) JavaClassName() string {
 }
 
 type UserProvider struct {
+	GetUsers func(req []interface{}) ([]interface{}, error)
 	GetUser  func(ctx context.Context, req []interface{}, rsp *User) error
 	GetUser0 func(id string, name string) (User, error)
 	GetUser1 func(ctx context.Context, req []interface{}, rsp *User) error
diff --git a/examples/dubbo/go-client/profiles/dev/client.yml b/examples/dubbo/go-client/profiles/dev/client.yml
index 5e58f4cc65d4b17411fb97f24c4b714fb7921ce0..93ce354c9c65682d393619a6afa1ae449b96660d 100644
--- a/examples/dubbo/go-client/profiles/dev/client.yml
+++ b/examples/dubbo/go-client/profiles/dev/client.yml
@@ -62,5 +62,5 @@ protocol_conf:
       tcp_read_timeout: "1s"
       tcp_write_timeout: "5s"
       wait_timeout: "1s"
-      max_msg_len: 1024
+      max_msg_len: 10240
       session_name: "client"
diff --git a/examples/dubbo/go-client/profiles/release/client.yml b/examples/dubbo/go-client/profiles/release/client.yml
index 269e9cbacbe4f1757ab8d9cc0ddeb46241020c5d..cb36b6946c3d5c637e291c47e34a779aaf427553 100644
--- a/examples/dubbo/go-client/profiles/release/client.yml
+++ b/examples/dubbo/go-client/profiles/release/client.yml
@@ -62,5 +62,5 @@ protocol_conf:
       tcp_read_timeout: "1s"
       tcp_write_timeout: "5s"
       wait_timeout: "1s"
-      max_msg_len: 1024
+      max_msg_len: 10240
       session_name: "client"
diff --git a/examples/dubbo/go-client/profiles/test/client.yml b/examples/dubbo/go-client/profiles/test/client.yml
index 269e9cbacbe4f1757ab8d9cc0ddeb46241020c5d..cb36b6946c3d5c637e291c47e34a779aaf427553 100644
--- a/examples/dubbo/go-client/profiles/test/client.yml
+++ b/examples/dubbo/go-client/profiles/test/client.yml
@@ -62,5 +62,5 @@ protocol_conf:
       tcp_read_timeout: "1s"
       tcp_write_timeout: "5s"
       wait_timeout: "1s"
-      max_msg_len: 1024
+      max_msg_len: 10240
       session_name: "client"
diff --git a/examples/dubbo/go-server/app/user.go b/examples/dubbo/go-server/app/user.go
index 12119b0b6d2bf909cc2605fc83ac263e2c97cebf..427125bd1329668c24e9dc46a94d55cfb362a472 100644
--- a/examples/dubbo/go-server/app/user.go
+++ b/examples/dubbo/go-server/app/user.go
@@ -156,6 +156,25 @@ func (u *UserProvider) GetUser0(id string, name string) (User, error) {
 	return *user, err
 }
 
+func (u *UserProvider) GetUsers(req []interface{}) ([]interface{}, error) {
+	var err error
+
+	println("req:%s", req)
+	t := req[0].([]interface{})
+	user, err := u.getUser(t[0].(string))
+	if err != nil {
+		return nil, err
+	}
+	println("user:%v", user)
+	user1, err := u.getUser(t[1].(string))
+	if err != nil {
+		return nil, err
+	}
+	println("user1:%v", user1)
+
+	return []interface{}{user, user1}, err
+}
+
 func (u *UserProvider) Service() string {
 	return "com.ikurento.user.UserProvider"
 }
diff --git a/examples/dubbo/java-client/src/main/java/com/ikurento/user/Consumer.java b/examples/dubbo/java-client/src/main/java/com/ikurento/user/Consumer.java
index 69229943fcda3aae24970fb5ad7f05736696790a..b410813c74a7432cbbe1f2e7627faba9ebb17e70 100644
--- a/examples/dubbo/java-client/src/main/java/com/ikurento/user/Consumer.java
+++ b/examples/dubbo/java-client/src/main/java/com/ikurento/user/Consumer.java
@@ -79,7 +79,7 @@ public class Consumer {
     //鍚姩consumer鐨勫叆鍙e嚱鏁�(鍦ㄩ厤缃枃浠朵腑鎸囧畾)
     public void start() throws Exception {
         testGetUser();
-        // testGetUsers();
+        testGetUsers();
 //        Thread.sleep(120000);
 Thread.sleep(2000);
     }
diff --git a/examples/jsonrpc/go-client/app/client.go b/examples/jsonrpc/go-client/app/client.go
index b693d05eef7d2db57489d4d382fc265e658ab5e6..b71f0efa20243ddf2635c56ee0eca7340db6ce03 100644
--- a/examples/jsonrpc/go-client/app/client.go
+++ b/examples/jsonrpc/go-client/app/client.go
@@ -72,13 +72,20 @@ func main() {
 	}
 	println("response result: %v", user)
 
-	println("\n\n\nstart to test dubbo - GetUser0")
+	println("\n\n\nstart to test jsonrpc - GetUser0")
 	ret, err := conMap["com.ikurento.user.UserProvider"].GetRPCService().(*UserProvider).GetUser0("A003", "Moorse")
 	if err != nil {
 		panic(err)
 	}
 	println("response result: %v", ret)
 
+	println("\n\n\nstart to test jsonrpc - GetUsers")
+	ret1, err := conMap["com.ikurento.user.UserProvider"].GetRPCService().(*UserProvider).GetUsers([]interface{}{[]interface{}{"A002", "A003"}})
+	if err != nil {
+		panic(err)
+	}
+	println("response result: %v", ret1)
+
 	println("\n\n\nstart to test jsonrpc - getUser")
 	user = &JsonRPCUser{}
 	err = conMap["com.ikurento.user.UserProvider"].GetRPCService().(*UserProvider).GetUser2(context.TODO(), []interface{}{1}, user)
diff --git a/examples/jsonrpc/go-client/app/user.go b/examples/jsonrpc/go-client/app/user.go
index 17a24dbec781f28245ebdf899d4f0004ff5e2da5..0d159876125a19bb9c75fbd21d893942763a67c8 100644
--- a/examples/jsonrpc/go-client/app/user.go
+++ b/examples/jsonrpc/go-client/app/user.go
@@ -44,6 +44,7 @@ func (u JsonRPCUser) String() string {
 }
 
 type UserProvider struct {
+	GetUsers func(req []interface{}) ([]JsonRPCUser, error)
 	GetUser  func(ctx context.Context, req []interface{}, rsp *JsonRPCUser) error
 	GetUser0 func(id string, name string) (JsonRPCUser, error)
 	GetUser1 func(ctx context.Context, req []interface{}, rsp *JsonRPCUser) error
diff --git a/examples/jsonrpc/go-server/app/user.go b/examples/jsonrpc/go-server/app/user.go
index 5adcde0ccc7135735314d0e65a98aac75ce08366..9170de431a719351ee1e1af4e5c6bbcd4cbfde62 100644
--- a/examples/jsonrpc/go-server/app/user.go
+++ b/examples/jsonrpc/go-server/app/user.go
@@ -124,6 +124,25 @@ func (u *UserProvider) GetUser0(id string, name string) (User, error) {
 	return *user, err
 }
 
+func (u *UserProvider) GetUsers(req []interface{}) ([]User, error) {
+	var err error
+
+	println("req:%s", req)
+	t := req[0].([]interface{})
+	user, err := u.getUser(t[0].(string))
+	if err != nil {
+		return nil, err
+	}
+	println("user:%v", user)
+	user1, err := u.getUser(t[1].(string))
+	if err != nil {
+		return nil, err
+	}
+	println("user1:%v", user1)
+
+	return []User{*user, *user1}, err
+}
+
 func (u *UserProvider) Service() string {
 	return "com.ikurento.user.UserProvider"
 }
diff --git a/examples/jsonrpc/java-client/src/main/java/com/ikurento/user/Consumer.java b/examples/jsonrpc/java-client/src/main/java/com/ikurento/user/Consumer.java
index 832f78e8553c5c55ea7f7d15566ddee7ac1268de..b2b8e95f94b5112721e12bf738b05bdd3bd9c419 100644
--- a/examples/jsonrpc/java-client/src/main/java/com/ikurento/user/Consumer.java
+++ b/examples/jsonrpc/java-client/src/main/java/com/ikurento/user/Consumer.java
@@ -83,7 +83,7 @@ public class Consumer {
     //鍚姩consumer鐨勫叆鍙e嚱鏁�(鍦ㄩ厤缃枃浠朵腑鎸囧畾)
     public void start() throws Exception {
         testGetUser();
-        // testGetUsers();
+        testGetUsers();
 //        Thread.sleep(120000);
 Thread.sleep(2000);
     }
diff --git a/go.mod b/go.mod
index e41f9906871337b822fd19ce18b91059420f38de..b03fcd5e5850d0b292089d2c7cbe89dcd943bbef 100644
--- a/go.mod
+++ b/go.mod
@@ -2,7 +2,7 @@ module github.com/dubbo/go-for-apache-dubbo
 
 require (
 	github.com/dubbogo/getty v0.0.0-20190523180329-bdf5e640ea53
-	github.com/dubbogo/hessian2 v0.0.0-20190521184416-2dbe10487e1d
+	github.com/dubbogo/hessian2 v0.0.0-20190525165532-d994415a90c3
 	github.com/pkg/errors v0.8.1
 	github.com/samuel/go-zookeeper v0.0.0-20180130194729-c4fab1ac1bec
 	github.com/stretchr/testify v1.3.0
diff --git a/go.sum b/go.sum
index d53a88c491d4d2f8d6d6fe7626d0bb829eb86a6c..e7f6c3037ce0171e7c8f34b1fd4e3099a68c6072 100644
--- a/go.sum
+++ b/go.sum
@@ -6,8 +6,8 @@ github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSs
 github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
 github.com/dubbogo/getty v0.0.0-20190523180329-bdf5e640ea53 h1:bniSNoC4xnAbrx4estwc9F0qkWnh6ZDsAS0y9d7mPos=
 github.com/dubbogo/getty v0.0.0-20190523180329-bdf5e640ea53/go.mod h1:cRMSuoCmwc5lULFFnYZTxyCfZhObmRTNbS7XRnPNHSo=
-github.com/dubbogo/hessian2 v0.0.0-20190521184416-2dbe10487e1d h1:t4xwsC+7Vqh/a9IvNQehzI6coThd7+DLi5MKdleFA64=
-github.com/dubbogo/hessian2 v0.0.0-20190521184416-2dbe10487e1d/go.mod h1:XFGDn4oSZX26zkcfhkM/fCJrOqwQJxk/xgWW1KMJBKM=
+github.com/dubbogo/hessian2 v0.0.0-20190525165532-d994415a90c3 h1:qK0t4cWXFAng5VoPRdvnUyRyB9TdE+Q7G3ROOEY86tE=
+github.com/dubbogo/hessian2 v0.0.0-20190525165532-d994415a90c3/go.mod h1:XFGDn4oSZX26zkcfhkM/fCJrOqwQJxk/xgWW1KMJBKM=
 github.com/golang/snappy v0.0.1 h1:Qgr9rKW7uDUkrbSmQeiDsGa8SjGyCOGtuasMWwvp2P4=
 github.com/golang/snappy v0.0.1/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q=
 github.com/gorilla/websocket v1.4.0 h1:WDFjx/TMzVgy9VdMMQi2K2Emtwi2QcUQsztZ/zLaH/Q=
diff --git a/protocol/dubbo/client_test.go b/protocol/dubbo/client_test.go
index 2938f569d59ae2b85035170183d672fa0854bd39..216d2e10dd2fafb5decb08856ea2258b661004c7 100644
--- a/protocol/dubbo/client_test.go
+++ b/protocol/dubbo/client_test.go
@@ -16,13 +16,13 @@ package dubbo
 
 import (
 	"context"
+	"github.com/dubbogo/hessian2"
 	"sync"
 	"testing"
 	"time"
 )
 
 import (
-	"github.com/dubbogo/hessian2"
 	perrors "github.com/pkg/errors"
 	"github.com/stretchr/testify/assert"
 )
@@ -79,6 +79,26 @@ func TestClient_Call(t *testing.T) {
 	assert.NoError(t, err)
 	assert.Equal(t, User{Id: "1", Name: "username"}, *user)
 
+	user = &User{}
+	err = c.Call("127.0.0.1:20000", url, "GetUser1", []interface{}{"1", "username"}, user)
+	assert.EqualError(t, err, "java exception:error")
+
+	user2 := []interface{}{}
+	err = c.Call("127.0.0.1:20000", url, "GetUser2", []interface{}{"1", "username"}, &user2)
+	assert.NoError(t, err)
+	assert.Equal(t, &User{Id: "1", Name: "username"}, user2[0])
+
+	user2 = []interface{}{}
+	err = c.Call("127.0.0.1:20000", url, "GetUser3", []interface{}{[]interface{}{"1", "username"}}, &user2)
+	assert.NoError(t, err)
+	assert.Equal(t, &User{Id: "1", Name: "username"}, user2[0])
+
+	user3 := map[interface{}]interface{}{}
+	err = c.Call("127.0.0.1:20000", url, "GetUser4", []interface{}{map[interface{}]interface{}{"id": "1", "name": "username"}}, &user3)
+	assert.NoError(t, err)
+	assert.NotNil(t, user3)
+	assert.Equal(t, &User{Id: "1", Name: "username"}, user3["key"])
+
 	// destroy
 	proto.Destroy()
 }
@@ -114,7 +134,7 @@ func InitTest(t *testing.T) (protocol.Protocol, common.URL) {
 
 	methods, err := common.ServiceMap.Register("dubbo", &UserProvider{})
 	assert.NoError(t, err)
-	assert.Equal(t, "GetUser,GetUser0,GetUser1", methods)
+	assert.Equal(t, "GetUser,GetUser0,GetUser1,GetUser2,GetUser3,GetUser4", methods)
 
 	// config
 	SetClientConf(ClientConfig{
@@ -191,6 +211,20 @@ func (u *UserProvider) GetUser1(ctx context.Context, req []interface{}, rsp *Use
 	return perrors.New("error")
 }
 
+func (u *UserProvider) GetUser2(ctx context.Context, req []interface{}, rsp *[]interface{}) error {
+	*rsp = append(*rsp, User{Id: req[0].(string), Name: req[1].(string)})
+	return nil
+}
+
+func (u *UserProvider) GetUser3(ctx context.Context, req []interface{}) ([]interface{}, error) {
+
+	return []interface{}{User{Id: req[0].([]interface{})[0].(string), Name: req[0].([]interface{})[1].(string)}}, nil
+}
+
+func (u *UserProvider) GetUser4(ctx context.Context, req []interface{}) (map[interface{}]interface{}, error) {
+	return map[interface{}]interface{}{"key": User{Id: req[0].(map[interface{}]interface{})["id"].(string), Name: req[0].(map[interface{}]interface{})["name"].(string)}}, nil
+}
+
 func (u *UserProvider) Service() string {
 	return "com.ikurento.user.UserProvider"
 }
diff --git a/protocol/jsonrpc/http_test.go b/protocol/jsonrpc/http_test.go
index e70d5b83fdfa72be519dd61df5e4b358452bb40f..55f86f454e89bc16f409abfa141508207b749279 100644
--- a/protocol/jsonrpc/http_test.go
+++ b/protocol/jsonrpc/http_test.go
@@ -47,7 +47,7 @@ func TestHTTPClient_Call(t *testing.T) {
 
 	methods, err := common.ServiceMap.Register("jsonrpc", &UserProvider{})
 	assert.NoError(t, err)
-	assert.Equal(t, "GetUser,GetUser0,GetUser1", methods)
+	assert.Equal(t, "GetUser,GetUser0,GetUser1,GetUser2,GetUser3", methods)
 
 	// Export
 	proto := GetProtocol()
@@ -75,7 +75,7 @@ func TestHTTPClient_Call(t *testing.T) {
 	assert.Equal(t, "1", reply.Id)
 	assert.Equal(t, "username", reply.Name)
 
-	// call GetUser
+	// call GetUser0
 	ctx = context.WithValue(context.Background(), constant.DUBBOGO_CTX_KEY, map[string]string{
 		"X-Proxy-Id": "dubbogo",
 		"X-Services": url.Path,
@@ -100,6 +100,30 @@ func TestHTTPClient_Call(t *testing.T) {
 	assert.True(t, strings.Contains(err.Error(), "500 Internal Server Error"))
 	assert.True(t, strings.Contains(err.Error(), "\\\"result\\\":{},\\\"error\\\":{\\\"code\\\":-32000,\\\"message\\\":\\\"error\\\"}"))
 
+	// call GetUser2
+	ctx = context.WithValue(context.Background(), constant.DUBBOGO_CTX_KEY, map[string]string{
+		"X-Proxy-Id": "dubbogo",
+		"X-Services": url.Path,
+		"X-Method":   "GetUser",
+	})
+	req = client.NewRequest(url, "GetUser2", []interface{}{"1", "username"})
+	reply1 := []User{}
+	err = client.Call(ctx, url, req, &reply1)
+	assert.NoError(t, err)
+	assert.Equal(t, User{Id: "1", Name: "username"}, reply1[0])
+
+	// call GetUser3
+	ctx = context.WithValue(context.Background(), constant.DUBBOGO_CTX_KEY, map[string]string{
+		"X-Proxy-Id": "dubbogo",
+		"X-Services": url.Path,
+		"X-Method":   "GetUser",
+	})
+	req = client.NewRequest(url, "GetUser3", []interface{}{"1", "username"})
+	reply1 = []User{}
+	err = client.Call(ctx, url, req, &reply1)
+	assert.NoError(t, err)
+	assert.Equal(t, User{Id: "1", Name: "username"}, reply1[0])
+
 	// destroy
 	proto.Destroy()
 
@@ -119,6 +143,15 @@ func (u *UserProvider) GetUser1(ctx context.Context, req []interface{}, rsp *Use
 	return perrors.New("error")
 }
 
+func (u *UserProvider) GetUser2(ctx context.Context, req []interface{}, rsp *[]User) error {
+	*rsp = append(*rsp, User{Id: req[0].(string), Name: req[1].(string)})
+	return nil
+}
+
+func (u *UserProvider) GetUser3(ctx context.Context, req []interface{}) ([]User, error) {
+	return []User{{Id: req[0].(string), Name: req[1].(string)}}, nil
+}
+
 func (u *UserProvider) Service() string {
 	return "com.ikurento.user.UserProvider"
 }
diff --git a/protocol/jsonrpc/jsonrpc_invoker_test.go b/protocol/jsonrpc/jsonrpc_invoker_test.go
index 3bc4a29af755f74e864f9c5159afda85a907f9d9..2d248469e2bb35edb1708901615c444a0d712dd0 100644
--- a/protocol/jsonrpc/jsonrpc_invoker_test.go
+++ b/protocol/jsonrpc/jsonrpc_invoker_test.go
@@ -34,7 +34,7 @@ func TestJsonrpcInvoker_Invoke(t *testing.T) {
 
 	methods, err := common.ServiceMap.Register("jsonrpc", &UserProvider{})
 	assert.NoError(t, err)
-	assert.Equal(t, "GetUser,GetUser0,GetUser1", methods)
+	assert.Equal(t, "GetUser,GetUser0,GetUser1,GetUser2,GetUser3", methods)
 
 	// Export
 	proto := GetProtocol()