the below b4j code is working perfectly connecting to mosquitto broker
according to question in context.
Sub TrustWithCerts(mo As MqttConnectOptions)
' Paths in Files folder
' Dim p12File As String = File.Combine(File.DirAssets, "client.p12")
Dim p12File As String = "C:\Users\Timm\Documents\B4X\jMQTTstrange\MQTTstrange\Files\client.p12"
' Dim caFile As String = File.Combine(File.DirAssets, "ca.crt")
Dim caFile As String = "C:\Users\Timm\Documents\B4X\jMQTTstrange\MQTTstrange\Files\ca.crt"
Dim p12Password As String = "xxxxxxx" ' password used when exporting client.p12
Dim jc As JavaObject
jc.InitializeStatic("java.security.KeyStore")
.
.
.
.
pwdJO.InitializeNewInstance("java.lang.String", Array(p12Password))
Dim pwdCharArray As JavaObject = pwdJO.RunMethod("toCharArray", Null)
' Load client PKCS12 keystore
Dim keyStore As JavaObject = jc.RunMethod("getInstance", Array("PKCS12"))
Dim fis As JavaObject
fis.InitializeNewInstance("java.io.FileInputStream", Array(p12File))
keyStore.RunMethod("load", Array(fis, pwdCharArray))
fis.RunMethod("close", Null)
' Load empty trustStore for CA certs
Dim trustStore As JavaObject = jc.RunMethod("getInstance", Array("JKS"))
trustStore.RunMethod("load", Array(Null, Null))
.
.
.
but when i try to adapt the working b4j code to b4a as seen below, is throwing
underneth error:
Sub TrustWithCerts(mo As MqttConnectOptions)
' Paths in Files folder
' Dim p12File As String = File.Combine(File.DirAssets, "client.p12")
Dim p12File As String = "C:\Users\Timm\Documents\B4X\jMQTTstrange\MQTTstrange\Files\client.p12"
' Dim caFile As String = File.Combine(File.DirAssets, "ca.crt")
Dim caFile As String = "C:\Users\Timm\Documents\B4X\jMQTTstrange\MQTTstrange\Files\ca.crt"
Dim p12Password As String = "xxxxxxx" ' password used when exporting client.p12
Dim jc As JavaObject
jc.InitializeStatic("java.security.KeyStore")
.
.
.
.
pwdJO.InitializeNewInstance("java.lang.String", Array(p12Password))
Dim pwdCharArray As JavaObject = pwdJO.RunMethod("toCharArray", Null)
' Load client PKCS12 keystore
Dim keyStore As JavaObject = jc.RunMethod("getInstance", Array("PKCS12"))
Dim fis As JavaObject
fis.InitializeNewInstance("java.io.FileInputStream", Array(p12File))
keyStore.RunMethod("load", Array(fis, pwdCharArray))
fis.RunMethod("close", Null)
' Load empty trustStore for CA certs
Dim trustStore As JavaObject = jc.RunMethod("getInstance", Array("JKS"))
trustStore.RunMethod("load", Array(Null, Null))
.
.
.
but when i try to adapt the working b4j code to b4a as seen below, is throwing
underneth error:
Sub TrustWithCerts(mo As MqttConnectOptions)
' Use absolute paths in B4A (adjust to your real file paths)
' Dim p12File As String = File.(File.DirAssets, "client.p12") ' <-- Your actual full path here
Dim p12File As String = CopyAssetToInternalStorage("client.p12") 'or "client.jks"
Dim caFile As String = CopyAssetToInternalStorage("ca.crt")
Dim p12Password As String = "1234qwerty"
.
.
.
.
.
' Prepare password char array
Dim jcString As JavaObject
jcString.InitializeStatic("java.lang.String")
Dim pwdJO As JavaObject
pwdJO.InitializeNewInstance("java.lang.String", Array(p12Password))
Dim pwdCharArray As JavaObject = pwdJO.RunMethod("toCharArray", Null)
' Load client PKCS12 keystore
Dim keyStore As JavaObject = jc.RunMethod("getInstance", Array("PKCS12"))
Dim fis As JavaObject
fis.InitializeNewInstance("java.io.FileInputStream", Array(p12File))
keyStore.RunMethod("load", Array(fis, pwdCharArray))
fis.RunMethod("close", Null)
' Load empty trustStore for CA certs
Dim trustStore As JavaObject = jc.RunMethod("getInstance", Array("JKS"))
trustStore.RunMethod("load", Array(Null, Null))
.
.
.
Sub CopyAssetToInternalStorage(FileName As String) As String
Dim target As String = File.Combine(File.DirInternal, FileName)
If File.Exists(File.DirInternal, FileName) = False Then
File.Copy(File.DirAssets, FileName, File.DirInternal, FileName)
End If
Return target ' full path for JavaObject
End Sub
am having this error pointing to this line:
Dim trustStore As JavaObject = jc.RunMethod("getInstance", Array("JKS"))
can somebody help me out.
error:
Error occurred on line: 333 (MQTTManager)
java.lang.reflect.InvocationTargetException
at java.lang.reflect.Method.invoke(Native Method)
at anywheresoftware.b4a.keywords.Common.CallSubDebug2(Common.java:1087)
at com.homeproject.chrikinex.b4xpagesmanager._createpageifneeded(b4xpagesmanager.java:1071)
at com.homeproject.chrikinex.b4xpagesmanager._showpage(b4xpagesmanager.java:428)
at com.homeproject.chrikinex.b4xpagesmanager._addpage(b4xpagesmanager.java:248)
at com.homeproject.chrikinex.b4xpagesmanager._addpageandcreate(b4xpagesmanager.java:262)
at com.homeproject.chrikinex.b4xpagesmanager._initialize(b4xpagesmanager.java:168)
at com.homeproject.chrikinex.main._activity_create(main.java:444)
at java.lang.reflect.Method.invoke(Native Method)
at anywheresoftware.b4a.shell.Shell.runMethod(Shell.java:732)
at anywheresoftware.b4a.shell.Shell.raiseEventImpl(Shell.java:351)
at anywheresoftware.b4a.shell.Shell.raiseEvent(Shell.java:255)
at java.lang.reflect.Method.invoke(Native Method)
at anywheresoftware.b4a.ShellBA.raiseEvent2(ShellBA.java:157)
at com.homeproject.chrikinex.main.afterFirstLayout(main.java:105)
at com.homeproject.chrikinex.main.access$000(main.java:17)
at com.homeproject.chrikinex.main$WaitForLayout.run(main.java:83)
at android.os.Handler.handleCallback(Handler.java:958)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loopOnce(Looper.java:205)
at android.os.Looper.loop(Looper.java:294)
at android.app.ActivityThread.main(ActivityThread.java:8500)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:640)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1026)
Caused by: java.lang.RuntimeException: java.lang.reflect.InvocationTargetException
at anywheresoftware.b4a.debug.Debug.CallSub4(Debug.java:336)
at anywheresoftware.b4a.debug.Debug.CallSubNew2(Debug.java:285)
... 25 more
Caused by: java.lang.reflect.InvocationTargetException
at java.lang.reflect.Method.invoke(Native Method)
at anywheresoftware.b4a.debug.Debug.CallSub4(Debug.java:318)
... 26 more
Caused by: java.lang.reflect.InvocationTargetException
at java.lang.reflect.Method.invoke(Native Method)
at anywheresoftware.b4j.object.JavaObject.RunMethod(JavaObject.java:132)
at com.homeproject.chrikinex.mqttmanager._trustwithcerts(mqttmanager.java:322)
at com.homeproject.chrikinex.mqttmanager._connectnow(mqttmanager.java:240)
at com.homeproject.chrikinex.mqttmanager._initialize(mqttmanager.java:100)
at com.homeproject.chrikinex.b4xmainpage$ResumableSub_B4XPage_Created.resume(b4xmainpage.java:163)
at com.homeproject.chrikinex.b4xmainpage._b4xpage_created(b4xmainpage.java:85)
... 28 more
Caused by: java.security.KeyStoreException: JKS not found
at java.security.KeyStore.getInstance(KeyStore.java:904)
... 35 more
Caused by: java.security.NoSuchAlgorithmException: JKS KeyStore not available
at sun.security.jca.GetInstance.getInstance(GetInstance.java:159)
at java.security.Security.getImpl(Security.java:628)
at java.security.KeyStore.getInstance(KeyStore.java:901)
... 35 more
** Activity (main) Resume **