海康视频监控对接的一个奇葩问题记录

百度已收录,点击一下,找找看!

从最后的解决结果来看,不是问题奇葩,是代码编写的奇葩,哈哈

看问题表象:

调接口,返回一个NPE,是海康的一个SDK中类的sign签名方法报错。

java.lang.RuntimeException: java.lang.NullPointerException
at com.hikvision.artemis.sdk.util.SignUtil.sign(SignUtil.java:68)
at com.hikvision.artemis.sdk.util.HttpUtil.initialBasicHeader(HttpUtil.java:535)
at com.hikvision.artemis.sdk.util.HttpUtil.httpPost(HttpUtil.java:257)
at com.hikvision.artemis.sdk.Client.execute(Client.java:68)
at com.hikvision.artemis.sdk.ArtemisHttpUtil.doPostStringArtemis(ArtemisHttpUtil.java:433)

这个错误找了很久的原因,是因为报错代码行数和反编译的代码不一致,无法精确定位到哪行哪个变量是null,痛苦。

分别从以下几个领域分析并尝试解决:

1.SDK版本问题,切了1.4,切了1.3,sdk版本,都是一样的错误。 — 都切换了错误依旧

2.SDK中依赖的class与现有项目的依赖有重复,且版本较低或者较高。 –都清理了,只保留海康的class,问题依旧。

3.debug-因为环境网络管理特别严格,本地一直无法环境调试,这个是最后本地环境起来之后debug发现的,原因是secretKey配置有误,一直没有拿到secretKey。

找到原因后,直呼SB,这么马虎的问题,一开始就可以避免。

我在nacos中配置了一套对应appkey,secretkey。

但是代码里引用了两套appKey和secretKey,一个是Properties类对应的配置-给调接口的Client端初始化使用,一个是@Value对应的配置-给前端预览使用,两套配置读的不一样,我一直以为是一套。只保证了第二套的配置正常,第一套一直读不到配置。

呜呼,改了一下@Value的配置,保持两套一致。问题解决。

原文链接:,转发请注明来源!

发表回复