使用NodeJS的SOAP包时报"Unmarshalling Error: unexpected element错的问题

node-soap是一个在nodejs下调用webservice的工具包,当前版本是0.15.0,可以直接从NPM中下载,

这个版本会要求按装python,如果觉得太麻烦的话,可以按装他以前的版本,0.13.0


言归正传,我们在调用一些复杂一点的webService时,经常会报一类错误

"Unmarshalling Error: unexpected element (uri:"", local:"FirstChannelNo"). Expected elements are (none)"

错误的大概意思是,解析包时出现误,出现了一个不知道是什么东西的变量FirstChannelNo.

研究我们会发现,会报这类错的变量在WSDL中的描述是

<xs:attribute name="FirstChannelNo" type="xs:anySimpleType"/>

这里的重点是那个attribute,意思是说,FirstChannelNo并不是一个值,而是一个属性.那么好了,我们在用JSON往接口中送参数时,如何才能描述一个节点是属性而不是普通的值呢?

我们可以这么写:

"channelInfo": {
attributes: {
"FirstChannelNo": "71"
}
}

可以看到代码中同样有一个attributes,那么如果那天我们真有一个值的名称就是attributes咋办呢?官方的办法是,通过wsdlOptions来修改这个属性名.

var wsdlOptions = {
  attributesKey: '$attributes'
};

soap.createClient(wsdl, wsdlOptions, function (err, client) {
  client.*method*({
    parentnode: {
      childnode: {
        $attributes: {
          name: 'childsname'
        }
      }
    }
  });
});


版权声明:本文为ugrggame原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。