【问题标题】:Node.js SOAP client parameter formattingNode.js SOAP 客户端参数格式化
【发布时间】:2014-07-09 03:20:45
【问题描述】:

我在使用 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" } }

我一定是忽略了什么,我怀疑当某个好人指出我做错了什么时,我会觉得自己像显而易见的船长。

这是使用其他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 肥皂客户端

非常感谢!

【问题讨论】:

    标签: json node.js soap client


    【解决方案1】:

    为了更好地了解 node-soap 生成了什么 XML,我在 object-to-XML 编码之后向 node_modules/soap/lib/client.js 添加了一个 console.log(message) 语句。然后我开始试验各种 JSON 结构,以凭经验弄清楚它们是如何映射到 XML 结构的。

    我找到了一个 JSON 结构,用于 node-soap 以我的第 3 方所需的命名参数和值格式生成 XML。我完全不知道“$value”这个特殊关键字。看起来这可能已在 2014 年 6 月中旬的 0.4.6 版本中添加。请参阅 the change history

    "params": [
      { 
        "param": {
           "attributes": {
              "name": "myParameterName"
           },
           $value: "myParameterValue"
        } 
      }
    ]
    

    (注意外部数组,它让我可以指定多个“param”条目,这个特定的 3rd-party 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>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-01-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多