⌘CtrlK
Appearance
Appearance
本节讲述了FTP协议场景的创建过程,包括创建工程、创建FTP协议相关的服务、并测试运行。通过本节你将了解到如下内容:
本示例中通过FTP模拟一个FTP调用者,用SOAP消息格式作为FTP服务器上的文件内容,从该服务器上下载该文件,通过FTP_WS协议转换,请求远程webservice服务,将返回内容通过WS_FTP协议转换,上传到指定服务器指定文件。
项目源码如附件所示:ftp.zip
启动ESB Studio。
在资源管理器中,鼠标右键选择“创建 > ESB项目”,创建ESB项目,如下图所示。

在“新建ESB项目”界面,输入“项目名称”、“作者”,选择“ESB服务器”、“R/R数据库”等基本信息。如下图所示。

单击“下一步”,进入“添加项目引用库”界面,如下图所示。

单击“完成”,系统返回ESB开发透视图,创建的项目在"资源管理器"视图中显示,如下图所示。

在资源管理器中,选中创建好的项目,鼠标右键选择“创建 > 公共Module”,创建公共Module,如下图所示。

在“公共Module”对话框中,填写Module名称等信息,如下图所示。

单击“完成”,公共Module创建完成,如下图所示。

在创建的ESB项目的“Transport”上,右键选择“创建 > FTP类型Transport”,如下图所示。

在弹出的“创建FTP类型Transport”界面,选择当前的工程、Module,并输入文件名及显示名称,如下图所示。

单击“完成”,HTTP Transport创建完成,如下图所示。

在资源管理器中,双击创建的FTP Transport,打开FTP Transport编辑器,修改相关参数。如下所示。

FTP Transport配置完成后,单击工具栏中的保存图标。
在创建的ESB项目的“Endpoint”上,右键选择“创建 > FTP类型Endpoint”,如下图所示。

在弹出的“创建Ftp类型Endpoint”界面,选择当前的工程、Module,并输入文件名及显示名称,如下图所示。

单击“完成”,FTP Endpoint创建完成,如下图所示。

在资源管理器中,双击创建的FTP Endpoint,打开FTP Endpoint编辑器,修改相关参数。如下所示。

HTTP Endpoint配置完成后,单击工具栏中的保存图标。
在资源管理器中,选中创建好的项目,鼠标右键选择“创建 > 业务Module”,创建业务Module,如下图所示。

在“业务Module”对话框中,填写Module名称等信息,如下图所示。

单击“完成”,业务Module创建完成,如下图所示。

在资源管理器中,在新建的业务Module“com.primeton.esb.project.restaurant”的“业务服务”上,鼠标右键选择“创建 > FTP业务服务”,如下图所示。

在打开的“创建FTP业务服务”对话框中,输入类别信息,如下图所示。

单击“完成”,在打开的“FTP业务服务”的编辑界面中,需要选择Endpoint和填写URI信息,如下图所示。

单击工具栏中的保存图标。
在资源管理器中,在新建的业务Module“com.primeton.esb.project.restaurant”的“代理服务”上,鼠标右键选择“创建 > FTP代理服务”,如下图所示。

在打开的“创建FTP代理服务”对话框中,输入类别信息,如下图所示。

单击“完成”,在FTP代理服务的编辑界面中,需要如下信息,如下图所示。

单击工具栏的保存,完成FTP代理服务的创建。
在资源管理器中,在新建的业务Module“com.primeton.esb.project.restaurant”的“业务服务”上,鼠标右键选择“创建 > WS业务服务”,创建WS业务服务,如下图所示。

在打开的“创建WS业务服务”对话框中,输入类别信息,如下图所示。

单击“完成”,在打开的“WS业务服务”的编辑界面中,需要选择Endpoint和填写URI信息,如下图所示。

在“WS业务服务”的编辑界面,单击“Endpoint*”后面的“选择...”,弹出“Http Endpoint”对话框,选择之前创建的HTTP Endpoint,单击“确定”。如下图所示。

在“WS业务服务”的编辑界面,单击“URI*”下面的“导入WSDL”链接,弹出"导入WSDL"对话框。
在“WSDL地址”的输入框中输入WSDL地址:http://127.0.0.1:8080/wsdemo/services/CustMgrService?wsdl ,然后单击后面的“导入”,Studio会自动导入WSDL的相关信息,勾选操作列表的操作,最后单击“完成”,完成WSDL的导入步骤,如下图所示。

单击工具栏的保存,完成WS业务服务的创建,如下图所示。

创建java类,在资源管理器中,右键单击业务Module中的Java,选择“创建 > 类”,如下图所示。


完整的“FTP_Http”类代码如下所示,该类方法中涉及到ESB内部消息的封装,FTP协议转换成HTTP协议,http协议所需的参数都已列出。具体属性值,根据自己的情况而定。
package com.simple;
import com.primeton.esb.message.ITipMessagePayload;
import com.primeton.esb.message.TipMessageBuilder;
import java.util.HashMap;
import java.util.Map;
public class FTP_Http
{
public ITipMessagePayload get(ITipMessagePayload in)
{
Map protocolHeaders = new HashMap();
protocolHeaders.put("$tip_method", "POST");
protocolHeaders.put("Host", "192.168.16.168:9094");
protocolHeaders.put("Content-Length", "242");
protocolHeaders.put("User-Agent", "Apache-HttpClient/4.1.1 (java 1.5)");
protocolHeaders.put("Connection", "/wsdemo/services/CustMgrService");
protocolHeaders.put("remote.addr", "192.168.16.57:8666");
protocolHeaders.put("SOAPAction", "getCustByID");
protocolHeaders.put("Accept-Encoding", "gzip,deflate");
protocolHeaders.put("$tip_protocol", "HTTP/1.1");
protocolHeaders.put("Content-Type", "text/xml*/");
protocolHeaders.put("$tip_consumer.message.req.encoding", "UTF-8");
protocolHeaders.put("$tip_consumer.message.resp.encoding", "UTF-8");
in.getSystemHeaders().put("$tip_message_encoding", "UTF-8");
in.getSystemHeaders().put("$tip_message_invoke_type", Integer.valueOf(3));
TipMessageBuilder msgBuilder = TipMessageBuilder.withPayload(new String((byte[])in.getMessagePayload()));
msgBuilder.setMessageHeaders(in.getMessageHeaders());
msgBuilder.setProtocolHeaders(protocolHeaders);
in.getSystemHeaders().put("$tip_message_invoke_type", Integer.valueOf(3));
msgBuilder.copySystemHeaders(in.getSystemHeaders());
return msgBuilder.build();
}
}同样的方法创建“Http_Ftp”类,完整的类代码如下所示。
package com.simple;
import com.primeton.esb.message.ITipMessagePayload;
import com.primeton.esb.message.TipMessageBuilder;
import java.io.PrintStream;
import java.util.HashMap;
import java.util.Map;
public class Http_Ftp
{
public ITipMessagePayload httpToFtp(ITipMessagePayload in)
{
Map protocolHeaders = new HashMap();
protocolHeaders.put("targetPath", "/test");
protocolHeaders.put("rename", "response.txt");
protocolHeaders.put("sameNameHandle", "1");
in.getSystemHeaders().put("$tip_message_invoke_type", Integer.valueOf(2));
TipMessageBuilder msgBuilder = null;
System.out.println(new String((byte[])in.getMessagePayload()));
if ((in.getMessagePayload() instanceof byte[]))
msgBuilder = TipMessageBuilder.withPayload((byte[])in.getMessagePayload());
else {
msgBuilder = TipMessageBuilder.withPayload(((String)in.getMessagePayload()).getBytes());
}
msgBuilder.setMessageHeaders(in.getMessageHeaders());
msgBuilder.setProtocolHeaders(protocolHeaders);
msgBuilder.copySystemHeaders(in.getSystemHeaders());
return msgBuilder.build();
}
}在资源管理器中,在新建的业务Module“com.primeton.esb.project.restaurant”的“中介服务”上,鼠标右键选择“创建 > 中介服务”,如下图所示。

在打开的“创建中介服务”对话框中,输入类别信息,如下图所示。

单击“完成”,进入右侧的“中介服务”的编辑界面中,如下图所示。

在“中介服务”编辑界面,单击“服务编排”,从左侧面板拖入图元到右侧编辑界面,并用连线连接,如下图所示。

双击编辑区中的"JAVA方法"JAVA方法图元,在"JAVA方法属性设置"窗口中,单击"浏览...",弹出"选择java方法"窗口,在"选择要打开的类型的输入框中输入类名"FTP_Http",在"匹配的类型"中选中FTP_Http,单击“下一步”再选中方法,如下图所示。


在"JAVA方法属性设置"中设置"参数配置表",如下图所示。

双击编辑区中的"WS业务服务"图元,弹出WS业务服务的"设置对话框",单击"浏览...",如下图所示。

在弹出的"请选择WS业务服务"窗口中,选择对应的WS业务服务,单击“确定”,如下图所示。

在"设置对话框"中设置"参数配置表",单击“确定”,如下图所示。

双击编辑区中的“JAVA方法1”图元,在"JAVA方法属性设置"窗口中,单击"浏览...",弹出"选择java方法"窗口,在"选择要打开的类型的输入框中输入类名"Http_Ftp",在"匹配的类型"中选中Http_Ftp,单击“下一步”再选中方法,如下图所示。







在创建的ESB项目的“Endpoint”上,右键选择“创建 > HTTP类型Endpoint”,如下图所示。

在弹出的“创建HTTP类型Endpoint”界面,选择当前的工程、Module,并输入文件名及显示名称,如下图所示。

单击“完成”,HTTP Endpoint创建完成,如下图所示。

在资源管理器中,双击创建的HTTP Endpoint,打开HTTPEndpoint编辑器,修改相关参数。如下所示。

1.右击项目名称,选择部署。

利用SOAPUI测试http://127.0.0.1:8080/wsdemo/services/CustMgrService?wsdl 中的getCustByID操作,可以得到SOAP请求消息,即为 ftp 上/test/soapmsg.txt 中的内容,如下所示。
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:xsd="http://ws.apache.org/axis2/samples/Cust/xsd/">
<soap:Header/>
<soap:Body>
<xsd:getCustByID>
<xsd:custid>1</xsd:custid>
</xsd:getCustByID>
</soap:Body>
</soap:Envelope>保证 FTP 可以正常访问,启动 ESB Server 后,间隔 20s,就会发现从 ftp 上将/test/soapmsg.txt 文件下载到 E:/test/soapmsg.txt,并根据其中的 soap 消息,调用了CustMgrService 中的 getCustByID,将响应的 soap 消息作为文件内容,上传到了 ftp 上/test/responst.txt 文件中,该文件内容如下图所示。
