Node.js SOAP 客户端参数格式

2024-04-14

我在使用 Node.js 的 Node-soap 模块作为客户端将某个特定的 Soap 参数正确格式化为第 3 方 SOAP 服务时遇到问题。

此方法的 client.describe() 表示此特定输入应采用以下形式:

params: { 'param[]': {} }

我尝试了一堆不同的 JSON 符号来尝试使我的数据适合该形状。 无效的格式示例:

"params": { "param": [ {"myParameterName": "myParameterValue"} ] }
"params": [ "param": { "name": "myParameterName", "_": "myParameterValue"} ]
"params": { "param" : [ {"name": "myParameterName", "_": "myParameterValue"} ] }
"params": { "param[]": {"myParameterName": "myParameterValue" } }
"params": { "param[myParameterName]": {"_": "myParameterValue" } }

我一定是忽略了一些事情,而且我怀疑当一些好人指出我做错了什么时,我会感觉自己像“显而易见的船长”。

这是使用其他肥皂客户端的工作原理,以及它们如何处理“带有值的命名参数”

此方法的soapUI 通过 XML 成功接受以下特定输入:

<ns:params>
    <ns:param name="myParameterName">myParameterValue</ns:param>
</ns:params>

另外,使用 PHP,我可以通过创建数组的 stdClass 来成功进行调用,如下所示:

$parms = new stdClass;
$parms->param = array(
    array(
        "name"=>"myParameterName","_"=>"myParameterValue"
    )
);

然后最终通过

'params' => $parms 

到 PHP Soap 客户端

非常感谢!


为了更好地了解 Node-soap 生成的 XML 内容,我在对象到 XML 编码之后向 node_modules/soap/lib/client.js 添加了一条 console.log(message) 语句。然后,我开始尝试各种 JSON 结构,以凭经验弄清楚它们如何映射到 XML 结构。

我找到了 Node-soap 的 JSON 结构,可以按照我的第 3 方所需的命名参数与值格式生成 XML。我完全不知道“$value”特殊关键字。看起来这可能已添加到 2014 年 6 月中旬的 0.4.6 版本中。请参阅变更历史 https://github.com/vpulim/node-soap/blob/master/History.md

"params": [
  { 
    "param": {
       "attributes": {
          "name": "myParameterName"
       },
       $value: "myParameterValue"
    } 
  }
]

(注意外部数组,它让我可以指定多个“param”条目,这有时是这个特定的第 3 方 API 所需要的)

生成此 XML:

<tns:params>
  <tns:param name="myParameterName">myParameterValue</tns:param>
</tns:params>

它与soapUI(我已经知道它有效)中的结构完美匹配:

<ns:params>
    <ns:param name="myParameterName">myParameterValue</ns:param>
</ns:params>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Node.js SOAP 客户端参数格式 的相关文章

随机推荐

  • 什么 Java 垃圾收集器清理 PermGen?

    垃圾收集者名单 串行GC 并行气相色谱 并行旧GC 浓缩标记扫描GC G1 GC 我知道当您启用 ClassUnloading JVM 选项时 Conc Mark Sweep GC 支持清理 PermGen 其他垃圾收集器是否支持清理 Pe
  • GitLab 管道 Docker 构建卡在 apk 上

    尝试创建一个简单的 GitLab 管道 为 Alpine Linux Openshift CLI 构建 Docker 镜像 这是代码 FROM frolvlad alpine glibc latest MAINTAINER Daniel W
  • 从嵌入的 SVG 设置 XSL FO 背景图像

    我正在创建背景文本withinXSL FO 文档是这样的
  • JQuery Mobile 刷新复选框仅有效一次 - .checkboxradio('refresh') 问题

    我遇到了一个奇怪的问题 我有一个带有复选框列的表格 我正在使用 JQuery Mobile 复选框 我希望单击一行与单击该行中的复选框相关联 JS document on pagecreate function event bindRowC
  • 如何在 Formidable (Node.js) 中取消用户上传?

    我已经研究这个问题两天了 但我被困住了 我正在使用 Node js 和 Express 并且正在尝试实现上传表单 基本上 我希望表单执行以下操作 检查文件的大小 如果太大则取消上传 当我说取消时 我的意思是防止任何进一步的数据写入磁盘并删除
  • Supervisor 3.3 与 Ubuntu 16.04 服务启动失败 [已关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 今天早上 我通过使用升级了我的主管 pip install upgrade supervisor from 3 2 to 3 3 但之后
  • Java中创建静态对象的目的是什么?

    class Demo void show System out println i am in show method of super class class Flavor1Demo An anonymous class with Dem
  • 使 GDI 绘图不可点击

    我有一个带有 GDI 绘图的透明 WinForms 应用程序 我将其用作覆盖层 问题是 每当我单击 GDI 绘图时 焦点就会转到应用程序窗口 我该如何扭转这种情况 您需要使用right颜色如TransparencyKey 一切使得Form
  • 如何在 RubyMine 中运行 Cucumber 场景大纲示例表的单行?

    我正在使用 RubyMine 运行测试 强加给我 我有一些使用场景大纲和示例格式的功能 有没有办法可以只运行示例表中的某一行 Example Examples user row row1 row2 1 2 4 51 51 97 98 98
  • Java Swing:将 JLabel 添加到 JPanel

    我只是想将 JLabel 添加到现有的 JPanel 中 这看起来很简单 我已经查遍了 我认为这是正确的 但标签没有出现在我的面板上 有人看到我缺少什么吗 谢谢 ResultsPanel myPanel new ResultsPanel p
  • 如何检查传递到 EC2 实例的用户数据是否正常工作

    在使用 EC2 命令行 API 创建新的 AWS EC2 实例时 我将一些用户数据传递到新实例 我如何知道该用户数据是否被执行 您可以使用以下步骤进行验证 启动 EC2 实例时使用 SSH Check the log of your use
  • CSS - 页面右侧的图像,文本未环绕在其周围

    这可能是一个简单的问题 但我无法弄清楚 我想使用 CSS 将图像放在页面的右侧 而不是在其周围环绕文本 我想要这样的 img text text text text text text text 如果我在图像上进行 float right
  • 为什么 android-inapp-billing-v3 库需要两次尝试购买?

    我正在尝试使用 android inapp billing v3 库在我的简单应用程序中实现应用内购买 我正在使用这个库 https github com anjlab android inapp billing v3 https gith
  • 根据“几个因素”斜率更改 ggplot 中的线条颜色

    更新 我有以下数据 我想根据 3 个因素 I II III 的斜率在组之间画一条线 set seed 205 dat data frame t rep c I II III each 10 pairs rep 1 10 3 value rn
  • 最快的C++序列化?

    我正在寻找一种非常快速的 C 二进制序列化技术 我只需要序列化对象中包含的数据 没有指针等 我希望它尽可能快 如果它特定于 x86 硬件 这是可以接受的 我熟悉执行此操作的 C 方法 作为测试 我对几种技术进行了基准测试 我发现 C 方法比
  • 前往 source.cloud.google.com 获取

    我有一个托管在 source cloud google com 上的项目 我希望使用go get并使用模块来管理它 当我做go get 我得到以下信息 go get source cloud google com
  • 视图隐藏在 UINavigationBar iOS 7 下面

    早些时候 我的项目使用的是 iOS 6 1 最近我已经切换到 iOS 7 对于我知道的很多更改 我更新了我的代码 但是我观察到了一个奇怪的行为 我在每个屏幕上的视图都隐藏在导航栏下方 重新定位视图解决了 iOS7 的问题 但为旧版 iOS
  • App Engine Python:AttributeError:“模块”对象没有属性“Stock”

    我只是在生产中遇到此错误 在本地主机上它运行良好 Traceback most recent call last File base python runtime python lib versions 1 google appengine
  • 在 JS/jQuery 中绑定方向键

    如何在 Javascript 和 或 jQuery 中将函数绑定到左右箭头键 我查看了 jQuery 的 js hotkey 插件 包装内置绑定函数以添加参数来识别特定键 但它似乎不支持箭头键 document onkeydown func
  • Node.js SOAP 客户端参数格式

    我在使用 Node js 的 Node soap 模块作为客户端将某个特定的 Soap 参数正确格式化为第 3 方 SOAP 服务时遇到问题 此方法的 client describe 表示此特定输入应采用以下形式 params param