当前位置: 首页 > news >正文

nodejs实现webservice问题总结

库,工具

node-soap
soapui

创建

注意args里参数顺序

const soap = require('soap');
let URL = "你的wsdl路径,可以是url或者本地文件";
// 注意参数顺序!!!!!!!!!
let args = {
    key1: val1,
    key2: val2
};
// promise创建
let client = await soap.createClientAsync(URL);

// callback创建
soap.createClient(url, function(err, client) {
    client.MyFunction(args, function(err, result) {
          console.log(result);
    });
});

个人喜欢promise形式,之后调用其它函数都是可以两种方式实现的,若是异步形式,需要在你调用的函数名后添加 "Async"。

调用

参数数据只有一层没什么特殊,如:

args = {
    key1: val1,
    key2: val2
}

若是参数里又套了一层,node-soap是不会根据wsdl自动生成带有namespace prefix的数据,传到服务器之后会解析xml失败。

如:

let val2: Array<dataType> = [
        {
            key3: val3
        }
    ];
let args = {
    key1: val1,
    key2: val2
}

这个时候就需要在传入数据时做些额外工作,修改为:

let val2: Array<dataType> = [
        {
            key3: val3
        }
    ];
let args = {
    key1: val1,
    key2: {
        dataType: val2
    }
}

上面这种dataType是生成xml时,其类型在xml中有声明;若是没有声明,就又是另一中写法,如:

// dataType或namespace prefix在生成xml未声明
let val2: Array<dataType> = [
        {
            key3: val3
        }
    ];
let args = {
    key1: val1,
    key2: val2
}

需改写为(此处用使用Array<string>是参考soapui生成的namespace prefix,具体其它类型实现应该可通用);

let val2: Array<string> = [
        val3,
        val4
    ];
let args = {
    attributes: {
       'xmlns:arr': 'http://schemas.microsoft.com/2003/10/Serialization/Arrays'
    },
    key1: val1,
    key2: {
        "arr:string": val2
    }
}
https://stackoverflow.com/que...

相关文章:

  • matlab2014在mac Yosemite下出现java空指针情况
  • DECLARE_MESSAGE_MAP 宏
  • Apache发布NetBeans 10.0,增强对JDK 11的支持
  • Shadow DOM 内部构造及如何构建独立组件
  • 打印二叉树某一层次的值(重点)
  • 单例模式中用volatile和synchronized来满足双重检查锁机制
  • getName和getSimpleName方法一般使用
  • 博客迁移:https://blog.llyweb.com
  • 20141102-微信.NET-笔记
  • Java知识体系梳理
  • java 一些容易忽视的小点-数据类型和运算符篇
  • 设计模式--代理(Proxy)模式
  • 系统设计(系列二)--现上问题整理(云崩溃和服务不可用)
  • 医疗行业邮件服务器架设方案
  • Python 代码片段收藏
  • [原]深入对比数据科学工具箱:Python和R 非结构化数据的结构化
  • 【391天】每日项目总结系列128(2018.03.03)
  • ES学习笔记(12)--Symbol
  • MySQL QA
  • Perseus-BERT——业内性能极致优化的BERT训练方案
  • SegmentFault 社区上线小程序开发频道,助力小程序开发者生态
  • Tornado学习笔记(1)
  • 和 || 运算
  • 理解 C# 泛型接口中的协变与逆变(抗变)
  • 如何设计一个微型分布式架构?
  • 使用 QuickBI 搭建酷炫可视化分析
  • 世界上最简单的无等待算法(getAndIncrement)
  • 我感觉这是史上最牛的防sql注入方法类
  • 系统认识JavaScript正则表达式
  • 一道闭包题引发的思考
  • 再谈express与koa的对比
  • #pragma once
  • (Redis使用系列) Springboot 使用redis的List数据结构实现简单的排队功能场景 九
  • (附源码)ssm基于web技术的医务志愿者管理系统 毕业设计 100910
  • (亲测)设​置​m​y​e​c​l​i​p​s​e​打​开​默​认​工​作​空​间...
  • (提供数据集下载)基于大语言模型LangChain与ChatGLM3-6B本地知识库调优:数据集优化、参数调整、Prompt提示词优化实战
  • (原創) 如何使用ISO C++讀寫BMP圖檔? (C/C++) (Image Processing)
  • (轉貼) 蒼井そら挑戰筋肉擂台 (Misc)
  • .net 简单实现MD5
  • .net 桌面开发 运行一阵子就自动关闭_聊城旋转门家用价格大约是多少,全自动旋转门,期待合作...
  • .NET/C# 在 64 位进程中读取 32 位进程重定向后的注册表
  • .NET企业级应用架构设计系列之技术选型
  • @DependsOn:解析 Spring 中的依赖关系之艺术
  • [ 隧道技术 ] 反弹shell的集中常见方式(四)python反弹shell
  • []使用 Tortoise SVN 创建 Externals 外部引用目录
  • [2021 蓝帽杯] One Pointer PHP
  • [Angularjs]asp.net mvc+angularjs+web api单页应用之CRUD操作
  • [BZOJ] 2427: [HAOI2010]软件安装
  • [C#]OpenCvSharp使用帧差法或者三帧差法检测移动物体
  • [CSDN首发]鱿鱼游戏的具体玩法详细介绍
  • [Grafana]ES数据源Alert告警发送
  • [HNOI2006]鬼谷子的钱袋
  • [JMS 3] ActiveMQ实现简单的helloworld
  • [Kubernetes]9. K8s ingress讲解借助ingress配置http,https访问k8s集群应用
  • [leetcode]Clone Graph