Worldpay / worldpay-cse-lib-android

Android Library for Worldpay CSE
Other
5 stars 3 forks source link

Could not invoke Worldpay.encrypt #4

Closed mikaoelitiana closed 6 years ago

mikaoelitiana commented 6 years ago

On Android SDK 19, I have the following issue:

Could not find method org.spongycastle.util.encoders.UrlBase64.encode, referenced from method com.worldpay.cse.jwe.WPJWEObject.base64URLEncode.

Full stack call :

ReactNative: Exception in native call
    java.lang.RuntimeException: Could not invoke Worldpay.encrypt
        at com.facebook.react.bridge.JavaMethodWrapper.invoke(JavaMethodWrapper.java:385)
        at com.facebook.react.bridge.JavaModuleWrapper.invoke(JavaModuleWrapper.java:162)
        at com.facebook.react.bridge.queue.NativeRunnable.run(Native Method)
        at android.os.Handler.handleCallback(Handler.java:733)
        at android.os.Handler.dispatchMessage(Handler.java:95)
        at com.facebook.react.bridge.queue.MessageQueueThreadHandler.dispatchMessage(MessageQueueThreadHandler.java:31)
        at android.os.Looper.loop(Looper.java:136)
        at com.facebook.react.bridge.queue.MessageQueueThreadImpl$3.run(MessageQueueThreadImpl.java:194)
        at java.lang.Thread.run(Thread.java:841)
     Caused by: java.lang.reflect.InvocationTargetException
        at java.lang.reflect.Method.invokeNative(Native Method)
        at java.lang.reflect.Method.invoke(Method.java:515)
        at com.facebook.react.bridge.JavaMethodWrapper.invoke(JavaMethodWrapper.java:374)
        at com.facebook.react.bridge.JavaModuleWrapper.invoke(JavaModuleWrapper.java:162) 
        at com.facebook.react.bridge.queue.NativeRunnable.run(Native Method) 
        at android.os.Handler.handleCallback(Handler.java:733) 
        at android.os.Handler.dispatchMessage(Handler.java:95) 
        at com.facebook.react.bridge.queue.MessageQueueThreadHandler.dispatchMessage(MessageQueueThreadHandler.java:31) 
        at android.os.Looper.loop(Looper.java:136) 
        at com.facebook.react.bridge.queue.MessageQueueThreadImpl$3.run(MessageQueueThreadImpl.java:194) 
        at java.lang.Thread.run(Thread.java:841) 
     Caused by: java.lang.NoClassDefFoundError: org.spongycastle.util.encoders.UrlBase64
        at com.worldpay.cse.jwe.WPJWEObject.base64URLEncode(WPJWEObject.java:84)
        at com.worldpay.cse.jwe.WPJWEObject.encrypt(WPJWEObject.java:61)
        at com.worldpay.cse.WorldpayCSE.performEncryption(WorldpayCSE.java:181)
        at com.worldpay.cse.WorldpayCSE.encrypt(WorldpayCSE.java:148)
        at com.sncf.ouigo.worldpay.WorldpayWrapper.encrypt(WorldpayWrapper.java:43)
mikaoelitiana commented 6 years ago

I found a solution for this. In fact it was a multidex error on Android < 5. I had to manually install dex on app creation in MainApplication.java:

import android.support.multidex.MultiDex;
// ...

@Override
  public void onCreate() {
    super.onCreate();
    MultiDex.install(getBaseContext());
   // ...
  }

// ...