偶遇java.lang.UnsatisfiedLinkError异常

在与第三方接口联调过程中,遇到Java调用DLL动态库实现Hmac签名算法的问题。原本的服务拦截器中有签名校验逻辑,但因API网关的引入,需与网关保持一致。中台组提供了DLL和相关代码,但在本地调试时出现异常。经排查,问题在于Java类的包路径与生成头文件的包路径不一致,调整后问题解决。此问题涉及到Java的JNI机制和DLL的调用规范。
摘要由CSDN通过智能技术生成

前言

最近在和第三方联调接口,接口签名算法需要使用Hmac签名算法,本来服务已经在拦截器中写了一套签名校验逻辑,正在和第三方联调,但是由于中台组计划做个一个通用的API网关,后续所有的外部接口都要经过API网关,为了保证后续迁移的可行性,所以服务本身的签名校验规则需要和API网关保持一致,按照中台组提供的Hmac算法需要依赖dll动态库,中台组提供了dll文件,这边先在本地进行调试。调试过程中出现下面这货

 

解决思路

由于之前没有使用过java调用DLL动态库,所以遇到这个异常也是一头雾水,在网上查了,有类似问题,说DLL文件位置不对或者DLL文件本身有问题。但是中台组提供的调用demo里面的确是可以调用成功的,说明DLL文件本身没有问题。而且断点调试发现加载DLL的地方是没有问题的,由于要在本地调式,我把中台组提供的demo服务中的Hmac类拷贝到自己的服务中来了,当时没有考虑到这个类的包名问题,就按照服务的当前目录结构,把hmac类扔到服务的util包下了,结果就出现上面的异常了。

大家在下图可以看到就是HmacLib类被我直接仍在util目录下面,这个目录是有问题的,需要把HmacLib类放在生成头文件类包路径下,由于这个编译这个DLL文件的人暂时联系不到,我这边就把HmacLib类保持和中台组提供的签名demo中的HmacLib类包名一致就行了。

其实Jni就是我们将Java的class文件编译成c的.h文件,之后根据头文件来编写源文件。所以这个过程中就会有相对应和一致的要求,我想你可能已经猜到了,就是类的包路径要和生成头文件类包路径一致。否则不是找不到方法,就是实例化不了。

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

爱琴孩

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值