Mule ESB SFTP连接器动态输入路径

时间:2015-02-11 17:57:33

标签: mule

我想从mule S FTP INBOUND Connector中的数据库给出输入路径,它将根据数据库路径获取文件。 但我无法解决这个问题; 这可能与否......? 有人可以请你回答吗? 请。

3 个答案:

答案 0 :(得分:2)

在mule中使用民意调查组件。 在poll组件内添加Java组件。 并使Java类实现Callable。

在OnCall方法中创建一个自定义端点,如下所示:

public Object onCall(MuleEventContext eventContext) throws Exception {
EndpointBuilder endpointBuilder = muleEventContext
                .getMuleContext()
                .getEndpointFactory()
                .getEndpointBuilder(
                        protocol+"://" + username + ":"
                                + password+ "@"
                                + host + ":"+port
                                + path );
    InboundEndpoint inboundEndPoint = endpointBuilder
                .buildInboundEndpoint();

现在可以从DB获取这些用户名和密码。 将REST层放在DB之上并公开Webservices以获取数据并使用HTTP客户端获取数据并动态填充用户名,密码,主机和路径。

答案 1 :(得分:0)

您无法使用MEL来定义SFTP将使用的路径。但您可以从属性文件加载路径,如下所示。 HTH。

<sftp:endpoint name="SFTP-Endpoint"
    connector-ref="SFTP" host="${sftp.host}" user="${sftp.user}"
    password="${sftp.jdeBillingReportPassword}" port="${sftp.port}"
    path="${sftp.path}" />

答案 2 :(得分:0)

是的,通过编写一个groovy脚本是可能的。 在groovy脚本中,您可以引用一个flowVar(例如:imageRef),它将具有要检索的文件的路径:

    <scripting:component doc:name="Script"> 
        <scripting:script engine="Groovy">
            <![CDATA[def ftpFileUri = "ftp://${ftp.username}:${ftp.password}@${ftp.host}/${ftp.path}" + message.getInvocationProperty('imageRef') + ".jpg";
            muleContext.client.request(ftpFileUri, 30000L);]]>
        </scripting:script>  
    </scripting:component>

在您的情况下,在此之前您只需要查询数据库并将值存储在flowVar中。

如果文件不存在,你可以在&#34;异常策略中捕获groovy异常&#34;并记录:

<logger message="#[groovy:message.getExceptionPayload().getRootException().getMessage()]" level="ERROR" doc:name="Logger"></logger>