diff --git a/examples/dubbo/go-client/app/client.go b/examples/dubbo/go-client/app/client.go
index c95654267dd6ba2a8400888e0fcb6d299fad0cf8..89559f0b93a77aefa95b96a2428d45b6bbc3b2d7 100644
--- a/examples/dubbo/go-client/app/client.go
+++ b/examples/dubbo/go-client/app/client.go
@@ -24,11 +24,11 @@ import (
 )
 
 import (
-	"github.com/dubbo/go-for-apache-dubbo/common/logger"
 	"github.com/dubbogo/hessian2"
 )
 
 import (
+	"github.com/dubbo/go-for-apache-dubbo/common/logger"
 	_ "github.com/dubbo/go-for-apache-dubbo/common/proxy/proxy_factory"
 	"github.com/dubbo/go-for-apache-dubbo/config"
 	_ "github.com/dubbo/go-for-apache-dubbo/protocol/dubbo"
@@ -99,6 +99,13 @@ func main() {
 		println("response result: %v", user)
 	}
 
+	println("\n\n\nstart to test dubbo - getErr")
+	user = &User{}
+	err = conMap["com.ikurento.user.UserProvider"].GetRPCService().(*UserProvider).GetErr(context.TODO(), []interface{}{"A003"}, user)
+	if err != nil {
+		println("getErr - error: %v", err)
+	}
+
 	println("\n\n\nstart to test dubbo illegal method")
 	err = conMap["com.ikurento.user.UserProvider"].GetRPCService().(*UserProvider).GetUser1(context.TODO(), []interface{}{"A003"}, user)
 	if err != nil {
diff --git a/examples/dubbo/go-client/app/user.go b/examples/dubbo/go-client/app/user.go
index 7e9d3daedf756b79318160995ace0d8222b39b05..65fc30f1790100b73e61bb3c00193d62ebc5240e 100644
--- a/examples/dubbo/go-client/app/user.go
+++ b/examples/dubbo/go-client/app/user.go
@@ -94,6 +94,7 @@ func (User) JavaClassName() string {
 
 type UserProvider struct {
 	GetUsers func(req []interface{}) ([]interface{}, error)
+	GetErr   func(ctx context.Context, req []interface{}, rsp *User) 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-server/app/user.go b/examples/dubbo/go-server/app/user.go
index 427125bd1329668c24e9dc46a94d55cfb362a472..87a4ccbcd3375f220bb041ba209df77b66ba66d1 100644
--- a/examples/dubbo/go-server/app/user.go
+++ b/examples/dubbo/go-server/app/user.go
@@ -142,6 +142,10 @@ func (u *UserProvider) GetUser(ctx context.Context, req []interface{}, rsp *User
 	return err
 }
 
+func (u *UserProvider) GetErr(ctx context.Context, req []interface{}, rsp *User) error {
+	return perrors.New("exception")
+}
+
 func (u *UserProvider) GetUser0(id string, name string) (User, error) {
 	var err error
 
diff --git a/examples/dubbo/go-server/profiles/dev/server.yml b/examples/dubbo/go-server/profiles/dev/server.yml
index 6477a6638540e757452c737173088b2af7fe3323..7e10dc627ad218f0b61ce38b326d1c333ae45749 100644
--- a/examples/dubbo/go-server/profiles/dev/server.yml
+++ b/examples/dubbo/go-server/profiles/dev/server.yml
@@ -42,7 +42,7 @@ services:
 
 protocols:
 -   name: "dubbo"
-    ip : "127.0.0.1"
+#    ip : "127.0.0.1"
     port : 20000
 #-   name: "jsonrpc"
 #    ip: "127.0.0.1"
diff --git a/examples/dubbo/go-server/profiles/release/server.yml b/examples/dubbo/go-server/profiles/release/server.yml
index 728e8802dd5d49aef4336597a6810724d0836c16..b46c3304fecb1ef2ae9586bf19c1070beb721e37 100644
--- a/examples/dubbo/go-server/profiles/release/server.yml
+++ b/examples/dubbo/go-server/profiles/release/server.yml
@@ -42,7 +42,7 @@ services:
 
 protocols:
 -   name: "dubbo"
-    ip : "127.0.0.1"
+#    ip : "127.0.0.1"
     port : 20000
 #-   name: "jsonrpc"
 #    ip: "127.0.0.1"
diff --git a/examples/dubbo/go-server/profiles/test/server.yml b/examples/dubbo/go-server/profiles/test/server.yml
index 728e8802dd5d49aef4336597a6810724d0836c16..b46c3304fecb1ef2ae9586bf19c1070beb721e37 100644
--- a/examples/dubbo/go-server/profiles/test/server.yml
+++ b/examples/dubbo/go-server/profiles/test/server.yml
@@ -42,7 +42,7 @@ services:
 
 protocols:
 -   name: "dubbo"
-    ip : "127.0.0.1"
+#    ip : "127.0.0.1"
     port : 20000
 #-   name: "jsonrpc"
 #    ip: "127.0.0.1"
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 b410813c74a7432cbbe1f2e7627faba9ebb17e70..0e4a9267715b27ebc6f1bd5174d579461072f276 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
@@ -51,7 +51,16 @@ public class Consumer {
             System.out.println("[" + new SimpleDateFormat("HH:mm:ss").format(new Date()) + "] " +
                      " UserInfo, Id:" + user2.getId() + ", name:" + user2.getName() + ", sex:" + user2.getSex().toString()
                      + ", age:" + user2.getAge() + ", time:" + user2.getTime().toString());
+
+            User user9 = userProvider.GetUser1("A003");
+        } catch (Exception e) {
+            System.out.println("*************exception***********");
+            e.printStackTrace();
+        }
+        try {
+            userProvider.GetErr("A003");
         } catch (Exception e) {
+            System.out.println("*************exception***********");
             e.printStackTrace();
         }
     }
diff --git a/examples/dubbo/java-client/src/main/java/com/ikurento/user/UserProvider.java b/examples/dubbo/java-client/src/main/java/com/ikurento/user/UserProvider.java
index d5bce8105673a24d78ddd3a636788d1ccf8e57a6..036f46332105710ffcc53465b487ada860c25172 100644
--- a/examples/dubbo/java-client/src/main/java/com/ikurento/user/UserProvider.java
+++ b/examples/dubbo/java-client/src/main/java/com/ikurento/user/UserProvider.java
@@ -20,6 +20,8 @@ import java.util.List;
 
 public interface UserProvider {
 	User GetUser(String userId);
+	User GetErr(String userId) throws Exception;
+	User GetUser1(String userId);
 
 	List<User> GetUsers(List<String> userIdList);
 	User GetUser0(String userId, String name);
diff --git a/examples/dubbo/java-server/src/main/java/com/ikurento/user/UserProvider.java b/examples/dubbo/java-server/src/main/java/com/ikurento/user/UserProvider.java
index b75740bbcd26a6438d22f7d3bf08fa5e316f7aa7..bb1d9a9d42444b1782d919c6a62ac2fc60e509b1 100644
--- a/examples/dubbo/java-server/src/main/java/com/ikurento/user/UserProvider.java
+++ b/examples/dubbo/java-server/src/main/java/com/ikurento/user/UserProvider.java
@@ -14,6 +14,8 @@ public interface UserProvider {
 
     User GetUser0(String userId, String name);
 
+	User GetErr(String userId) throws Exception;
+
     Map<String, User> GetUserMap(List<String> userIdList);
 
     User getUser(int usercode);
diff --git a/examples/dubbo/java-server/src/main/java/com/ikurento/user/UserProviderAnotherImpl.java b/examples/dubbo/java-server/src/main/java/com/ikurento/user/UserProviderAnotherImpl.java
index f0d7faf3df40c3d422407ddf4d2f2c501e1efdf7..9eaf989a8204be5a7b0065b23dfec88eff837854 100644
--- a/examples/dubbo/java-server/src/main/java/com/ikurento/user/UserProviderAnotherImpl.java
+++ b/examples/dubbo/java-server/src/main/java/com/ikurento/user/UserProviderAnotherImpl.java
@@ -35,7 +35,9 @@ public class UserProviderAnotherImpl implements UserProvider {
     public User GetUser0(String userId, String name) {
                 return new User(userId, name, 48);
     }
-
+    public User GetErr(String userId) throws Exception {
+        throw new Exception("exception");
+    }
     public List<User> GetUsers(ArrayList<String> userIdList) {
         Iterator it = userIdList.iterator();
         List<User> userList = new ArrayList<User>();
diff --git a/examples/dubbo/java-server/src/main/java/com/ikurento/user/UserProviderImpl.java b/examples/dubbo/java-server/src/main/java/com/ikurento/user/UserProviderImpl.java
index 1311bd807d59d8336f4ada1296d3a05abd31a548..f8875651096ef719182eb0eeffb779de16425702 100644
--- a/examples/dubbo/java-server/src/main/java/com/ikurento/user/UserProviderImpl.java
+++ b/examples/dubbo/java-server/src/main/java/com/ikurento/user/UserProviderImpl.java
@@ -32,6 +32,9 @@ public class UserProviderImpl implements UserProvider {
     public User GetUser(String userId) {
         return new User(userId, "zhangsan", 18);
     }
+    public User GetErr(String userId) throws Exception {
+        throw new Exception("exception");
+    }
     public User GetUser0(String userId, String name) {
             return new User(userId, name, 18);
     }
diff --git a/examples/jsonrpc/go-client/app/client.go b/examples/jsonrpc/go-client/app/client.go
index b71f0efa20243ddf2635c56ee0eca7340db6ce03..3793468ce64c0f98e7f5125c4e17b318435985fe 100644
--- a/examples/jsonrpc/go-client/app/client.go
+++ b/examples/jsonrpc/go-client/app/client.go
@@ -25,9 +25,6 @@ import (
 
 import (
 	"github.com/dubbo/go-for-apache-dubbo/common/logger"
-)
-
-import (
 	_ "github.com/dubbo/go-for-apache-dubbo/common/proxy/proxy_factory"
 	"github.com/dubbo/go-for-apache-dubbo/config"
 	_ "github.com/dubbo/go-for-apache-dubbo/protocol/jsonrpc"
diff --git a/filter/impl/echo_filter.go b/filter/impl/echo_filter.go
index 22ac6abeef6981c50fcec46ca55a7e6edf47bc08..0eb2e0d0f79cf355d2efc08055f1d9cc683376dd 100644
--- a/filter/impl/echo_filter.go
+++ b/filter/impl/echo_filter.go
@@ -14,13 +14,10 @@
 
 package impl
 
-import (
-	"github.com/dubbo/go-for-apache-dubbo/common/logger"
-)
-
 import (
 	"github.com/dubbo/go-for-apache-dubbo/common/constant"
 	"github.com/dubbo/go-for-apache-dubbo/common/extension"
+	"github.com/dubbo/go-for-apache-dubbo/common/logger"
 	"github.com/dubbo/go-for-apache-dubbo/filter"
 	"github.com/dubbo/go-for-apache-dubbo/protocol"
 )
diff --git a/go.mod b/go.mod
index a45f3840b9b3e57e7b773a02ebef3918b052fd7e..ec78eaf90c88503a0af6a3510e2564d503be9555 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-20190526221400-d5610bbd0a41
+	github.com/dubbogo/hessian2 v0.0.0-20190604191323-5290af08fb56
 	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 3da2865342a319a4351757706f31a313afe850ed..db094a9133b7aa65f0eaeb9274499fbc3141b081 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-20190526221400-d5610bbd0a41 h1:lNtW7+aN8oBdCoEuny0rOqOkL5duI4Cu3+G8vqibX48=
-github.com/dubbogo/hessian2 v0.0.0-20190526221400-d5610bbd0a41/go.mod h1:XFGDn4oSZX26zkcfhkM/fCJrOqwQJxk/xgWW1KMJBKM=
+github.com/dubbogo/hessian2 v0.0.0-20190604191323-5290af08fb56 h1:5ZhIvx1pqtpRSfUzcc6jkF9pFsx/DcwymDuuaM3jFuw=
+github.com/dubbogo/hessian2 v0.0.0-20190604191323-5290af08fb56/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 216d2e10dd2fafb5decb08856ea2258b661004c7..fe18e4de4d40f41cc7bf0ad1eddca0904e781e6c 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"
 )
@@ -81,7 +81,7 @@ func TestClient_Call(t *testing.T) {
 
 	user = &User{}
 	err = c.Call("127.0.0.1:20000", url, "GetUser1", []interface{}{"1", "username"}, user)
-	assert.EqualError(t, err, "java exception:error")
+	assert.EqualError(t, err, "got exception: error")
 
 	user2 := []interface{}{}
 	err = c.Call("127.0.0.1:20000", url, "GetUser2", []interface{}{"1", "username"}, &user2)
diff --git a/protocol/dubbo/listener.go b/protocol/dubbo/listener.go
index fc56050c12a196753aac606dbbc8a801e7e79040..9cb4ee69aed2abfcbbd8d1467a923d8e431f920a 100644
--- a/protocol/dubbo/listener.go
+++ b/protocol/dubbo/listener.go
@@ -212,7 +212,7 @@ func (h *RpcServerHandler) OnMessage(session getty.Session, pkg interface{}) {
 			constant.VERSION_KEY:   p.Service.Version,
 		}))
 		if err := result.Error(); err != nil {
-			p.Header.ResponseStatus = hessian.Response_SERVER_ERROR
+			p.Header.ResponseStatus = hessian.Response_OK
 			p.Body = err
 			h.reply(session, p, hessian.PackageResponse)
 			return
@@ -261,15 +261,15 @@ func (h *RpcServerHandler) callService(req *DubboPackage, ctx context.Context) {
 
 	defer func() {
 		if e := recover(); e != nil {
-			req.Header.ResponseStatus = hessian.Response_BAD_REQUEST
+			req.Header.ResponseStatus = hessian.Response_SERVER_ERROR
 			if err, ok := e.(error); ok {
 				logger.Errorf("callService panic: %#v", err)
-				req.Body = e.(error)
+				req.Body = perrors.WithStack(err)
 			} else if err, ok := e.(string); ok {
 				logger.Errorf("callService panic: %#v", perrors.New(err))
 				req.Body = perrors.New(err)
 			} else {
-				logger.Errorf("callService panic: %#v", e)
+				logger.Errorf("callService panic: %#v, this is impossible.", e)
 				req.Body = e
 			}
 		}
@@ -278,7 +278,7 @@ func (h *RpcServerHandler) callService(req *DubboPackage, ctx context.Context) {
 	svcIf := req.Body.(map[string]interface{})["service"]
 	if svcIf == nil {
 		logger.Errorf("service not found!")
-		req.Header.ResponseStatus = hessian.Response_SERVICE_NOT_FOUND
+		req.Header.ResponseStatus = hessian.Response_BAD_REQUEST
 		req.Body = perrors.New("service not found")
 		return
 	}
@@ -286,7 +286,7 @@ func (h *RpcServerHandler) callService(req *DubboPackage, ctx context.Context) {
 	method := svc.Method()[req.Service.Method]
 	if method == nil {
 		logger.Errorf("method not found!")
-		req.Header.ResponseStatus = hessian.Response_SERVICE_NOT_FOUND
+		req.Header.ResponseStatus = hessian.Response_BAD_REQUEST
 		req.Body = perrors.New("method not found")
 		return
 	}
@@ -323,8 +323,8 @@ func (h *RpcServerHandler) callService(req *DubboPackage, ctx context.Context) {
 		retErr = returnValues[1].Interface()
 	}
 	if retErr != nil {
-		req.Header.ResponseStatus = hessian.Response_SERVER_ERROR
-		req.Body = retErr.(error)
+		req.Header.ResponseStatus = hessian.Response_OK
+		req.Body = perrors.WithStack(retErr.(error))
 	} else {
 		req.Body = replyv.Interface()
 	}
diff --git a/protocol/protocolwrapper/protocol_filter_wrapper.go b/protocol/protocolwrapper/protocol_filter_wrapper.go
index e7cb227d51215b7a0bfc8e56fde86f1a5bf18777..f6583f99ed3f9a0b3ff0f3b1ff46c9c637de39ba 100644
--- a/protocol/protocolwrapper/protocol_filter_wrapper.go
+++ b/protocol/protocolwrapper/protocol_filter_wrapper.go
@@ -15,7 +15,6 @@
 package protocolwrapper
 
 import (
-	"github.com/dubbo/go-for-apache-dubbo/filter"
 	"strings"
 )
 
@@ -23,6 +22,7 @@ import (
 	"github.com/dubbo/go-for-apache-dubbo/common"
 	"github.com/dubbo/go-for-apache-dubbo/common/constant"
 	"github.com/dubbo/go-for-apache-dubbo/common/extension"
+	"github.com/dubbo/go-for-apache-dubbo/filter"
 	"github.com/dubbo/go-for-apache-dubbo/protocol"
 )
 
diff --git a/registry/directory/directory.go b/registry/directory/directory.go
index 635e2283b4b003e22fe3e4a4df743d7d57b06dd1..4c6b22db1cde469b8291e588013be874660a2703 100644
--- a/registry/directory/directory.go
+++ b/registry/directory/directory.go
@@ -20,7 +20,6 @@ import (
 )
 
 import (
-	"github.com/dubbo/go-for-apache-dubbo/common/logger"
 	perrors "github.com/pkg/errors"
 )
 
@@ -29,6 +28,7 @@ import (
 	"github.com/dubbo/go-for-apache-dubbo/common"
 	"github.com/dubbo/go-for-apache-dubbo/common/constant"
 	"github.com/dubbo/go-for-apache-dubbo/common/extension"
+	"github.com/dubbo/go-for-apache-dubbo/common/logger"
 	"github.com/dubbo/go-for-apache-dubbo/protocol"
 	"github.com/dubbo/go-for-apache-dubbo/protocol/protocolwrapper"
 	"github.com/dubbo/go-for-apache-dubbo/registry"
diff --git a/registry/protocol/protocol.go b/registry/protocol/protocol.go
index 0c1789ac6593d33289d66d2d63689f95f534c1e4..24763c9d52fbaf84e5554953348a51ae105aebd6 100644
--- a/registry/protocol/protocol.go
+++ b/registry/protocol/protocol.go
@@ -18,14 +18,11 @@ import (
 	"sync"
 )
 
-import (
-	"github.com/dubbo/go-for-apache-dubbo/common/logger"
-)
-
 import (
 	"github.com/dubbo/go-for-apache-dubbo/common"
 	"github.com/dubbo/go-for-apache-dubbo/common/constant"
 	"github.com/dubbo/go-for-apache-dubbo/common/extension"
+	"github.com/dubbo/go-for-apache-dubbo/common/logger"
 	"github.com/dubbo/go-for-apache-dubbo/protocol"
 	"github.com/dubbo/go-for-apache-dubbo/protocol/protocolwrapper"
 	"github.com/dubbo/go-for-apache-dubbo/registry"
diff --git a/registry/zookeeper/listener.go b/registry/zookeeper/listener.go
index b6446e7fcc3dd46515e9e50ad2cdbc323263078e..13ccd86faf5abce2a0369ae61b66d18ae7190ec7 100644
--- a/registry/zookeeper/listener.go
+++ b/registry/zookeeper/listener.go
@@ -23,11 +23,14 @@ import (
 )
 
 import (
-	"github.com/dubbo/go-for-apache-dubbo/common/logger"
 	perrors "github.com/pkg/errors"
 	"github.com/samuel/go-zookeeper/zk"
 )
 
+import (
+	"github.com/dubbo/go-for-apache-dubbo/common/logger"
+)
+
 import (
 	"github.com/dubbo/go-for-apache-dubbo/common"
 	"github.com/dubbo/go-for-apache-dubbo/registry"