本节讲述了Email协议场景的创建过程,包括创建ESB工程、创建Email协议相关的服务、并测试运行。通过本节你将了解到如下内容:
- 如何创建完整的EMAIL协议场景;
- 如何在Studio中测试运行开发的业务逻辑;
- 如何通过Server运行日志查看运行结果;
本示例中通过EMAIL模拟一个EMAIL调用者,用SOAP消息格式作为EMAIL服务器上的文件内容,从该服务器上下载该文件,通过EMAIL_HTTP协议转换,请求远程webservice服务,将返回内容通过HTTP_EMAIL协议转换,上传到指定服务器指定文件。
项目源码如附件所示:email协议转换.zip
# 创建ESB工程
打开ESB Studio,在资源 管理器中,点击右键,选择"创建->ESB项目"菜单项,创建工程,如下图所示。
2.输入下图中工程的属性,如下图所示。
3.点击下一步,如图所示。
4.单击“完成”,系统返回ESB开发透视图,创建的项目在"资源管理器"视图中显示,如下图所示。
# 创建公共Module
在资源管理器中,选中创建好的项目,鼠标右键选择“创建 > 公共Module”,创建公共Module,如下图所示。
在“公共Module”对话框中,填写Module名称等信息,如下图所示。
单击“完成”,公共Module创建完成,如下图所示。
# 创建Email Transport
1.在创建的ESB项目的“Transport”上,右键选择“创建 > EMAIL类型Transport”,如下图所示。
2.输入Transport页面的属性值,如下图所示。
3.点击完成,生成页面,填写页面中的属性值,如下图所示。
属性名称 | 属性描述 |
---|---|
显示名称 | email_transport 显示的名称 |
服务器地址 | 邮箱服务器:pop3.163.com(接收) smtp.163.com(发送) |
服务器端口 | 邮箱端口号:pop3:110 ;imap:143 |
用户名 | 邮件地址:xmcheng_110@163.com |
密码 | 该邮箱对应的密码 |
协议类型 | 邮件接收:pop3 imap 邮件发送:smtp |
邮件接收 | 新邮件 :pop3只接收邮箱中相对于当前从未接收过的邮件,imap接收的是邮箱中未读邮件 全部邮件:pop3 接收邮箱中所有的邮件,imap 接收邮箱中所有的邮件 |
按起始时间过滤 | 收取大于该时间的邮件 |
按结束时间过滤 | 收取小于该时间的邮件 |
按邮件内容过滤 | 收取包含该内容的邮件 |
按邮件主题过滤 | 收取包含该主题内容的邮件 |
重复次数 | 循环检测次数 |
间隔时间 | 循环检测次数间隔的时间,以秒为单位 |
# 创建Email Endpoint
1.创建Email Endpoint,如下图所示。
2.输入Email Endpoint需要的属性值,如下图所示。
3.点击完成,生成Email endpoint页面,如下图所示。
属性名称 | 属性描述 |
---|---|
显示名称 | email_endpoint 显示的名称 |
服务器地址 | 邮箱服务器:pop3.163.com(接收) ;smtp.163.com(发送) |
服务器端口 | 邮箱端口号:pop3:110 ; imap:143 |
用户名 | 邮件地址:xmcheng_110@primeton.com |
密码 | 该邮箱对应的密码 |
操作类型 | email发送;email接收 |
是否从协议中获取配置 | 是:参数根据协议中的获取。否:参数是从页面配置中获取 |
协议类型 | 邮件接收:pop3 imap 邮件发送:smtp |
按起始时间过滤 | 收取大于该时间的邮件 |
按结束时间过滤 | 收取小于该时间的邮件 |
按邮件内容过滤 | 收取包含该内容的邮件 |
按邮件主题过滤 | 收取包含该主题内容的邮件 |
收件人 | 发送邮件操作时,输入收件人地址 :chengxm@primeton.com |
# 创建业务Module
1.创建业务Module,如下图所示。
2.填写业务Module属性值,如下图所示。
# 创建HTTP Endpoint
1.创建HTTP Endpoint,如下图所示。
2.填写HTTP Endpoint属性值,如下图所示。
3.点击完成,生成HTTP Endpoint页面,如下图所示。
创建WS业务服务
在资源管理器中,在新建的业务服务上,鼠标右键选择“创建 > 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 (opens new window) ,然后单击后面的“导入”,Studio会自动导入WSDL的相关信息,勾选操作列表的操作,最后单击“完成”,完成WSDL的导入步骤,如下图所示。
单击工具栏的保存,完成WS业务服务的创建,如下图所示。
# 创建Email业务服务
1.创建Email业务服务,如下图所示。
2.填写创建属性的值,如下图所示。
3.点击完成,生成业务服务页面,在业务服务页面,点击endpoint 选择按钮,如下图所示。
4.点击确定后,业务服务页面,如下图所示。
# 创建Email中介
1.创建Email中介,如下图所示。
2.填写属性值,如图所示:
3.点击完成,生成页面,如下图所示。
4.点击服务编排,如下图所示。
5.创建java类,在资源管理器中,右键单击业务Module中的Java,选择“创建 > 类”,如下图所示。
6.输入类名,包名等,如下图所示。
7.点击完成,生成该类内容如下所示。
package emailmessage;
import java.io.UnsupportedEncodingException;
import java.util.HashMap;
import java.util.Map;
import com.primeton.esb.message.ITipMessagePayload;
import com.primeton.esb.message.TipMessageBuilder;
public class EmailConvert {
/*
* 根据 Email 请求消息构建 SOAP 消息
*/
public ITipMessagePayload email_ws(ITipMessagePayload inMessage) {
Map protocolHeaders = new HashMap();
protocolHeaders.put("$tip_method", "POST");
protocolHeaders.put("Host", "127.0.0.1:9090");
protocolHeaders.put("Content-Length", "242");
protocolHeaders.put("User-Agent", "Apache-HttpClient/4.1.1 (java 1.5)");
// 本 示 例 调 用 wsdemo.war 中 WS , 其 访 问 地 址 为 :
http:
//127.0.0.1:8088/wsdemo/services/CustMgrService?wsdl
//Connection 为 WS 业务服务中导入 WSDL 后显示的 URI
//SOAPAction 为要调用的操作
protocolHeaders.put("Connection", "/wsdemo/services/CustMgrService");
protocolHeaders.put("remote.addr", "127.0.0.1:8080");
protocolHeaders.put("SOAPAction", "addCust");
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");
inMessage.getSystemHeaders().put("$tip_message_encoding", "UTF-8");
inMessage.getSystemHeaders().put("$tip_message_invoke_type",
Integer.valueOf(3));
TipMessageBuilder msgBuilder = TipMessageBuilder
.withPayload(new String((byte[]) inMessage.getMessagePayload()));
msgBuilder.setMessageHeaders(inMessage.getMessageHeaders());
msgBuilder.setProtocolHeaders(protocolHeaders);
inMessage.getSystemHeaders().put("$tip_message_invoke_type",
Integer.valueOf(3));
msgBuilder.copySystemHeaders(inMessage.getSystemHeaders());
return msgBuilder.build();
}
/*
* 根据 SOAP 消息构建 Email 消息
*/
public ITipMessagePayload ws_email(ITipMessagePayload inMessage) throws
UnsupportedEncodingException {
Map protocolHeaders = new HashMap();
protocolHeaders.put("bcc", "");
protocolHeaders.put("cc", "");
protocolHeaders.put("subject", "测试 Email");
protocolHeaders.put("mimetype", "");
protocolHeaders.put("emailCharset", " UTF-8");
inMessage.getSystemHeaders().put("$tip_message_invoke_type",
Integer.valueOf(2));
TipMessageBuilder msgBuilder = null;
System.out.println(new String((byte[])
inMessage.getMessagePayload(), "UTF-8"));
if ((inMessage.getMessagePayload() instanceof byte[]))
msgBuilder = TipMessageBuilder.withPayload((byte[]) inMessage
.getMessagePayload());
else
msgBuilder =
TipMessageBuilder.withPayload(((String) inMessage.getMessagePayload()).getBytes()
);
msgBuilder.setMessageHeaders(inMessage.getMessageHeaders());
msgBuilder.setProtocolHeaders(protocolHeaders);
msgBuilder.copySystemHeaders(inMessage.getSystemHeaders());
inMessage.getSystemHeaders().put("$tip_message_invoke_type",
Integer.valueOf(2));
return msgBuilder.build();
}
}
9.在服务编排界面,双击java方法,配置如下图所示。
10.双击编辑区中的"WS业务服务"图元,弹出WS业务服务的"设置对话框",单击"浏览...",选择对应的WS业务服务,并设置"参数配置表",如下图所示。
11.双击java方法1,配置如下图所示。
12.双击编辑区中的"EMAIL业务服务"图元,弹出EMAIL业务服务的"设置对话框",单击"浏览...",选择对应的EMAIL业务服务,并设置"参数配置表",如下图所示。
13.单击“确定”,工程开发结束。
# 创建Email代理服务
1.创建Email业务服务,如下图所示。
2.填写代理业务属性的值,如下图所示。
3.点击完成,生成页面,配置如下图所示。
# 部署运行
1.右击项目名称,选择“部署”。
# 测试
部署到studio后启动server,启动成功后根据配置参数重复次数和间隔时间自动执行。
利用SOAPUI测试http://127.0.0.1:8080/wsdemo/services/CustMgrService?wsdl (opens new window) 中的addCust操作,可以得到 SOAP 请求消息,即为发送到 xmcheng_110@163.com 的邮件内容,如下所示。
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:xsd="http://ws.apache.org/axis2/samples/Cust/xsd/"
xmlns:xsd1="http://webservice.primeton.com/xsd">
<soapenv:Header/>
<soapenv:Body>
<xsd:addCust>
<xsd:cust>
<xsd1:age>24</xsd1:age>
<xsd1:custid>10</xsd1:custid>
<xsd1:name>Tom</xsd1:name>
<xsd1:phone>01062698005</xsd1:phone>
<xsd1:sex>M</xsd1:sex>
</xsd:cust>
</xsd:addCust>
</soapenv:Body>
</soapenv:Envelope>
发送邮件后,启动 ESB Server 后,间隔 30s,就会发现 xmcheng_110@163.com 将调用 Web Service 后的 SOAP 的响应消息发送到了 chengxm@primeton.com 中,邮件标题为“测试 Email”。