diff --git a/lib/client.js b/lib/client.js index 129dce7e4..38432605d 100644 --- a/lib/client.js +++ b/lib/client.js @@ -120,7 +120,8 @@ Client.prototype._invoke = function(method, arguments, location, callback) { message = arguments; } else { - assert.ok(!style || style == 'document', 'invalid message definition for rpc style binding'); + //Some APIs have no part definitions in AMC WSDL + assert.ok(!style || style == 'document' || !input.parts, 'invalid message definition for rpc style binding'); message = self.wsdl.objectToDocumentXML(input.$name, arguments, input.targetNSAlias, input.targetNamespace); } xml = "'].join('')); for (var key in params) { if (key != nsAttrName) { + var value = params[key]; - parts.push(['<',key,'>'].join('')); - parts.push((typeof value==='object')?this.objectToXML(value):xmlEscape(value)); - parts.push([''].join('')); + if(Array.isArray(value)){ + parts.push(['<',key,' arrayType="item[]"','>'].join('')); + for (var i = 0; i < value.length; i++) { + if(Array.isArray(value[i])){ + parts.push(''); + }else{ + parts.push(''); + } + parts.push((typeof value==='object')?this.objectToXML(value[i]):xmlEscape(value)); + parts.push(''); + }; + parts.push([''].join('')); + }else{ + parts.push(['<',key,'>'].join('')); + parts.push((typeof value==='object')?this.objectToXML(value):xmlEscape(value)); + parts.push([''].join('')); + } + } } parts.push([''].join('')); @@ -844,27 +863,38 @@ WSDL.prototype.objectToRpcXML = function(name, params, namespace, xmlns) { return parts.join(''); } +//Code change for array elements handling WSDL.prototype.objectToXML = function(obj, name, namespace, xmlns) { + var self = this, parts = [], xmlnsAttrib = false ? ' xmlns:'+namespace+'="'+xmlns+'"'+' xmlns="'+xmlns+'"' : '', ns = namespace ? namespace + ':' : ''; - + if (Array.isArray(obj)) { for (var i=0, item; item=obj[i]; i++) { - if (i > 0) { - parts.push([''].join('')); - parts.push(['<',ns,name,xmlnsAttrib,'>'].join('')); - } - parts.push(self.objectToXML(item, name)); + parts.push(''); + parts.push(self.objectToXML(item)); + parts.push(''); } } - else if (typeof obj === 'object') { + else + if (typeof obj === 'object') { for (var name in obj) { var child = obj[name]; - parts.push(['<',ns,name,xmlnsAttrib,'>'].join('')); - parts.push(self.objectToXML(child, name)); - parts.push([''].join('')); + + if(Array.isArray(child)){ + name ? parts.push('<'+name+' arrayType="item[]">'): parts.push(''); + parts.push(self.objectToXML(child)); + name ? parts.push(''): parts.push(''); + + }else{ + parts.push(['<',ns,name,xmlnsAttrib,'>'].join('')); + parts.push(self.objectToXML(child)); + parts.push([''].join('')); + } + + } } else if (obj) { diff --git a/package.json b/package.json index 27129aa6f..4d879ab86 100644 --- a/package.json +++ b/package.json @@ -5,7 +5,7 @@ "engines": { "node": ">=0.8.0" }, "author": "Vinay Pulim ", "dependencies": { - "node-expat": ">=1.6.1", + "node-expat": "~1.6.1", "request": ">=2.9.0" }, "repository" : {