我无法使用node.js作为客户端的node-soap模块将一个特定的soap参数格式化为第三方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" } }
我必须忽略一些事情,我怀疑当一个好人指出我做错了什么时,我会觉得像上尉一样明显。
以下是DOES的工作原理,使用其他soap客户端,以及它们如何使用值&#34处理" named参数;
此方法的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客户端
非常感谢!
答案 0 :(得分:8)
为了更好地了解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版本中添加的。请参阅the change history
"params": [
{
"param": {
"attributes": {
"name": "myParameterName"
},
$value: "myParameterValue"
}
}
]
(注意外部数组,这使我能够指定多个“param”条目,这有时需要这个特定的第三方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>