From c3d2c9cab067d499236a5337b071b212ad8bdac2 Mon Sep 17 00:00:00 2001 From: pantianying <601666418@qq.com> Date: Fri, 2 Aug 2019 16:37:28 +0800 Subject: [PATCH] fix bug --- .../general/dubbo/go-client/app/client.go | 2 +- filter/impl/generic_filter.go | 19 ++++++++++++++----- 2 files changed, 15 insertions(+), 6 deletions(-) diff --git a/examples/general/dubbo/go-client/app/client.go b/examples/general/dubbo/go-client/app/client.go index 9b50ca0a3..956ab7466 100644 --- a/examples/general/dubbo/go-client/app/client.go +++ b/examples/general/dubbo/go-client/app/client.go @@ -301,7 +301,7 @@ func test3() { time.Sleep(3 * time.Second) println("\n\n\nstart to generic invoke") - resp, err := referenceConfig.GetRPCService().(*config.GenericService).Invoke([]interface{}{"GetUser", []string{"java.lang.String"}, []hessian.Object{"A003"}}) + resp, err := referenceConfig.GetRPCService().(*config.GenericService).Invoke([]interface{}{"GetUser", []string{"java.lang.String"}, "A003"}) if err != nil { panic(err) } diff --git a/filter/impl/generic_filter.go b/filter/impl/generic_filter.go index e23c34ebc..d369ca0a5 100644 --- a/filter/impl/generic_filter.go +++ b/filter/impl/generic_filter.go @@ -18,6 +18,7 @@ package impl import ( + hessian "github.com/apache/dubbo-go-hessian2" "reflect" "strings" ) @@ -42,10 +43,14 @@ func init() { type GenericFilter struct{} func (ef *GenericFilter) Invoke(invoker protocol.Invoker, invocation protocol.Invocation) protocol.Result { - if invocation.MethodName() == constant.GENERIC { - var newArguments = invocation.Arguments() - for i := range newArguments { - newArguments[i] = struct2MapAll(newArguments[i]) + if invocation.MethodName() == constant.GENERIC && len(invocation.Arguments()) == 3 { + var ( + oldArguments = invocation.Arguments() + ) + newArguments := []interface{}{ + oldArguments[0], + oldArguments[1], + hessian.Object(struct2MapAll(oldArguments[2])), } newInvocation := invocation2.NewRPCInvocation(invocation.MethodName(), newArguments, invocation.Attachments()) return invoker.Invoke(newInvocation) @@ -61,9 +66,13 @@ func GetGenericFilter() filter.Filter { return &GenericFilter{} } func struct2MapAll(obj interface{}) map[string]interface{} { + result := make(map[string]interface{}) + if obj == nil { + return result + } t := reflect.TypeOf(obj) v := reflect.ValueOf(obj) - result := make(map[string]interface{}) + if reflect.TypeOf(obj).Kind() == reflect.Struct { for i := 0; i < t.NumField(); i++ { if v.Field(i).Kind() == reflect.Struct { -- GitLab