From ac3815ba86494e979d37173011081f22f90892ed Mon Sep 17 00:00:00 2001 From: fangyincheng <fangyincheng@sina.com> Date: Wed, 5 Jun 2019 14:07:04 +0800 Subject: [PATCH] Fix:return error should be Response_OK --- examples/dubbo/go-client/app/client.go | 9 ++++++++- examples/dubbo/go-client/app/user.go | 1 + examples/dubbo/go-server/app/user.go | 4 ++++ examples/dubbo/go-server/profiles/dev/server.yml | 2 +- .../dubbo/go-server/profiles/release/server.yml | 2 +- .../dubbo/go-server/profiles/test/server.yml | 2 +- .../main/java/com/ikurento/user/Consumer.java | 9 +++++++++ .../java/com/ikurento/user/UserProvider.java | 2 ++ .../java/com/ikurento/user/UserProvider.java | 2 ++ .../ikurento/user/UserProviderAnotherImpl.java | 4 +++- .../java/com/ikurento/user/UserProviderImpl.java | 3 +++ examples/jsonrpc/go-client/app/client.go | 3 --- filter/impl/echo_filter.go | 5 +---- go.mod | 2 +- go.sum | 4 ++-- protocol/dubbo/client_test.go | 4 ++-- protocol/dubbo/listener.go | 16 ++++++++-------- .../protocolwrapper/protocol_filter_wrapper.go | 2 +- registry/directory/directory.go | 2 +- registry/protocol/protocol.go | 5 +---- registry/zookeeper/listener.go | 5 ++++- 21 files changed, 56 insertions(+), 32 deletions(-) diff --git a/examples/dubbo/go-client/app/client.go b/examples/dubbo/go-client/app/client.go index c95654267..89559f0b9 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 7e9d3daed..65fc30f17 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 427125bd1..87a4ccbcd 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 6477a6638..7e10dc627 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 728e8802d..b46c3304f 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 728e8802d..b46c3304f 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 b410813c7..0e4a92677 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 d5bce8105..036f46332 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 b75740bbc..bb1d9a9d4 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 f0d7faf3d..9eaf989a8 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 1311bd807..f88756510 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 b71f0efa2..3793468ce 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 22ac6abee..0eb2e0d0f 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 a45f3840b..ec78eaf90 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 3da286534..db094a913 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 216d2e10d..fe18e4de4 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 fc56050c1..9cb4ee69a 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 e7cb227d5..f6583f99e 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 635e2283b..4c6b22db1 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 0c1789ac6..24763c9d5 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 b6446e7fc..13ccd86fa 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" -- GitLab