You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@servicecomb.apache.org by bismy <bi...@qq.com> on 2018/03/14 02:33:23 UTC

关于java-chassis的Invocation实现缺陷的讨论

目前在分析如下业务场景。
场景1:----------
Provider:定义一个借口
@GetMapping
public demo.Foo doSomething(demo.Bar request)
Consumer: 使用RestTemplate调用接口:
restTempalte.getForObject(url, otherDemo.Foo.class)


java-chassis要求Foo的package名字完全一样。


场景2:-------------
同样是上面的代码。 Spring MVC支持GET的query参数映射到Bar的 属性, java-chassis不支持。


满足这些场景,需要在解析网络层的数据到Invocaton的时候(args参数),需要知道接口定义的元数据信息(比如class类型),而这些在契约里面是不能体现的(因为契约和语言无关)




产生这种情况的本质原因是Invocation的args是语言有关的内容。 


建议:


Invocation的args做修改,尽可能体现一种契约描述的中立的数据结构,这个数据结构可以使用类似HttpServletRequest/HttpServletResponse的结构(越贴近契约越好,但要考虑网络层转换和编码层转换的性能)。这样的话网络层到Invocation可以做极小的转换。 
编码层可以结合代码的元数据和Invocation的的契约元数据将Invocation转换为args。 


由于这个涉及到兼容性问题,针对上面的场景和实现优化, 大家有什么建议?

Re: 关于java-chassis的Invocation实现缺陷的讨论

Posted by Willem Jiang <wi...@gmail.com>.
参数元数据信息可以从方法签名中获取,Invocatioon转换过程中是否可以加入一个尝试转换的逻辑。
也就是调用参数不一致的时候,看看能不能尝试一下自动转换。


Willem Jiang

Blog: http://willemjiang.blogspot.com (English)
          http://jnn.iteye.com  (Chinese)
Twitter: willemjiang
Weibo: 姜宁willem

2018-03-14 10:33 GMT+08:00 bismy <bi...@qq.com>:

> 目前在分析如下业务场景。
> 场景1:----------
> Provider:定义一个借口
> @GetMapping
> public demo.Foo doSomething(demo.Bar request)
> Consumer: 使用RestTemplate调用接口:
> restTempalte.getForObject(url, otherDemo.Foo.class)
>
>
> java-chassis要求Foo的package名字完全一样。
>
>
> 场景2:-------------
> 同样是上面的代码。 Spring MVC支持GET的query参数映射到Bar的 属性, java-chassis不支持。
>
>
> 满足这些场景,需要在解析网络层的数据到Invocaton的时候(args参数),需要知道接口定义的元数据信息(
> 比如class类型),而这些在契约里面是不能体现的(因为契约和语言无关)
>
>
>
>
> 产生这种情况的本质原因是Invocation的args是语言有关的内容。
>
>
> 建议:
>
>
> Invocation的args做修改,尽可能体现一种契约描述的中立的数据结构,这个数据结构可以使用类似HttpServletRequest
> /HttpServletResponse的结构(越贴近契约越好,但要考虑网络层转换和编码层转换的性能)。
> 这样的话网络层到Invocation可以做极小的转换。
> 编码层可以结合代码的元数据和Invocation的的契约元数据将Invocation转换为args。
>
>
> 由于这个涉及到兼容性问题,针对上面的场景和实现优化, 大家有什么建议?