You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@dubbo.apache.org by al...@apache.org on 2021/06/07 02:42:36 UTC

[dubbo-go] branch 3.0 updated: Fix: URL serialization bug (#1238)

This is an automated email from the ASF dual-hosted git repository.

alexstocks pushed a commit to branch 3.0
in repository https://gitbox.apache.org/repos/asf/dubbo-go.git


The following commit(s) were added to refs/heads/3.0 by this push:
     new 16d8297  Fix: URL serialization bug (#1238)
16d8297 is described below

commit 16d8297b5d06c1a289fcd8a78d817087d3c248d4
Author: XavierNiu <a...@nxw.name>
AuthorDate: Mon Jun 7 10:42:29 2021 +0800

    Fix: URL serialization bug (#1238)
    
    * unittests for DubboCodec
    
    * fix serializing url bug and add error handling
    
    * gofmt
---
 common/url.go                               |  5 ++++
 protocol/dubbo/hessian2/hessian_response.go | 37 ++++++++++++++++++++++-------
 2 files changed, 33 insertions(+), 9 deletions(-)

diff --git a/common/url.go b/common/url.go
index 07bda8e..65d1748 100644
--- a/common/url.go
+++ b/common/url.go
@@ -125,6 +125,11 @@ type URL struct {
 	SubURL *URL
 }
 
+// JavaClassName POJO for URL
+func (c *URL) JavaClassName() string {
+	return "org.apache.dubbo.common.URL"
+}
+
 // Option accepts URL
 // Option will define a function of handling URL
 type Option func(*URL)
diff --git a/protocol/dubbo/hessian2/hessian_response.go b/protocol/dubbo/hessian2/hessian_response.go
index b0070a6..47dc866 100644
--- a/protocol/dubbo/hessian2/hessian_response.go
+++ b/protocol/dubbo/hessian2/hessian_response.go
@@ -111,30 +111,49 @@ func packResponse(header DubboHeader, ret interface{}) ([]byte, error) {
 			}
 
 			if response.Exception != nil { // throw error
-				_ = encoder.Encode(resWithException)
+				err := encoder.Encode(resWithException)
+				if err != nil {
+					return nil, perrors.Errorf("encoding response failed: %v", err)
+				}
 				if t, ok := response.Exception.(java_exception.Throwabler); ok {
-					_ = encoder.Encode(t)
+					err = encoder.Encode(t)
 				} else {
-					_ = encoder.Encode(java_exception.NewThrowable(response.Exception.Error()))
+					err = encoder.Encode(java_exception.NewThrowable(response.Exception.Error()))
+				}
+				if err != nil {
+					return nil, perrors.Errorf("encoding exception failed: %v", err)
 				}
 			} else {
 				if response.RspObj == nil {
-					_ = encoder.Encode(resNullValue)
+					if err := encoder.Encode(resNullValue); err != nil {
+						return nil, perrors.Errorf("encoding null value failed: %v", err)
+					}
 				} else {
-					_ = encoder.Encode(resValue)
-					_ = encoder.Encode(response.RspObj) // result
+					if err := encoder.Encode(resValue); err != nil {
+						return nil, perrors.Errorf("encoding response value failed: %v", err)
+					}
+					if err := encoder.Encode(response.RspObj); err != nil {
+						return nil, perrors.Errorf("encoding response failed: %v", err)
+					}
 				}
 			}
 
+			// attachments
 			if atta {
-				_ = encoder.Encode(response.Attachments) // attachments
+				if err := encoder.Encode(response.Attachments); err != nil {
+					return nil, perrors.Errorf("encoding response attachements failed: %v", err)
+				}
 			}
 		}
 	} else {
+		var err error
 		if response.Exception != nil { // throw error
-			_ = encoder.Encode(response.Exception.Error())
+			err = encoder.Encode(response.Exception.Error())
 		} else {
-			_ = encoder.Encode(response.RspObj)
+			err = encoder.Encode(response.RspObj)
+		}
+		if err != nil {
+			return nil, perrors.Errorf("encoding error failed: %v", err)
 		}
 	}