在基于Avaya Dialog Design平台的电话银行系统的开发维护过程中遇到过empty String错误。在本文中给出错原因分析及解决。
Application在Prod Server的日志中发生了empty String Error, 我们要根据AIX6.0系统提供的http_access.log和trace.log的日志来分析问题产生的节点及原因,
并提交解决方案报告,然而由于Application部署在Prod上,Administer为达到更好的系统系能将trace.log日志的级别调整到了Error而不是Info,所以日志提供的信息有限,
只能看到sessionid的信息及错误异常 java.lang.Exception: javax.servlet.ServletException: empty String。通过日志的分析只能定位到flow中,而具体的节点则无法确定。
到Avaya开发论坛搜索到两条相关的信息,得到提示。
https://devconnect.avaya.com/public/forum/d_forum_3.jsp?t=6260&f=6
https://devconnect.avaya.com/public/forum/d_forum_3.jsp?t=3459&f=6
在Team高手的帮组下,定位到了出现问题的可疑节点,而这些节点都有一个共同的特点做比较操作:String type compare to Integer type.,Avaya封装了这类型的比较操作。
通过跟踪Avaya的源码,最终找到了抛出异常的源代码,问题明朗化。
根源出在string type的字段上,其中一个值是" ",它在和整形比较时抛出了empty String异常,我们在测试中重现了这个异常,并发现字段的值是""," a "也会导致这个异常。
我们字段的值是通过substring Mainframe返回的一个长字符串来获得,位置一一固定,所以不会出现字段值为"" 或" a "情况, 可能出现" ".情况即empty String。
解决方法两种:
1.在Mainframe端对empty 字段补字段指定长度的0;
2.在Dialog Design端对empty 字段补字段指定长度的0;(我们采用第二种方法)
在和PM后来的沟通过程中, PM证实客户新开通的某些业务,在DB2上的没立即生效,而此时如果用户提前访问,数据会是empty String;但这种情况很少在业务中发生。
Author:David
Mail:xiang.okay@gmail.com