社商项目算是个半政府工程。大项目组本身人力紧张,运营人力才2个。抽调给这个项目的开发前后端加测试不足7个人,运营前期也没有人力投入参与需求的细化评审,加上开发组对公司底层的IT架构不了解,给后面工作带来了很多困难。教训就是不要让业务指导IT,越参活越乱。最终验收前一周还不得不调整架构(因为对方不接受我方公司的传输安全要求),大家忙的焦头烂额。待项目验收后,就这个项目,大组内的沟通机制也需要重新做一次总结。
下面是调试中遇到的一些奇葩问题做个记录:
No X11 DISPLAY variable was set, but this program performed an operation which requires it.
这个异常时对方提供的微信页面上操作时抛出的。这个动作调用关系是:B(政府系统)调用A(我方系统),A返回XML报文给B,B再将报文传给C(地方平台),C返回给到前端页面。
处理过程:B方同事说是我方开发测试,说我方返回的报文有问题,说这个异常是我们返回的。需要我们这边核查。开发测试寻求我这边协助,我们也百度了网上的处理方法,-Djava.awt.headless=true或false;但没有用。
我考虑了下整个调用,问题需要先定位到底发生在哪儿?真的是我方还是对方有问题?所以提议两边抓包分析。当然也是我们先拿证据了。我们先模拟访问,一开始用命令:wget --post-data ‘<XML报文>‘ http://主机outIP/.../../request.do 但查看日志报入参为空。
原程序的报文参数是在request的body中传的,改用命令echo ‘<XML报文>‘|curl -X POST -H ‘Content-type:text/xml‘ -d @- http://主机outIP/.../../request.do 这回日志中有正常的报文返回参数输出。后来网络组同事抓包也证明我们出口专线的数据是正常的。这样问题抛给了B方同事。
B方也配合抓包分析,获取我方的确认是XML报文。这样问题就在B方或调用C方之间了。我们正要缓口气。B方对比了一家已经调通的数据报文和我方的报文,发现我方request报文头部多了set-cookie参数值,其他没有差别了。
新的问题到了,继续查哪儿设置的cookie,但代码里没有设置过。网上百度如何取消,但都是说如何设置。没办法联系基础架构部同事询问,原来可以在F5设备上取消这个cookie参数。
取消这个参数后,访问调用成功!这个问题困扰了我们两天唉,终于解决了。最初的问题具体是什么原因估计只有B方同事重现核查了。