用盡了最後一天的感觸,並希望得到任何幫助!將屬性添加到node.js中的SOAP消息中(node-soap)
我正在構建一個消耗第三方SOAP Web服務的應用程序。這是基於node.js並使用node-soap。不幸的是,WSDL文件有點壞,我需要按照自己的方式工作。
這是我使用的代碼:
var url = 'http://domainexample.com/ws/connectionService.cfc?wsdl';
var session = 'super secret string'
var args = { connectionID: session }
soap.createClient(url, function (err, client) {
client.connectionService_wrapService['connectionservice.cfc'].isConnected(args, function (err, result) {
console.log(result);
});
});
這是我的錯誤。大多數其他方法做工精細:
org.xml.sax.SAXException:反序列化參數\ '的ConnectionId \':無法爲類型{ http://www.w3.org/2001/XMLSchema} anyType的'找到解串器
這是消息由該方法生成的:
<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:impl="http://rpc.xml.cfml/
ws/ConnectionService.cfc" xmlns:intf="http://rpc.xml.cfml/ws/ConnectionService.cfc">
<soap:Body>
<impl:isConnected>
<connectionID>super secret string</connectionID>
</impl:isConnected>
</soap:Body>
</soap:Envelope>
我發現,WSDL文件不具有對於一些方法(如這一個)所述的ConnectionId參數定義的適當的類型屬性。它應該是xsd:string,這就是我稱之爲工作的方法。
後一些與SOAP UI玩弄我發現添加一種類型的屬性(的xsi:type = XSD:串)到的ConnectionId一部分,並添加一個模式(的xmlns:XSD =「HTTP://www.w3 .org/2001/XMLSchema「)修復它。這是我需要生成XML:
<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:impl="http://rpc.xml.cfml/
ws/ConnectionService.cfc" xmlns:intf="http://rpc.xml.cfml/ws/ConnectionService.cfc">
<soap:Body>
<impl:isConnected>
<connectionID xsi:type="xsd:string">auth-string-here</connectionID>
</impl:isConnected>
</soap:Body>
</soap:Envelope>
但我想不出我的生活中,我如何通過節點肥皂做到這一點。我嘗試使用屬性鍵添加一個類型,但它似乎只有在參數中有父節點和子節點時才起作用。
所以,如果我傳下來:
var args = {
test: {
connectionID:
{
attributes: {
'xsi:type': 'xsd:string'
},
$value: session
}
}
};
我得到如下:
<impl:isConnected>
<test>
<connectionID xsi:type="xsd:string">super secret string</connectionID>
</test>
</impl:isConnected>
但我只需要一個級別,這樣的:
var args = {
connectionID:
{
attributes: {
'xsi:type': 'xsd:string'
},
$value: session
}
};
所以我得到這個:
<impl:isConnected>
<connectionID xsi:type="xsd:string">super secret string</connectionID>
</impl:isConnected>
但這似乎並沒有發生。實際上,當我將它保存到單個節點時,它根本不會添加類型屬性。我還需要弄清楚在調用中添加額外模式的方法。我通過在soap-node核心代碼中手動添加它來解決這個問題,但那根本不是乾淨的(儘管如此我仍然可以)。
任何想法?我對SOAP相當陌生,目前我沒有太多運氣。
謝謝!
我有同樣的問題,你如何修復它 –