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

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肥皂客户端

非常感谢!

pda*_*pel 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版本中添加的.请参阅更改历史记录

"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)