如何使用node-soap强制显式命名空间使用请求

时间:2015-05-04 21:00:58

标签: javascript node.js soap

我正在尝试使用soap节点模块进行SOAP调用。我遇到的问题是我正在联系的服务需要明确的命名空间使用。以下是我使用该模块的方法:

var soap = require('soap')

soap.createClient('./SessionService.wsdl', function (err, sessionClient) {
   sessionClient.LogIn({
      'Input': {
         'Username': userName,
         'Password': password
      }
   }, function (err, result) {
      // intentionally left blank
   });
});

上面的代码生成以下SOAP信封。请注意Input,Username和Password元素如何不以命名空间为前缀。

<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:tns="http://REDACTED/v2" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd" xmlns:msc="http://schemas.microsoft.com/ws/2005/12/wsdl/contract" xmlns:q1="http://REDACTED/Service" xmlns:q2="http://REDACTED/Service" xmlns:q3="http://REDACTED/Service" xmlns:q4="http://REDACTED/Service">
   <soap:Body>
      <LogIn xmlns="http://REDACTED/v2">
         <Input>
            <Username>USERNAME</Username>
            <Password>PASSWORD</Password>
         </Input>
      </LogIn>
   </soap:Body>
</soap:Envelope>

这就是我所期待的:

<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:tns="http://REDACTED/v2" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd" xmlns:msc="http://schemas.microsoft.com/ws/2005/12/wsdl/contract" xmlns:q1="http://REDACTED/Service" xmlns:q2="http://REDACTED/Service" xmlns:q3="http://REDACTED/Service" xmlns:q4="http://REDACTED/Service">
   <soap:Body>
      <tns:LogIn xmlns="http://REDACTED/v2">
         <tns:Input>
            <q1:Username>USERNAME</q1:Username>
            <q1:Password>PASSWORD</q1:Password>
         </tns:Input>
      </tns:LogIn>
   </soap:Body>
</soap:Envelope>

是否有一些未记录的选项可用于生成正确的输出?如果我将命名空间放在JavaScript对象中,我可以获得正确的命名空间输入:

var soap = require('soap')

soap.createClient('./SessionService.wsdl', function (err, sessionClient) {
    sessionClient.LogIn({
        'tns:Input': {
            'q1:Username': userName,
            'q1:Password': password
        }
    }, function (err, result) {

    });
});

0 个答案:

没有答案