gpt4 book ai didi

mule - 如何使用 mule requester for SFTP - 动态文件名和路径

转载 作者:行者123 更新时间:2023-12-01 00:40:53 25 4
gpt4 key购买 nike

我正在尝试为 SFTP 使用 mule 请求程序组件。如何将文件名作为请求参数的一部分?这是我的流程:

<flow name="Move_Doc_To_Temp_Location" doc:name="Move_Doc_To_Temp_Location">
<jdbc-ee:inbound-endpoint queryKey="Select_Document" queryTimeout="-1" pollingFrequency="30000" connector-ref="LoanApp_Database" doc:name="Select_Doc_To_be_moved"/>
<set-variable variableName="OriginalPayload" value="#[payload]" doc:name="OriginalPayload"/>
<logger message="#[payload['DocID']] - #[payload['Location']]" level="INFO" category="Document to be moved" doc:name="Logger"/>
<!-- <mulerequester:request config-ref="Mule_Requester" resource="file:///#[payload['Location']]" doc:name="Mule Requester"/> -->
<mulerequester:request config-ref="Mule_Requester" resource="sftp://user:Pwd@Hostname#[payload['Location']]" doc:name="Mule Requester"/>
<file:outbound-endpoint path="C:\Users\jvas\Desktop\testfiles" outputPattern="#[header:originalFilename]" responseTimeout="10000" doc:name="File"/>
</flow>

位置值解析为/opt/Documents/test.txt。当我这样指定文件名时,它会抛出一个错误:

ERROR 2014-07-24 05:51:12,358[[loanapp_document_flow].Move_Doc_To_Temp_Location.stage1.02]org.mule.exception.DefaultMessagingExceptionStrategy:******************************************************************************** Message : Failed to receive event over:DefaultInboundEndpoint{endpointUri=sftp://muledev:@nylicvmmuledev/opt/Documents/test.txt,connector=SftpConnector { name=SFTP1 lifecycle=start this=aa033bnumberOfConcurrentTransactedReceivers=4
createMultipleTransactedReceivers=true connected=true
supportedProtocols=[sftp] serviceOverrides= } ,name='endpoint.sftp.nylicvmmuledev.opt.Documents.test.txt',mep=ONE_WAY, properties={},transactionConfig=Transaction{factory=null, action=INDIFFERENT,timeout=0}, deleteUnacceptedMessages=false, initialState=started,responseTimeout=10000, endpointEncoding=UTF-8,disableTransportTransformer=false} (timeout=1000) Code
: MULE_ERROR-92-------------------------------------------------------------------------------- Exception stack is:

  1. Error 'No such file' occurred when trying to CDW to '/opt/Documents/test.txt'. (java.io.IOException)
    org.mule.transport.sftp.SftpClient:102 (null)
  2. Failed to receive event over: DefaultInboundEndpoint{endpointUri=sftp://muledev:@nylicvmmuledev/opt/Documents/test.txt,connector=SftpConnector { name=SFTP1 lifecycle=start this=aa033bnumberOfConcurrentTransactedReceivers=4
    createMultipleTransactedReceivers=true connected=true
    supportedProtocols=[sftp] serviceOverrides= } ,name='endpoint.sftp.nylicvmmuledev.opt.Documents.test.txt',mep=ONE_WAY, properties={},transactionConfig=Transaction{factory=null, action=INDIFFERENT,timeout=0}, deleteUnacceptedMessages=false, initialState=started,responseTimeout=10000, endpointEncoding=UTF-8,disableTransportTransformer=false} (timeout=1000)(org.mule.api.transport.ReceiveException)
    org.mule.transport.AbstractMessageRequester:132(http://www.mulesoft.org/docs/site/current3/apidocs/org/mule/api/transport/ReceiveException.html)-------------------------------------------------------------------------------- Root Exception stack trace: java.io.IOException: Error 'No such file'occurred when trying to CDW to '/opt/Documents/test.txt'. atorg.mule.transport.sftp.SftpClient.changeWorkingDirectory(SftpClient.java:102)atorg.mule.transport.sftp.SftpConnector.createSftpClient(SftpConnector.java:196)atorg.mule.transport.sftp.SftpConnector.createSftpClient(SftpConnector.java:174)
    • 3 more (set debug level logging or '-Dmule.verbose.exceptions=true' for everything)

现在我尝试从该位置删除文件名,SFTP 成功,但它随机选择了一个文件。该文件具有 SFTP 的所有权限,我能够通过命令行成功执行 SFTP。我已经引用了 SFTP URL 的文档,这是它提供的用于从 URL 解析文件名的内容:https://datatracker.ietf.org/doc/html/draft-ietf-secsh-scp-sftp-ssh-uri-04#section-4.1

从主机上的用户主目录中检索 file.txthost.example.com 使用用户名用户使用 SFTP。这个例子假定实现支持路径指示相对于使用前导波浪号的主目录。

    sftp://user@host.example.com/~/file.txt

从主机上的绝对路径/dir/path 中检索 file.txthost.example.com 使用用户名用户使用 SFTP。

    sftp://user@host.example.com/dir/path/file.txt

最佳答案

Mule SFTP 连接器不能在地址中使用文件名。相反,您需要使用文件名过滤器。然而,不幸的是,我认为请求者模块忽略了端点上配置的过滤器,如下所述:http://forum.mulesoft.org/mulesoft/topics/mule_module_requester_add_support_for_filenamefilter

不过,您可以使用脚本通过 sftp 中流读取文件。像这样的东西:

<scripting:transformer>
<scripting:script engine="Groovy">
<scripting:text>
def endpointBuilder = muleContext.endpointFactory.getEndpointBuilder(
"sftp://${sftp.username}@${sftp.host}:${sftp.port}/${sftp.path}?identityFile=${app.home}/${sftp.keyPath}&amp;passphrase=${sftp.passphrase}&amp;connector=sftp-csv")
endpointBuilder.addMessageProcessor(new org.mule.routing.MessageFilter(new org.mule.transport.file.filters.FilenameWildcardFilter(sessionVars.expectedFilename)))
def inboundEndpoint = endpointBuilder.buildInboundEndpoint()
inboundEndpoint.request(30000L)
</scripting:text>
</scripting:script>
</scripting:transformer>

关于mule - 如何使用 mule requester for SFTP - 动态文件名和路径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24930875/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com