我需要像这样进行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>
有可能吗?
提前致谢
答案 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
。