本节介绍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 (opens new window)

# 创建工程

  1. 启动APIGateway Studio。

  2. 在资源管理器中,鼠标右键选择“创建 > ESB项目”,创建ESB项目,如下图所示。
     3.3.6 WS_WS协议转换 > image2018-10-10 17:56:4.png

  3. 在“新建ESB项目”界面,输入“项目名称”、“作者”,选择“ESB服务器”、“R/R数据库”等基本信息。如下图所示。
     3.3.6 WS_WS协议转换 > image2018-10-10 17:56:4.png

  4. 单击“下一步”,进入“添加项目引用库”界面,如下图所示。
     3.3.6 WS_WS协议转换 > image2018-10-10 17:59:15.png

  5. 单击“完成”,系统返回ESB开发透视图,创建的项目在"资源管理器"视图中显示,如下图所示。
     3.3.6 WS_WS协议转换 > image2020-6-3 16:40:41.png

# 创建公共Module

  1. 在资源管理器中,选中创建好的项目,鼠标右键选择“创建 > 公共Module”,创建公共Module,如下图所示。
     3.3.6 WS_WS协议转换 > image2020-6-3 16:41:37.png

  2. 在“公共Module”对话框中,填写Module名称等信息,如下图所示。
     3.3.6 WS_WS协议转换 > image2020-6-3 16:41:52.png

  3. 单击“完成”,公共Module创建完成,如下图所示。
     3.3.6 WS_WS协议转换 > image2020-6-3 16:42:14.png

# 创建HTTP Transport

  1. 在创建的ESB项目的“Transport”上,右键选择“创建 > HTTP类型Transport”,如下图所示。
     3.3.6 WS_WS协议转换 > image2020-6-3 16:42:57.png

  2. 在弹出的“创建HTTP类型Transport”界面,选择当前的工程、Module,并输入文件名及显示名称,如下图所示。
     3.3.6 WS_WS协议转换 > image2020-6-3 16:43:17.png

  3. 单击“完成”,在资源管理器中,双击创建的HTTP Transport,打开HTTP Transport编辑器,修改相关参数。如下所示。
     3.3.6 WS_WS协议转换 > image2020-7-10 16:44:16.png

  4. HTTP Transport配置完成后,单击工具栏中的图标保存。

# 创建HTTP Endpoint

  1. 在创建的ESB项目的“Endpoint”上,右键选择“创建 > HTTP类型Endpoint”,如下图所示。
     3.3.6 WS_WS协议转换 > image2020-6-3 16:45:45.png

  2. 在弹出的“创建HTTP类型Endpoint”界面,选择当前的工程、Module,并输入文件名及显示名称,如下图所示。
     3.3.6 WS_WS协议转换 > image2020-6-3 16:46:2.png

  3. 单击“完成”,在资源管理器中,双击创建的HTTP Endpoint,打开HTTPEndpoint编辑器,修改相关参数。如下所示。
     3.3.6 WS_WS协议转换 > image2020-6-3 16:47:20.png

  4. HTTP Endpoint配置完成后,单击工具栏中的图标保存。

# 创建业务Module

  1. 在资源管理器中,选中创建好的项目,鼠标右键选择“创建 > 业务Module”,创建业务Module,如下图所示。
     3.3.6 WS_WS协议转换 > image2020-6-3 16:48:10.png

  2. 在“业务Module”对话框中,填写Module名称等信息,如下图所示。
     3.3.6 WS_WS协议转换 > image2020-6-3 17:27:6.png

  3. 单击“完成”,业务Module创建完成,如下图所示。
     3.3.6 WS_WS协议转换 > image2020-6-3 17:27:33.png

# 创建WS业务服务

  1. 在资源管理器中,在新建的业务Module”的“业务服务”上,鼠标右键选择“创建 > WS业务服务”,创建WS业务服务,如下图所示。
     3.3.6 WS_WS协议转换 > image2020-6-3 18:3:14.png

  2. 在打开的“创建WS业务服务”对话框中,输入类别信息,如下图所示。
     3.3.6 WS_WS协议转换 > image2020-6-3 18:3:36.png

  3. 单击“完成”,在打开的“WS业务服务”的编辑界面中,需要选择Endpoint和填写URI信息,如下图所示。
     3.3.6 WS_WS协议转换 > image2020-6-3 18:4:40.png

  4. 在“WS业务服务”的编辑界面,单击“Endpoint*”后面的“选择...”,弹出“Http Endpoint”对话框,选择之前创建的HTTP Endpoint,单击“确定”。如下图所示。
     3.3.6 WS_WS协议转换 > image2020-6-3 18:5:3.png

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

  6. 单击工具栏的保存,完成WS业务服务的创建,如下图所示。
     3.3.6 WS_WS协议转换 > image2020-6-4 11:23:6.png

# 创建WS代理服务

  1. 在资源管理器中,在新建的业务Module的“代理服务”上,鼠标右键选择“创建 > WS代理服务”,创建WS代理服务,如下图所示。
     3.3.6 WS_WS协议转换 > image2020-6-4 11:23:47.png

  2. 在打开的“创建WS代理服务”对话框中,输入类别信息,如下图所示。
     3.3.6 WS_WS协议转换 > image2020-6-4 11:24:8.png

  3. 单击“完成”,在打开的“WS代理服务”的编辑界面中,单击“Transport”后面的“选择...”,弹出“Http Transport”对话框,选择之前创建的HTTP Transport,单击“确定”。如下图所示。
     3.3.6 WS_WS协议转换 > image2020-6-4 11:24:41.png

  4. 在“WS代理服务”的编辑界面,单击“URI*”下面的“导入WSDL”链接,弹出"导入WSDL"对话框。
    在“WSDL地址”的输入框中输入WSDL地址:http://127.0.0.1:8080/wsdemo/services/CustMgrService?wsdl (opens new window),然后单击后面的“导入”,Studio会自动导入WSDL的相关信息,全部选择操作列表中的操作,最后单击“完成”,完成WSDL的导入步骤,如下图所示。
     3.3.6 WS_WS协议转换 > image2020-6-4 11:17:11.png

  5. 在WS代理服务编辑界面中导入WSDL后,还需要设置“操作列表”中每个操作所对应的WS业务服务。单击“操作列表”中的操作“getCustByID”,会打开设置该操作相关信息的界面,如下图所示。
     3.3.6 WS_WS协议转换 > image2020-6-4 11:27:55.png

  6. 在“操作基本信息”区域,单击“服务名称”后面的“选择...”,弹出“选择业务服务操作”对话框,并选中“getCustByID”,单击“确定”,如下图所示。
     3.3.6 WS_WS协议转换 > image2020-6-4 11:27:24.png

  7. 参考步骤6和7关联操作列表中的“addCust”、“updateCust”和“deleteCust”操作。

  8. 单击工具栏的保存,完成WS代理服务的创建,如下图所示。
     3.3.6 WS_WS协议转换 > image2020-6-4 11:29:19.png

# 部署运行

  1. 在资源管理器中,选中创建好的项目,鼠标右键单击“部署”,如下图所示。
     3.3.6 WS_WS协议转换 > image2020-6-4 11:31:2.png

  2. 部署完成后,APIGateway Studio将公共Module和业务Module部署Studio内置的APIGateway ESBServer上,然后启动APIGateway ESBServer,如下图所示。
     3.3.6 WS_WS协议转换 > image2020-6-4 11:33:32.png

  3. APIGateway ESBServer启动时,弹出启动服务器进度窗口,如下图所示。
     3.3.6 WS_WS协议转换 > image2020-6-4 11:34:9.png

  4. 在APIGateway Studio控制台,看到“APIGateway ESBServer started successfully.”日志字样,表示APIGateway ESBServer启动成功,如下图所示。
     3.3.6 WS_WS协议转换 > image2020-3-30 11:38:39.png

# 测试

  1. 通过SOAPUI发送SOAP请求,如下图所示。
     3.3.6 WS_WS协议转换 > image2019-4-10 10:14:9.png