jQuery SOAP可能的调用没有元素中的前缀但在方法中有前缀

时间:2014-10-23 12:05:43

标签: jquery soap

我需要像这样进行SOAP调用:

<?xml version="1.0" encoding="UTF-8"?>
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:sig="http://anotherNameSpace">
   <soap:Body>
      <a:getCertificate xmlns:a="http://anotherNameSpace">
         <name>John</name>
      </a:getCertificate>
   </soap:Body>
</soap:Envelope>

所以我用jQuery SOAP插件编写了这个javascript代码:

function soapCall(user, pass){
            $.soap({
                url: "myWdslAddress",
                method: "getCertificate",
                data: {
                    name: user
                },
                namespaceQualifier: "tns",
                namespaceURL: "http://anotherNameSpace",
                noPrefix: true,
                enableLogging: true,
                envAttributes: {
                    'xmlns:sig': 'http://anotherNameSpace'
                },
                HTTPHeaders: {
                    'Authorization': 'Basic ' + btoa(user + ':' + pass)
                }
            });
        }

但它不起作用,因为它会产生以下请求:

<?xml version="1.0" encoding="UTF-8"?>
    <soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:sig="http://anotherNameSpace">
   <soap:Body>
       <tns:getCertificate xmlns:tns="http://anotherNameSpace">
          <tns:name>John</tns:name>
      </tns:getCertificate>
    </soap:Body>
</soap:Envelope>

所以我需要从“name”元素中删除“tns”前缀。 我试图删除“namespaceQualifier:”tns“,但它会从getCertificate节点和名称节点中删除。我只需要从”name“节点中删除前缀; getCertificate节点必须带有前缀。< / p>

有可能吗?

提前致谢

1 个答案:

答案 0 :(得分:1)

我找到了以下解决方法,只将名称空间添加到方法而不是其元素。 这是我的肥皂要求:

$.soap({ /
    url: 'http://webservice',
    method: 'method'
    appendMethodToURL: false,
    data: { mydata },

    namespaceQualifier: 'tns',
    namespaceURL: 'urn:my.namespace',
    noPrefix: true,
    elementName: 'tns:method',

    ...
});

重要的是设置noPrefix: true并将名称空间前缀硬编码到与方法相同的elementName