ESB文档库 ESB文档库
00 概述
01 产品安装指南
02 快速入门指南
03 ESB Studio使用指南
04 企业服务总线使用指南
05 高级配置指南
06 接口服务说明
07 升级&数据迁移指南
08 FAQ
  • 创建ESB工程
  • 创建公共Module
  • 创建Email Transport
  • 创建Email Endpoint
  • 创建业务Module
  • 创建HTTP Endpoint
  • 创建Email业务服务
  • 创建Email中介
  • 创建Email代理服务
  • 部署运行
  • 测试

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

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

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

项目源码如附件所示:email协议转换.zip

# 创建ESB工程

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

2.输入下图中工程的属性,如下图所示。

3.点击下一步,如图所示。

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

# 创建公共Module

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

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

  3. 单击“完成”,公共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业务服务

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

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

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

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

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

  6. 单击工具栏的保存,完成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”。

← 3.5.10 FTP协议转换 3.5.12 HTTP-EJB协议转换 →