“问题:在对接TrustSQL开放测试平台时,遇到问题,对方提供的SDK工具包中报空指针异常,
原因:检查后发现是因为在选择加密曲线“secp256k1”时,没有获取到此曲线传递,一步步DEBUG后发现是由于对方提供的SDK工具包中已有方法:ECNamedCurveTable.getParameterSpec(“secp256k1”)
而项目本身已经带有一个jar包:bcprov-jdk14-136.jar,此jar包中也包含有上述方法,而且方法路径和SDK工具包中一致,在项目运行过程中,项目本身优先调用的是此jar包中的方法,而bcprov-jdk14-136.jar中的ECNamedCurveTable.getParameterSpec(“曲线”)内无法生成,secp256k1的曲线传递,故而返回一个null对象,导致在接下来的调用中,产生了空指针异常。
总结:综上所述,原因就是说简单不简单的jar包冲突
解决:
方法一:项目是maven项目,使用命令:dependency:tree -Dverbose -Dincludes=:bcprov-jdk
找出此bcprov-jdk14-136.jar包的依赖关系,如下所示:
得知此jar包是在org.xhtmlrenderer:core-renderer下依赖进入项目的,故在pom.xml中添加以下配置:
<dependency>
<groupId>org.xhtmlrenderer</groupId>
<artifactId>core-renderer</artifactId>
<version>R8pre2</version>
<exclusions>
<exclusion>
<groupId>com.lowagie</groupId>
<artifactId>itext</artifactId>
</exclusion>
<exclusion>
<groupId>org.bouncycastle</groupId>
<artifactId>bcprov-jdk14</artifactId>
</exclusion>
</exclusions>
</dependency>
即可排除bcprov-jdk14-136.jar,问题解决!
另外注意:貌似使用maven排除jar包需一层一层往下排除,直接排除最底层依赖的jar貌似是不行,具体没有验证,有大神知道么?!
方法二:捷径~项目打包后,直接删除bcprov-jdk14-136.jar即可,此方法不知有没有缺陷,毕竟依赖关系在那摆着!~”