AES加密报NoSuchMethodError
2017-06-28 本文已影响0人
孙二柯
本地测试通过的AES加密放到测试环境时突然出了问题
报的错误信息如下:
java.lang.NoSuchMethodError: org.apache.commons.codec.binary.Base64.encodeBase64String([B)Ljava/lang/String;
经过百度:([B)Ljava/lang/String的意思是:
“([Ljava/lang/String;)V” 它是一种对函数返回值和参数的编码。这种编码叫做JNI字段描述符(JavaNative Interface FieldDescriptors)。一个数组int[],就需要表示为这样"[I"。如果多个数组double[][][]就需要表示为这样 "[[[D"。也就是说每一个方括号开始,就表示一个数组维数。多个方框后面,就是数组 的类型。
如果以一个L开头的描述符,就是类描述符,它后紧跟着类的字符串,然后分号“;”结束。
得到的信息是没有encodeBase64String这个方法,但是通过debug调试,确实有这个方法。
后来想到会不会是jar包的原因,然后发现commons-codec-1.2.jar还有一个1.6版本的。在1.2版本的jar包里没有这个方法。删除低版本jar包问题解决。
总结:本地环境与测试环境jar包要保持一致,没有用maven管理的项目jar包一定要整理清楚。另外在第三方的jar包里也可能重写该方法,排查参考:
BinaryCodec.class.getProtectionDomain().getCodeSource().getLocation()