问题发现到解决过程:
1.医院现场反映,调用消息平台的短信接口都发不出来。
2.排查日志,发现中转程序调用短信提供商接口报错,程序报错信息如下:
javax.net.ssl.SSLException: java.lang.RuntimeException: Unexpected error: java.security.InvalidAlgorithmParameterException: the trustAnchors parameter must be non-empty
3.分析:没见过这个错误,之前发送都是可以的,现在不行,有一个ssl,难道是https证书什么的改了?立刻在必应搜索这条错误问题。
4.首先查看:https://stackoverflow.com给的410个赞的解答:
This bizarre message means that the truststore you specified was:
empty,
not found, or
couldn't be opened (due to access permissions for example).
5.看不太懂。继续搜索,找到了一个中文的解答:https://blog.csdn.net/qq_33382113/article/details/78643373
6.立刻去看了一下jdk,通过自启动脚本里面设置的JAVA_HOME变量,发现之前使用的openjdk的目录不存在,换成了官方的jdk,应该是被其他人卸载掉,重装了。
7.立刻反应给对接人员,询问是否有人动过服务器,修改了JDK。
8.一边着手解决这个问题,修改了环境变量,重启了中转程序,观察短信接口的调用。发现错误消失,程序调用短信接口,短信提供商接口调用返回预期结果。
9.解决完毕。
分析:
1.根据csdn博客的解决方案,说是ssl支持的相关证书包不存在。猜测是程序按照之前的路径去找ssl调用的证书包,找不到,因此报这个错误。
反思和收获:
1.如果多人在使用服务器跑java程序,不要轻易的去改动java环境,实在需要修改,一定要通知相关人员。尤其是在生产环境上!!!