问题一:
五位一体项目接入海关H4A Java sdk,sdk文档上的日期是15年份的,接入时抛了一个异常:
java.lang.StringIndexOutOfBoundsException: String index out of range: -1
这个异常是第一层调用的方法抛出来的,排查问题困难,随后修改抛出异常的限制,最后可以看到具体抛出的异常是底层的那个方法,
private static final String LIB_PATH = File.separator + "lib";
public static void main(String[] args) {
String configPath = T.class.getProtectionDomain().getCodeSource().getLocation().getPath();
if(configPath.endsWith(".jar")){
configPath = configPath.substring(0, configPath.lastIndexOf(LIB_PATH));
System.out.println(configPath);
}
}
代码片段大概意思是获取当前类路径,判断是否包含字符串.jar 如果包含获取当前字符串路径最后一个/lib坐标,
(在传统的web项目里面有webRoot目录,lib目录,一切正常,但是在maven项目中,本地开发时jar包是在maven仓库冲,此时使用lastIndexOf("/lib")返回结果为-1,
紧接着substring(0,1),故抛出异常)。正确做法是在资源目录下新建lib文件夹,把H4A JAVA sdk jar包放入其中
问题二:
接入航信的收费选作接口Java sdk时本地正常,但是在生产环境时异常,描速如下:
try语句块没有执行完,但是也没有进入catch(exception e)语句块里,后来问了同事他也遇到过这个问题,初步解决方案
将catch(exception e) 改为catch(Throwable e) 这样try语句遇到的异常在catch里面打印出来为:java.lang.NoSuchMethodException
异常信息描述没有找到方法,后来发现2个jar包有同一个类,随后进行jar排序先后执行顺序