pda*_*pel 3 client json soap node.js
我无法使用node.js作为客户端的node-soap模块将一个特定的soap参数格式化为第三方SOAP服务.
此方法的client.describe()表示此特定输入应为以下形状:
params: { 'param[]': {} }
Run Code Online (Sandbox Code Playgroud)
我尝试了一堆不同的JSON表示法来尝试使我的数据符合该形状.不起作用的格式示例:
"params": { "param": [ {"myParameterName": "myParameterValue"} ] }
"params": [ "param": { "name": "myParameterName", "_": "myParameterValue"} ]
"params": { "param" : [ {"name": "myParameterName", "_": "myParameterValue"} ] }
"params": { "param[]": {"myParameterName": "myParameterValue" } }
"params": { "param[myParameterName]": {"_": "myParameterValue" } }
Run Code Online (Sandbox Code Playgroud)
我必须忽略一些事情,我怀疑当一个好人指出我做错了什么时,我会觉得像上尉一样明显.
以下是DOES的工作原理,使用其他soap客户端,以及它们如何处理"带有值的命名参数"
此方法的soapUI通过XML成功接受此特定输入,形式为:
<ns:params>
<ns:param name="myParameterName">myParameterValue</ns:param>
</ns:params>
Run Code Online (Sandbox Code Playgroud)
此外,使用PHP,我可以通过创建一个stdClass数组成功地进行调用,如下所示:
$parms = new stdClass;
$parms->param = array(
array(
"name"=>"myParameterName","_"=>"myParameterValue"
)
);
Run Code Online (Sandbox Code Playgroud)
然后最终过世
'params' => $parms
Run Code Online (Sandbox Code Playgroud)
到PHP肥皂客户端
非常感谢!
为了更好地了解node-soap生成的XML,我在对象到XML编码之后向node_modules/soap/lib/client.js添加了一个console.log(message)语句.然后,我开始尝试使用各种JSON结构来根据经验弄清楚它们是如何映射到XML结构的.
我找到了node-soap的JSON结构,以我的第三方所需的命名参数值格式生成XML.我完全没有意识到"$ value"特殊关键字.看起来这可能是从2014年6月中旬的0.4.6版本中添加的.请参阅更改历史记录
"params": [
{
"param": {
"attributes": {
"name": "myParameterName"
},
$value: "myParameterValue"
}
}
]
Run Code Online (Sandbox Code Playgroud)
(注意外部数组,这使我能够指定多个"param"条目,这有时需要这个特定的第三方API)
生成这个XML:
<tns:params>
<tns:param name="myParameterName">myParameterValue</tns:param>
</tns:params>
Run Code Online (Sandbox Code Playgroud)
它与soapUI(我已经知道的工作)中的结构完全匹配:
<ns:params>
<ns:param name="myParameterName">myParameterValue</ns:param>
</ns:params>
Run Code Online (Sandbox Code Playgroud)