本节讲述了Email协议场景的创建过程,包括创建工程、创建Email协议相关的服务、并测试运行。通过本节你将了解到如下内容:

  1. 如何创建完整的EMAIL协议场景;
  2. 如何在Studio中测试运行开发的业务逻辑;
  3. 如何通过Server运行日志查看运行结果;

本示例中通过EMAIL模拟一个EMAIL调用者,用SOAP消息格式作为EMAIL服务器上的文件内容,从该服务器上下载该文件,通过EMAIL_HTTP协议转换,请求远程webservice服务,将返回内容通过HTTP_EMAIL协议转换,上传到指定服务器指定文件。

项目源码如附件所示:project.zip (opens new window)

# 创建工程

  1. 打开APIGateway Studio,在资源 管理器中,点击右键,选择"创建->ESB项目"菜单项,创建工程,如下图所示。
    img

2.输入下图中工程的属性,如下图所示。
image2018-10-10 17:52:40.png

3.点击下一步,如图所示。
image2018-10-10 17:59:15.png

4.单击“完成”,系统返回ESB开发透视图,创建的项目在"资源管理器"视图中显示,如下图所示。
image2018-10-11 10:29:42.png

# 创建公共Module

  1. 在资源管理器中,选中创建好的项目,鼠标右键选择“创建 > 公共Module”,创建公共Module,如下图所示。
    image2018-10-11 10:32:27.png

  2. 在“公共Module”对话框中,填写Module名称等信息,如下图所示。
    image2018-10-11 10:34:49.png

  3. 单击“完成”,公共Module创建完成,如下图所示。
    image2018-10-11 10:45:18.png

# 创建Email Transport

1.在创建的ESB项目的“Transport”上,右键选择“创建 > EMAIL类型Transport”,如下图所示。
image2020-4-3 11:30:5.png

2.输入Transport页面的属性值,如下图所示。
image2020-4-3 11:30:27.png

3.点击完成,生成页面,填写页面中的属性值,如下图所示。
image2020-4-7 17:15:33.png

属性名称 属性描述
显示名称 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,如下图所示。
image2020-4-3 11:42:35.png

2.输入Email Endpoint需要的属性值,如下图所示。
image2020-4-3 11:43:8.png

3.点击完成,生成Email endpoint页面,如下图所示。
image2020-4-7 17:19:15.png

属性名称 属性描述
显示名称 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,如下图所示。
img

2.填写业务Module属性值,如下图所示。
img

# 创建HTTP Endpoint

1.创建HTTP Endpoint,如下图所示。
image2020-4-3 16:8:35.png

2.填写HTTP Endpoint属性值,如下图所示。
image2020-4-3 16:10:38.png

3.点击完成,生成HTTP Endpoint页面,如下图所示。
image2020-4-3 16:11:8.png

创建WS业务服务

  1. 在资源管理器中,在新建的业务服务上,鼠标右键选择“创建 > WS业务服务”,创建WS业务服务,如下图所示。
    image2018-10-16 10:37:56.png

  2. 在打开的“创建WS业务服务”对话框中,输入类别信息,如下图所示。
    image2018-10-16 10:38:54.png

  3. 单击“完成”,在打开的“WS业务服务”的编辑界面中,需要选择Endpoint和填写URI信息,如下图所示。
    image2018-10-16 10:50:52.png

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

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

  6. 单击工具栏的保存,完成WS业务服务的创建,如下图所示。
    image2018-10-16 11:25:16.png

# 创建Email业务服务

1.创建Email业务服务,如下图所示。
image2020-4-3 16:46:17.png

2.填写创建属性的值,如下图所示。
image2020-4-3 16:37:56.png

3.点击完成,生成业务服务页面,在业务服务页面,点击endpoint 选择按钮,如下图所示。
image2020-4-3 16:39:53.png

4.点击确定后,业务服务页面,如下图所示。
image2020-4-3 16:40:45.png

# 创建Email中介

1.创建Email中介,如下图所示。
image2020-4-3 16:48:42.png

2.填写属性值,如图所示:
image2020-4-3 16:49:4.png

3.点击完成,生成页面,如下图所示。
image2020-4-3 16:49:31.png

4.点击服务编排,如下图所示。
image2020-4-3 16:53:4.png

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

6.输入类名,包名等,如下图所示。
image2020-4-3 16:59:28.png

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方法,配置如下图所示。
image2020-4-7 16:44:16.png

10.双击编辑区中的"WS业务服务"图元,弹出WS业务服务的"设置对话框",单击"浏览...",选择对应的WS业务服务,并设置"参数配置表",如下图所示。
image2020-4-7 16:45:44.png

11.双击java方法1,配置如下图所示。
image2020-4-7 16:47:32.png

12.双击编辑区中的"EMAIL业务服务"图元,弹出EMAIL业务服务的"设置对话框",单击"浏览...",选择对应的EMAIL业务服务,并设置"参数配置表",如下图所示。
image2020-4-7 16:50:10.png

13.单击“确定”,工程开发结束。
image2020-4-7 17:25:18.png

# 创建Email代理服务

1.创建Email业务服务,如下图所示。
image2020-4-7 15:30:42.png

2.填写代理业务属性的值,如下图所示。
image2020-4-7 15:31:20.png

3.点击完成,生成页面,配置如下图所示。
image2020-4-7 16:52:17.png

# 部署运行

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

# 测试

部署到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>

发送邮件后,启动 APIGateway ESBServer 后,间隔 30s,就会发现 xmcheng_110@163.com 将调用 Web Service 后的 SOAP 的响应消息发送到了 chengxm@primeton.com 中,邮件标题为“测试 Email”。