和其他厂一样阿里也有造轮子的习惯,基于mina搞了个二进制协议TBRemoting,替换冗余低效的wsdl。虽然是大大减少了网络数据传输量提升了性能,但配套设施却没跟上对于开发测试并不友好。对于标准wsdl而言通过soupui就可快速构造请求测试服务端接口是否ok,二进制协议TBRemoting却没有相应的配套工具。与此同时由于存在接口参数定义不规范(如入参Bean中包含getXXX方法却不实际包含XXX这个属性)导致cxf无法正确进行序列化,导致无法通过soupui之类的工具构造请求。工欲善其事,必先利其器,挽起袖子自己干。

新增路由接口作为门面,以json字符串描述目标接口参数

  1. 将目标接口元数据与入参一起打包封装为路由接口入参,路由接口解析参数将请求转发至目标接口处理
    service req–>route service req–>route service –> service

  2. 路由接口设计

route service

  1. 举例说明
目标接口:com.helloworld.Service
目标方法:sayHello(String msg)
目标接口入参:helloworld
目标接口返回类型:String

RouteOrder order = new RouteOrder();
order.setServiceName("com.helloworld.Service");
order.setMethodName("sayHello");

Class[] types = { String.class};
List parameterTypes = new ArrayList();

for (int i = 0; i < types.length; i++) {
    parameterTypes.add(types[i].getName());
}

order.setParameterTypes(parameterTypes);

List parameters = new ArrayList();
parameters.add(JSONObject.toJSONString("helloworld"));
order.setParameters(parameters);

RouteResult routeResult = routeService.route(order);
String result = (String) routeResult.getResult();