in protocol/dubbo/hessian2/hessian_request.go [183:254]
func unpackRequestBody(decoder *hessian.Decoder, reqObj any) error {
if decoder == nil {
return perrors.Errorf("@decoder is nil")
}
req, ok := reqObj.([]any)
if !ok {
return perrors.Errorf("@reqObj is not of type: []any")
}
if len(req) < 7 {
return perrors.New("length of @reqObj should be 7")
}
var (
err error
dubboVersion, target, serviceVersion, method, argsTypes any
args []any
)
dubboVersion, err = decoder.Decode()
if err != nil {
return perrors.WithStack(err)
}
req[0] = dubboVersion
target, err = decoder.Decode()
if err != nil {
return perrors.WithStack(err)
}
req[1] = target
serviceVersion, err = decoder.Decode()
if err != nil {
return perrors.WithStack(err)
}
req[2] = serviceVersion
method, err = decoder.Decode()
if err != nil {
return perrors.WithStack(err)
}
req[3] = method
argsTypes, err = decoder.Decode()
if err != nil {
return perrors.WithStack(err)
}
req[4] = argsTypes
ats := DescRegex.FindAllString(argsTypes.(string), -1)
var arg any
for i := 0; i < len(ats); i++ {
arg, err = decoder.Decode()
if err != nil {
return perrors.WithStack(err)
}
args = append(args, arg)
}
req[5] = args
attachments, err := decoder.Decode()
if err != nil {
return perrors.WithStack(err)
}
if v, ok := attachments.(map[any]any); ok {
v[DUBBO_VERSION_KEY] = dubboVersion
req[6] = ToMapStringInterface(v)
return nil
}
return perrors.Errorf("get wrong attachments: %+v", attachments)
}