Tutorial: SOAP 客户端演示

SOAP 客户端演示

在本示例中,我们将使用 www.dataaccess.com 提供的简单 NumberToWords 服务来构建一个简单的 SOAP 客户端。

SOAP(以前是 Simple Object Access Protocol 的首字母缩写)是一种消息传输协议规范,用于在计算机网络中的 Web 服务实现中交换结构化信息。
它使用 XML 信息集作为消息格式,并依赖应用层协议,最常见的是超文本传输协议(HTTP),尽管一些旧系统仍然通过简单邮件传输协议(SMTP)进行消息协商和传输。
——摘自 SOAP - 维基百科

为了构建 SOAP 消息并解析其输出,我们使用 fast-xml-parser 来解析 XML 数据。

如果您想直接查看结果,只需下载 cmtp 项目文件 js-demo-soap.cmtp 并在 EasyBuilder Pro 中模拟运行。
本示例中使用的所有代码也可以通过 js-demo-soap.zip 下载。

步骤

  1. 打开 EasyBuilder Pro,选择支持 JS 元件的型号(例如 cMT3000X 系列)。

  2. 为了构建 SOAP(XML)消息并确保其正确性,我们使用了一个纯 JavaScript 的 XML 解析/构建/验证器——fast-xml-parser。
    下载 js-demo-soap-fxp-v4.0.4.min.js 并将其导入到 EasyBuilder Pro 的 [JS 资源] 中。
    该文件是从原始的 fxp.min.js 修改而来的,添加了以下代码,以便我们可以在 [JS 资源] 中使用它。

    module.exports = fxp;
    
  3. SOAP 基于 HTTP 请求。要发送 HTTP 请求,您可以直接使用 net.Curl,或者使用我们简化的 Web 请求示例。
    下载 request-0.0.4.js 并在 EasyBuilder Pro 的 [JS 资源] 中导入。

  4. 创建一个 JS 元件,内容如下:

    const request = require('./request-0.0.4.js');
    const fxp = require('./js-demo-soap-fxp-v4.0.4.min.js');
    const builder = new fxp.XMLBuilder({
        ignoreAttributes: false,
        attributeNamePrefix: "attr::",
    });
    
    var number = Math.round(Math.random() * 1000);
    console.log("number:", number);
    
    // soap input data
    var jsonData = {
        "?xml": {
            "attr::version": "1.0",
            "attr::encoding": "utf-8"
        },
        "soap:Envelope": {
            "soap:Body": {
                "NumberToWords": {
                    "ubiNum": number,
                    "attr::xmlns": "http://www.dataaccess.com/webservicesserver/"
                }
            },
            "attr::xmlns:soap": "http://schemas.xmlsoap.org/soap/envelope/"
        }
    };
    var xmlData = builder.build(jsonData);
    
    // Send the get request
    request.post(
        {
            url: 'https://www.dataaccess.com/webservicesserver/numberconversion.wso',
            data: xmlData,
            header: {
                "content-type": "text/xml; charset=utf-8",
            }
        },
        function (error, response, body) {
            if (error !== "No error") {
                console.error(error);
                console.error("response: ", response);
                console.error("body: ", body);
            } else {
                console.log("status code: ", response.statusCode);
                const parser = new fxp.XMLParser({
                    ignoreAttributes: false, // parse the attributes
                    attributeNamePrefix: "attr::", // use attr:: as the prefix
                });
                let jsonObj = parser.parse(body);
                console.log("xml: ", body);
                console.log("jsonObj: ", jsonObj);
                console.log("answer:", jsonObj["soap:Envelope"]["soap:Body"]["m:NumberToWordsResponse"]["m:NumberToWordsResult"]);
            }
        }
    );
    
    • 首先,我们生成一个随机数并填充到 jsonData 中。
    • 使用 XMLBuilder 从 jsonData 构建 XML xmlData
    • xmlData 是准备发送到服务器的 SOAP 消息。
    • 在发送之前,使用 XMLValidator.validate() 检查 xmlData 是否符合正确的 XML 格式。
  5. 然后,通过运行模拟,您将看到请求成功的以下屏幕:
    cmt-viewer 截图
    cmt-diagnoser 截图