我在使用 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" } }
我一定是忽略了一些东西,我怀疑当一些好人指出我做错了什么时,我会觉得自己像 Captain Obvious。
以下是使用其他 soap 客户端的有效方法,以及它们如何处理“带值的命名参数”
此方法的 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 版本中。参见 the change history
"params": [
{
"param": {
"attributes": {
"name": "myParameterName"
},
$value: "myParameterValue"
}
}
]
(注意外部数组,它让我可以指定多个“参数”条目,这有时是这个特定的第 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>
关于json - Node.js SOAP 客户端参数格式化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24644871/