Node.js SOAP客户端参数格式化

时间:2014-07-09 03:20:45

标签: json node.js soap client

我无法使用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客户端

非常感谢!

1 个答案:

答案 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>