本地測試通過的AES加密放到測試環(huán)境時突然出了問題
報的錯誤信息如下:
java.lang.NoSuchMethodError: org.apache.commons.codec.binary.Base64.encodeBase64String([B)Ljava/lang/String;
經過百度:([B)Ljava/lang/String的意思是:
“([Ljava/lang/String;)V” 它是一種對函數(shù)返回值和參數(shù)的編碼歹叮。這種編碼叫做JNI字段描述符(JavaNative Interface FieldDescriptors)匕争。一個數(shù)組int[]芹血,就需要表示為這樣"[I"颅痊。如果多個數(shù)組double[][][]就需要表示為這樣 "[[[D"为黎。也就是說每一個方括號開始,就表示一個數(shù)組維數(shù)顿痪。多個方框后面盈咳,就是數(shù)組 的類型。
如果以一個L開頭的描述符靖秩,就是類描述符须眷,它后緊跟著類的字符串,然后分號“沟突;”結束花颗。
得到的信息是沒有encodeBase64String這個方法,但是通過debug調試事扭,確實有這個方法捎稚。
后來想到會不會是jar包的原因,然后發(fā)現(xiàn)commons-codec-1.2.jar還有一個1.6版本的求橄。在1.2版本的jar包里沒有這個方法今野。刪除低版本jar包問題解決。
總結:本地環(huán)境與測試環(huán)境jar包要保持一致罐农,沒有用maven管理的項目jar包一定要整理清楚条霜。另外在第三方的jar包里也可能重寫該方法,排查參考:
BinaryCodec.class.getProtectionDomain().getCodeSource().getLocation()