'SFTP URI does not come up clean from WSO2 ESB registry

Below here is my inbound endpoint. The purpose is to transfert files between servers. It works fine with hard coded vfs source and target values. It work weird with vfs source and target values stored in registry. Note, the registry lookup works fine.

<?xml version="1.0" encoding="UTF-8"?>
<inboundEndpoint name="Fp_TransfertDataFileInboundEP" onError="FP_TransfertDataFileErrorSeq" protocol="file" sequence="FP_TransfertDataFileProcessSeq" suspend="false" xmlns="http://ws.apache.org/ns/synapse">
    <parameters>
        <parameter name="interval">5000</parameter>
        <parameter name="sequential">true</parameter>
        <parameter name="coordination">true</parameter>
        <parameter name="transport.vfs.ContentType">application/octet-stream</parameter>
        <parameter name="transport.vfs.LockReleaseSameNode">false</parameter>
        <parameter name="transport.vfs.AutoLockRelease">false</parameter>
        <parameter name="transport.vfs.ActionAfterFailure">NONE</parameter>
        <parameter name="transport.vfs.FailedRecordsFileName">vfs-move-failed-records.properties</parameter>
        <parameter name="transport.vfs.FailedRecordsFileDestination">repository/conf/</parameter>
        <parameter name="transport.vfs.MoveFailedRecordTimestampFormat">dd-MM-yyyy HH:mm:ss</parameter>
        <parameter name="transport.vfs.FailedRecordNextRetryDuration">3000</parameter>
        <parameter name="transport.vfs.ActionAfterProcess">MOVE</parameter>
        <parameter key="gov:/vars/SourceSrv" name="transport.vfs.FileURI"/>
        <parameter name="transport.vfs.MoveAfterFailure">file:///home/user/error</parameter>
        <parameter name="transport.vfs.ReplyFileName">response.xml</parameter>
        <parameter name="transport.vfs.DistributedLock">false</parameter>
        <parameter name="transport.vfs.FileNamePattern">.*.csv</parameter>
        <parameter name="transport.vfs.FileProcessInterval">3000</parameter>
        <parameter key="gov:/vars/targetSrv" name="transport.vfs.MoveAfterProcess"/>
        <parameter name="transport.vfs.Locking">disable</parameter>
        <parameter name="transport.vfs.SFTPIdentities">$FILE:pk_path</parameter>
        <parameter name="transport.vfs.SFTPIdentityPassPhrase">keyy</parameter>
        <parameter name="transport.vfs.SFTPUserDirIsRoot">false</parameter>
        <parameter name="transport.vfs.FileSortAttribute">none</parameter>
        <parameter name="transport.vfs.FileSortAscending">true</parameter>
        <parameter name="transport.vfs.CreateFolder">false</parameter>
        <parameter name="transport.vfs.Streaming">true</parameter>
        <parameter name="transport.vfs.Build">false</parameter>
    </parameters>
</inboundEndpoint>

And here are my registry variables :

  1. gov:/vars/sourceSrv holds the value: sftp://wso2@source:22/data/fp/UAT/fromFP?transport.vfs.AvoidPermissionCheck=true
  2. gov:/vars/targetSrv holds the value: sftp://wso2@target:22/fp?transport.vfs.AvoidPermissionCheck=true;vfs.passive=true

The deployment works fine but the runtime is crashing. When a file is coming, I have the following error :

TID: [-1234] [] [2022-02-21 16:18:17,476] ERROR {org.wso2.carbon.inbound.endpoint.protocol.file.FilePollingConsumer} - Repeatedly failed to resolve the file URI: c2Z0cDovL3dzbzJAYXMtZG16Z3cwMToyMi9kYXRhL2ZhaXJwYXJrL1VBVCdmcm9tRlA/dHJhbdnNwb3J0LnZmcy5Bdm9pZFBlcm1pc3Npb25DaGVjaz10cnVl org.apache.commons.vfs2.FileSystemException: Could not find file with URI "c2Z0cDovL3ddzbzJAYXMtZG16dZ3cwMToyMi9kYdXRhL2ZhaXJwYXJrL1VBVC9mcm9tRlA/dHJhbnNwb3J0LnZmcy5Bdm9pZFBlcm1pc3Npb25DaGVjaz10cnVl" because it is a relative path, and no base URI was provided.
        at org.apache.commons.vfs2.impl.DefaultFileSystemManager.resolveFile(DefaultFileSystemManager.java:798)
        at org.apache.commons.vfs2.impl.DefaultFileSystemManager.resolveFile(DefaultFileSystemManager.java:658)
        at org.wso2.carbon.inbound.endpoint.protocol.file.FilePollingConsumer.initFileCheck(FilePollingConsumer.java:638)
        at org.wso2.carbon.inbound.endpoint.protocol.file.FilePollingConsumer.poll(FilePollingConsumer.java:164)
        at org.wso2.carbon.inbound.endpoint.protocol.file.FilePollingConsumer.execute(FilePollingConsumer.java:134)
        at org.wso2.carbon.inbound.endpoint.protocol.file.FileTask.taskExecute(FileTask.java:47)
        at org.wso2.carbon.inbound.endpoint.common.InboundTask.execute(InboundTask.java:45)
        at org.wso2.carbon.mediation.ntask.NTaskAdapter.execute(NTaskAdapter.java:98)
        at org.wso2.carbon.ntask.core.impl.TaskQuartzJobAdapter.execute(TaskQuartzJobAdapter.java:67)
        at org.quartz.core.JobRunShell.run(JobRunShell.java:213)
        at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
        at java.util.concurrent.FutureTask.run(FutureTask.java:266)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
        at java.lang.Thread.run(Thread.java:748)

I don't have the slightest idea of why WSO2 ESB is reading such a string at runtime, leading to a bad URI for the sftp source and target.

Any help will be immensely precious. Thanks

Vincent



Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source