in protocol/dubbo/impl/hessian.go [200:271]
func unmarshalRequestBody(body []byte, p *DubboPackage) error {
if p.Body == nil {
p.SetBody(make([]any, 7))
}
decoder := hessian.NewDecoder(body)
var (
err error
dubboVersion, target, serviceVersion, method, argsTypes any
args []any
)
req, ok := p.Body.([]any)
if !ok {
return perrors.Errorf("@reqObj is not of type: []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 := hessian.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 attachments == nil || attachments == "" {
attachments = map[any]any{constant.InterfaceKey: target}
}
if v, ok := attachments.(map[any]any); ok {
v[DUBBO_VERSION_KEY] = dubboVersion
req[6] = ToMapStringInterface(v)
buildServerSidePackageBody(p)
return nil
}
return perrors.Errorf("get wrong attachments: %+v", attachments)
}