经验分享:使用HttpClient做远程方法调用

     近日完成一个系统,是从一个庞大的母系统中剥离出来的,因此不可避免地要调用母系统的API。我的开发和UT分两步走的,边界部分的代码使用变量devModel隔开(if ...else...)。具体是:

     1、本机开发和UT阶段(devModel=true)。引用母系统的interface.jar,当需要使用母系统的实现类时,在test-src包中实现接口,只编写几个使用到的方法。

     2、集成测试阶段(devModel=false)。因为母系统非常混杂、jar和xml的依赖根本无法准确地分割,而且又没有开发webService,这就使得任何引用母系统jar的企图都变得不可能。在最少引进其他技术和framework、不增加软硬件开销的情况下(例如可以使用spring-mdp+mq),我只得硬着头皮想想能否通过纯JavaAPI的方式作远程调用。于是想到了Apache HttpClient,因为我知道,其实许多的webservice实现都是基于HttpClient的。

      有了想法,立刻动手尝试。

      1) xxx-beanName.properties 配置目标系统中使用到的母系统Spring容器中Service接口的BeanId。

      2)新增一个母系统代理类 XXXServiceInvokerImpl,该类按照母系统Service接口的样式定义需要调用的方法,将beanName、methodName、args作为HttpClient的post参数提交,参数的序列化采用json格式。

        3)往母系增加一个页面yyyCalled.jsp,该页面通过request.getParameter()获取目标系统提交的参数,通过Spring的WebApplicationContext能够轻易地得到Bean上下文,这样就成了本地接口的调用,完成后将结果以Json输出到out中。 

 

      总结:这样一来,我的子系统就摆脱了母系统的种种依赖和本事jar版本升级的烦恼,而且对于母系统的开发者而言,也不用为我作任何工作(写ws),我侵入的代码仅仅是一个jsp和3~4的jar包。

      也许参数和结果的序列化使用json并不是最好的方案,后续再做研究。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值