-
Notifications
You must be signed in to change notification settings - Fork 114
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
about Generic$invoke #84
Comments
客户端的生成源码在com.alibaba.dubbo.config.ReferenceConfig 调用ReferenceConfig.get()获取服务端泛化接口,源码有点多就不贴了 |
贴一下使用的java代码吧
|
和 @pantianying 沟通,目前golang hessian2不支持反序列化未定义的pojo数据为map,而java是可以的,需要调研的是java的实现机制是如何? 是不是针对泛化的请求,java server端会用map的方式来序列化返回数据? 如果对java有研究的,请分享一下! |
@wongoo 这个观点是错误的 |
大家好,根据阅读源码和@fangyincheng一起测试,pojo到map的步骤确认是在java的provder实现了,目前goclient端利用如下的interface定义,可以调通java provider端的泛化调用。 因为java服务端只把pojo转成了map,客户端目前还需要区别pojo数组还是单个pojo。这个希望能通过一个interface{} 接受所有的返回。 这个实现需要两位评估。 |
抱歉英文不好,就用中文了。以上是对泛化调用的需求记录;
目标:实现goclient to javaserver 的泛化调用
以下是实现的探讨,我入门java不到一个月,肯定会有不对的地方,欢迎指出,也希望有java老鸟帮忙看看,十分感谢。
所谓泛化调用是指客户端拿不到服务端的具体类的情况(在go的客户端表现为没有写死的providerserver接口和pojo定义),java的dubbo框架已经有了这个功能,这个功能对于dubbo接口网关类服务的实现是必不可少的。
看了源码我自我以为的java的实现:
java provider端有这样一个interface
所有的客户端都调用该接口的$invoke进行访问,将原来的方法、参数、类型都作为请求参数
(我自己测试过,确实能够调通,但由于hessian2的这个问题,没有进入下一步的测试)
如图
客户端在没有注册pojo是如何解析返回的数据的。看了源码,invoke方法会将pojo转换成map返回,map中的所有元素都是基本类型,java客户端直接解析map即可,所以目前来看,如果hessain2能够支持不定深度map、数组的解析,应该就可以支持泛化调用。
The text was updated successfully, but these errors were encountered: