本节介绍WS-WS数据格式的转换,主要包括如下。
- Http Tansport和Endpoint的创建
- WS代理和业务服务的创建
- 创建数据转换的中介服务
使用如下的输入WS示例数据(wsdemo中的CustMgrService服务)请求报文如下:
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://ws.apache.org/axis2/samples/Cust/xsd/">
<soapenv:Header/>
<soapenv:Body>
<xsd:getCustByID>
<xsd:custid>1</xsd:custid>
</xsd:getCustByID>
</soapenv:Body>
</soapenv:Envelope>
正常的WS穿透场景返回:
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
<soapenv:Header/>
<soapenv:Body>
<ns:getCustByIDResponse xmlns:ns="http://ws.apache.org/axis2/samples/Cust/xsd/">
<ns:return>
<age xmlns="http://webservice.primeton.com/xsd">50</age>
<custid xmlns="http://webservice.primeton.com/xsd">1</custid>
<name xmlns="http://webservice.primeton.com/xsd">primeton1</name>
<phone xmlns="http://webservice.primeton.com/xsd">8008205821</phone>
<sex xmlns="http://webservice.primeton.com/xsd">男</sex>
</ns:return>
</ns:getCustByIDResponse>
</soapenv:Body>
</soapenv:Envelope>
中介转换后的数据格式(erpdemo中的CustomerService服务)转换后报文如下:
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://ws.apache.org/axis2/samples/Customer/xsd/">
<soapenv:Header/>
<soapenv:Body>
<xsd:getCustomerByID>
<xsd:customerid>2</xsd:customerid>
</xsd:getCustomerByID>
</soapenv:Body>
</soapenv:Envelope>
最终返回后的数据:
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
<soapenv:Header/>
<soapenv:Body>
<ns:getCustomerByIDResponse xmlns:ns="http://ws.apache.org/axis2/samples/Customer/xsd/">
<ns:return>
<age xmlns="http://erpservice.primeton.com/xsd">50</age>
<customerid xmlns="http://erpservice.primeton.com/xsd">2</customerid>
<gender xmlns="http://erpservice.primeton.com/xsd">男</gender>
<name xmlns="http://erpservice.primeton.com/xsd">erp2</name>
<telephone xmlns="http://erpservice.primeton.com/xsd">8008205821</telephone>
</ns:return>
</ns:getCustomerByIDResponse>
</soapenv:Body>
</soapenv:Envelope>
通过dom4j解析修改报文内容,因为牵扯到跨WS调用,所以需要修改命名空间、SOAPAction,生成另外一种格式的soap消息,提交到目标服务,处理后返回给客户端。
示例如附件所示:ws_ws.zip
# 创建工程
启动ESB Studio。
在资源管理器中,鼠标右键选择“创建 > ESB项目”,创建ESB项目,如下图所示。
在“新建ESB项目”界面,输入“项目名称”、“作者”,选择“ESB服务器”、“R/R数据库”等基本信息。如下图所示。
单击“下一步”,进入“添加项目引用库”界面,如下图所示。
单击“完成”,系统返回ESB开发透视图,创建的项目在"资源管理器"视图中显示,如下图所示。
# 创建公共Module
在资源管理器中,选中创建好的项目,鼠标右键选择“创建 > 公共Module”,创建公共Module,如下图所示。
在“公共Module”对话框中,填写Module名称等信息,如下图所示。
单击“完成”,公共Module创建完成,如下图所示。
# 创建HTTP Transport
在创建的ESB项目的“Transport”上,右键选择“创建 > HTTP类型Transport”,如下图所示。
在弹出的“创建HTTP类型Transport”界面,选择当前的工程、Module,并输入文件名及显示名称,如下图所示。
单击“完成”,在资源管理器中,双击创建的HTTP Transport,打开HTTP Transport编辑器,修改相关参数。如下所示。
HTTP Transport配置完成后,单击工具栏中的保存图标。
# 创建HTTP Endpoint
在创建的ESB项目的“Endpoint”上,右键选择“创建 > HTTP类型Endpoint”,如下图所示。
在弹出的“创建HTTP类型Endpoint”界面,选择当前的工程、Module,并输入文件名及显示名称,如下图所示。
单击“完成”,在资源管理器中,双击创建的HTTP Endpoint,打开HTTPEndpoint编辑器,修改相关参数。如下所示。
HTTP Endpoint配置完成后,单击工具栏中的保存图标。
# 创建业务Module
在资源管理器中,选中创建好的项目,鼠标右键选择“创建 > 业务Module”,创建业务Module,如下图所示。
在“业务Module”对话框中,填写Module名称等信息,如下图所示。
单击“完成”,业务Module创建完成,如下图所示。
# 创建WS业务服务
说明
将服务提供者“wsdemo.war”在tomcat中启动。
在资源管理器中,在新建的业务Module”的“业务服务”上,鼠标右键选择“创建 > 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业务服务的创建,如下图所示。
# 创建WS代理服务
在资源管理器中,在新建的业务Module的“代理服务”上,鼠标右键选择“创建 > WS代理服务”,创建WS代理服务,如下图所示。
在打开的“创建WS代理服务”对话框中,输入类别信息,如下图所示。
单击“完成”,在打开的“WS代理服务”的编辑界面中,单击“Transport”后面的“选择...”,弹出“Http Transport”对话框,选择之前创建的HTTP Transport,单击“确定”。如下图所示。
在“WS代理服务”的编辑界面,单击“URI*”下面的“导入WSDL”链接,弹出"导入WSDL"对话框。
在“WSDL地址”的输入框中输入WSDL地址:http://127.0.0.1:8080/wsdemo/services/CustMgrService?wsdl (opens new window) ,然后单击后面的“导入”,Studio会自动导入WSDL的相关信息,全部选择操作列表中的操作,最后单击“完成”,完成WSDL的导入步骤,如下图所示。在WS代理服务编辑界面中导入WSDL后,还需要设置“操作列表”中每个操作所对应的WS业务服务。单击“操作列表”中的操作“getCustByID”,会打开设置该操作相关信息的界面,如下图所示。
在“操作基本信息”区域,单击“服务名称”后面的“选择...”,弹出“选择业务服务操作”对话框,并选中“getCustByID”,单击“确定”,如下图所示。
参考步骤6和7关联操作列表中的“addCust”、“updateCust”和“deleteCust”操作。
单击工具栏的保存,完成WS代理服务的创建,如下图所示。
# 部署运行
在资源管理器中,选中创建好的项目,鼠标右键单击“部署”,如下图所示。
部署完成后,ESB Studio将公共Module和业务Module部署Studio内置的ESB Server上,然后启动ESB Server,如下图所示。
ESB Server启动时,弹出启动服务器进度窗口,如下图所示。
在ESB Studio控制台,看到“ESB Server started successfully.”日志字样,表示ESB Server启动成功,如下图所示。
# 测试
通过SOAPUI发送SOAP请求,如下图所示。