1. 前言
一直都听说 Mule 对 Ftp 和 Http 协议的支持很好,于是就关注了一下。
Mule 通过一系列的配置文件的配置就可以完成对 Ftp 服务器的下载和上传 ,这个还是很神奇的。
但是可惜的是, Mule 本身并不支持 FtpS 协议,只支持 SFTP ,这样对于工业级的使用上,未免有点不方便 。
2. Mule 3.x 的基本知识
Mule 是一个开源的 ESB 软件,基本概念如下:
http://tech.ddvip.com/2010-05/1274838569154227.html |
Mule 3.X 中对 Ftp 的支持是通过 < ftp:connector> 等标签实现的,具体的官方信息如下:
http://www.mulesoft.org/documentation/display/MULE3USER/FTP+Transport |
下载实现
mule-download-config.xml
1. <?xml version="1.0" encoding="UTF-8"?>
2. <mule xmlns="http://www.mulesoft.org/schema/mule/core"
3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
4. xmlns:spring="http://www.springframework.org/schema/beans"
5. xmlns:ftp="http://www.mulesoft.org/schema/mule/ftp"
6. xmlns:file="http://www.mulesoft.org/schema/mule/file"
7. xsi:schemaLocation="
8. http://www.mulesoft.org/schema/mule/file http://www.mulesoft.org/schema/mule/file/current/mule-file.xsd
9. http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-current.xsd
10. http://www.mulesoft.org/schema/mule/core http://www.mulesoft.org/schema/mule/core/current/mule.xsd
11. http://www.mulesoft.org/schema/mule/ftp http://www.mulesoft.org/schema/mule/ftp/current/mule-ftp.xsd">
12. <!--
13. 连接 FTP 服务器的连接器
14. 从 ftp 服务器上下载文件的方法
15. -->
16.
17. <ftp:connector name = "ftpConnector" binary = "true"
18.
19. validateConnections = "true" />
20.
21. <model name = "ftp-model" >
22. <service name = "ftp-reader" >
23. <!--
24. 连接 FTP 服务器的入口节点,在这里配置 ftp 的 ip ,账户和密码
25. 利用 file:filename-wildcard -filter 确认只下载 txt 文件
26. -->
27. <inbound >
28. <ftp:inbound-endpoint user = "root" binary = "true" path = "/home/test"
29. password = "123456" host = "10.100.102.8" port = "21"
30. pollingFrequency = "10000" connector-ref = "ftpConnector"
31. >
32. <file:filename-wildcard-filter
33. pattern = "*.txt" />
34. </ftp:inbound-endpoint >
35. </inbound >
36. <!--
37. 连接 FTP 服务器的出口节点,在这里配置地址,将文件下载到 e:/download 目录下
38. 同时利用 outputPattern ,定义下载的文件和源文件同名同类型
39. -->
40. <outbound >
41. <pass-through-router >
42. <file:outbound-endpoint path = "/e:/download" outputPattern = "[header:originalFilename]" />
43. </pass-through-router >
44. </outbound >
45. </service >
46. </model >
47. </mule >
48.
49.
下载测试:
1. import org.mule.api.MuleContext;
2. import org.mule.api.MuleException;
3. import org.mule.api.context.MuleContextFactory;
4. import org.mule.config.spring.SpringXmlConfigurationBuilder;
5. import org.mule.context.DefaultMuleContextFactory;
6.
7. /**
8. * <p>功能描述,该部分必须以中文句号结尾。<p>
9. *
10. * 创建日期 2013-8-16<br>
11. * @author $Author$<br>
12. * @version $Revision$ $Date$
13. * @since 3.0.0
14. */
15. public class MuleFtpDownloadMain {
16. public static void main(String[] args) {
17. try {
18. String configFile = "mule-download-config.xml";
19. String[] configFileArr = new String[] {configFile };
20. MuleContextFactory muleContextFactory = new DefaultMuleContextFactory();
21. MuleContext context = muleContextFactory
22. .createMuleContext(new SpringXmlConfigurationBuilder(configFileArr));
23. context.start();
24. } catch (MuleException t) {
25. t.printStackTrace();
26. }
27. }
28. }
上传应用:
mule-upload-config.xml
1. <?xml version="1.0" encoding="UTF-8"?>
2. <mule xmlns="http://www.mulesoft.org/schema/mule/core"
3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
4. xmlns:spring="http://www.springframework.org/schema/beans"
5. xmlns:ftp="http://www.mulesoft.org/schema/mule/ftp"
6. xmlns:file="http://www.mulesoft.org/schema/mule/file"
7. xsi:schemaLocation="
8. http://www.mulesoft.org/schema/mule/file http://www.mulesoft.org/schema/mule/file/current/mule-file.xsd
9. http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-current.xsd
10. http://www.mulesoft.org/schema/mule/core http://www.mulesoft.org/schema/mule/core/current/mule.xsd
11. http://www.mulesoft.org/schema/mule/ftp http://www.mulesoft.org/schema/mule/ftp/current/mule-ftp.xsd">
12. <!--
13. 上传文件到 ftp 服务器上的办法
14. -->
15. <file:connector name = "fileConnector" pollingFrequency = "6000" />
16. <!--
17. 连接 ftp 服务器的连接器
18. -->
19. <ftp:connector name = "ftpConnector" />
20. <model name = "model" >
21. <service name = "service" >
22. <inbound >
23. <!--
24. 利用 fileConnector 读取 e:/tmp 下的文件
25. -->
26. <file:inbound-endpoint path = "/e:/upload"
27. connector-ref = "fileConnector" >
28. </file:inbound-endpoint >
29. </inbound >
30. <outbound >
31. <!--
32. 利用 ftpConnector 将文件传输到 ftp 服务器上,这里配置了服务器的 ip 和账户密码
33. -->
34. <pass-through-router >
35. <ftp:outbound-endpoint host = "10.100.102.8"
36. port = "21" user = "root" password = "123456" path = "/home/test" connector-ref = "ftpConnector" />
37. </pass-through-router >
38. </outbound >
39. </service >
40. </model >
41. </mule >
42.
43.
测试
1. import org.mule.api.MuleContext;
2. import org.mule.api.MuleException;
3. import org.mule.api.context.MuleContextFactory;
4. import org.mule.config.spring.SpringXmlConfigurationBuilder;
5. import org.mule.context.DefaultMuleContextFactory;
6.
7. /**
8. * 检查是否发布成功的请求路径为:
9. * http://localhost:9090/hello?wsdl
10. * <p>功能描述,该部分必须以中文句号结尾。<p>
11. *
12. * 创建日期 2013-8-16<br>
13. * @author $Author$<br>
14. * @version $Revision$ $Date$
15. * @since 3.0.0
16. */
17. public class MuleFtpUploadMain {
18. public static void main(String[] args) {
19. try {
20. String configFile = "mule-upload-config.xml";
21. String[] configFileArr = new String[] {configFile };
22. MuleContextFactory muleContextFactory = new DefaultMuleContextFactory();
23. MuleContext context = muleContextFactory
24. .createMuleContext(new SpringXmlConfigurationBuilder(configFileArr));
25. context.start();
26. } catch (MuleException t) {
27. t.printStackTrace();
28. }
29. }
30. }