[ https://issues.apache.org/jira/browse/CAMEL-22472?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=18023798#comment-18023798 ]
Claus Ibsen commented on CAMEL-22472: ------------------------------------- Its the same, the fluent builder end up creating uris > camel-sftp - private key and known hosts can't be specified via String > argument > ------------------------------------------------------------------------------- > > Key: CAMEL-22472 > URL: https://issues.apache.org/jira/browse/CAMEL-22472 > Project: Camel > Issue Type: Bug > Components: camel-sftp > Affects Versions: 4.14.0 > Reporter: Jannik Schmeier > Priority: Minor > > After upgrading camel to 4.14.0 from 4.12.0 I have noticed that my camel sftp > routes are having issues. > I am using endpoint builder kind of like this: > {code:java} > SftpEndpointConsumerBuilder builder = sftp(uri) > .privateKey("my+private+key") > .privateKeyPassphrase("my private key passphrase") > .knownHosts("<host,ip> <type> ABC+123/ABC"); {code} > > 1. known hosts specified as String are causing Base64 exceptions: > {noformat} > org.apache.camel.component.file.GenericFileOperationFailedException: Cannot > connect to sftp://<user>@<host>:<port> > at > org.apache.camel.component.file.remote.SftpOperations.connect(SftpOperations.java:143) > at > org.apache.camel.component.file.remote.RemoteFileConsumer.connectIfNecessary(RemoteFileConsumer.java:249) > at > org.apache.camel.component.file.remote.SftpConsumer.doStart(SftpConsumer.java:71) > at > org.apache.camel.support.service.BaseService.start(BaseService.java:123) > at > org.apache.camel.support.service.ServiceHelper.startService(ServiceHelper.java:127) > at > org.apache.camel.impl.engine.AbstractCamelContext.startService(AbstractCamelContext.java:3457) > at > org.apache.camel.impl.engine.InternalRouteStartupManager.doStartOrResumeRouteConsumers(InternalRouteStartupManager.java:430) > at > org.apache.camel.impl.engine.InternalRouteStartupManager.doStartRouteConsumers(InternalRouteStartupManager.java:346) > at > org.apache.camel.impl.engine.InternalRouteStartupManager.safelyStartRouteServices(InternalRouteStartupManager.java:222) > at > org.apache.camel.impl.engine.InternalRouteStartupManager.safelyStartRouteServices(InternalRouteStartupManager.java:255) > at > org.apache.camel.impl.engine.AbstractCamelContext.startRouteService(AbstractCamelContext.java:3506) > at > org.apache.camel.impl.engine.AbstractCamelContext.startRoute(AbstractCamelContext.java:1181) > at > org.apache.camel.impl.engine.AbstractCamelContext.startRoute(AbstractCamelContext.java:1170) > at > org.apache.camel.impl.engine.InternalRouteController.startRoute(InternalRouteController.java:126) > at > org.apache.camel.impl.engine.DefaultRouteController.startRoute(DefaultRouteController.java:133) > ... > Caused by: com.jcraft.jsch.JSchException: fromBase64: invalid base64 data > at com.jcraft.jsch.Util.fromBase64(Util.java:77) > at com.jcraft.jsch.KnownHosts.setKnownHosts(KnownHosts.java:257) > at com.jcraft.jsch.JSch.setKnownHosts(JSch.java:422) > at > org.apache.camel.component.file.remote.SftpOperations.createSession(SftpOperations.java:311) > at > org.apache.camel.component.file.remote.SftpOperations.tryConnect(SftpOperations.java:165) > at > org.apache.camel.support.task.BlockingTask.lambda$run$0(BlockingTask.java:45) > at > org.apache.camel.support.task.ForegroundTask.doRun(ForegroundTask.java:143) > at > org.apache.camel.support.task.ForegroundTask.run(ForegroundTask.java:108) > at org.apache.camel.support.task.BlockingTask.run(BlockingTask.java:45) > at > org.apache.camel.component.file.remote.SftpOperations.connect(SftpOperations.java:141) > ... 33 common frames omitted > Caused by: java.lang.ArrayIndexOutOfBoundsException: Index 26 out of bounds > for length 26 > at com.jcraft.jsch.Util.fromBase64(Util.java:61) > ... 42 common frames omitted{noformat} > If I convert my known hosts string into a byte array and pass that into the > builder it works. > > 2. Private key specified as string causes OOM > {noformat} > java.lang.OutOfMemoryError: Java heap space > at com.jcraft.jsch.KeyPairRSA.parse(KeyPairRSA.java:350) > at com.jcraft.jsch.KeyPair.decrypt(KeyPair.java:943) > at com.jcraft.jsch.IdentityFile.setPassphrase(IdentityFile.java:59) > at com.jcraft.jsch.JSch.addIdentity(JSch.java:528) > at com.jcraft.jsch.JSch.addIdentity(JSch.java:511) > at > org.apache.camel.component.file.remote.SftpOperations.createSession(SftpOperations.java:257) > at > org.apache.camel.component.file.remote.SftpOperations.tryConnect(SftpOperations.java:165) > at > org.apache.camel.component.file.remote.SftpOperations$$Lambda/0x00007f2480edb398.test(Unknown > Source) > at > org.apache.camel.support.task.BlockingTask.lambda$run$0(BlockingTask.java:45) > at > org.apache.camel.support.task.BlockingTask$$Lambda/0x00007f2480edb5f0.getAsBoolean(Unknown > Source) > at > org.apache.camel.support.task.ForegroundTask.doRun(ForegroundTask.java:143) > at > org.apache.camel.support.task.ForegroundTask.run(ForegroundTask.java:108) > at > org.apache.camel.support.task.BlockingTask.run(BlockingTask.java:45) > at > org.apache.camel.component.file.remote.SftpOperations.connect(SftpOperations.java:141) > at > org.apache.camel.component.file.remote.RemoteFileConsumer.connectIfNecessary(RemoteFileConsumer.java:249) > at > org.apache.camel.component.file.remote.RemoteFileConsumer.prePollCheck(RemoteFileConsumer.java:79) > at > org.apache.camel.component.file.GenericFileConsumer.poll(GenericFileConsumer.java:134) > at > org.apache.camel.component.file.GenericFileConsumer.poll(GenericFileConsumer.java:113) > at > org.apache.camel.support.ScheduledPollConsumer.doRun(ScheduledPollConsumer.java:208) > at > org.apache.camel.support.ScheduledPollConsumer.run(ScheduledPollConsumer.java:119) > at > java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:572) > at > java.base/java.util.concurrent.FutureTask.runAndReset(FutureTask.java:358) > at > java.base/java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:305) > at > java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1144) > at > java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:642) > at > org.apache.camel.impl.engine.MDCThreadFactoryListener.lambda$newThreadFactory$0(MDCThreadFactoryListener.java:53) > at > org.apache.camel.impl.engine.MDCThreadFactoryListener$$Lambda/0x00007f2480ee68c0.run(Unknown > Source) > at java.base/java.lang.Thread.runWith(Thread.java:1596) > at java.base/java.lang.Thread.run(Thread.java:1583){noformat} > Again, If I convert my private key string into a byte array and pass that > into the builder it works. > > I have debugged a bit and it seems like camel is removing the '+' characters > from the base64 data in the private key and in the known hosts before passing > them into JSch, causing these errors. Probably caused by some URI handling > internally? > If I use the byte array it keeps them. -- This message was sent by Atlassian Jira (v8.20.10#820010)