rest_xml.js (2371B)
1 var AWS = require('../core'); 2 var util = require('../util'); 3 var Rest = require('./rest'); 4 5 function populateBody(req) { 6 var input = req.service.api.operations[req.operation].input; 7 var builder = new AWS.XML.Builder(); 8 var params = req.params; 9 10 var payload = input.payload; 11 if (payload) { 12 var payloadMember = input.members[payload]; 13 params = params[payload]; 14 if (params === undefined) return; 15 16 if (payloadMember.type === 'structure') { 17 var rootElement = payloadMember.name; 18 req.httpRequest.body = builder.toXML(params, payloadMember, rootElement, true); 19 } else { // non-xml payload 20 req.httpRequest.body = params; 21 } 22 } else { 23 req.httpRequest.body = builder.toXML(params, input, input.name || 24 input.shape || util.string.upperFirst(req.operation) + 'Request'); 25 } 26 } 27 28 function buildRequest(req) { 29 Rest.buildRequest(req); 30 31 // never send body payload on GET/HEAD 32 if (['GET', 'HEAD'].indexOf(req.httpRequest.method) < 0) { 33 populateBody(req); 34 } 35 } 36 37 function extractError(resp) { 38 Rest.extractError(resp); 39 40 var data = new AWS.XML.Parser().parse(resp.httpResponse.body.toString()); 41 if (data.Errors) data = data.Errors; 42 if (data.Error) data = data.Error; 43 if (data.Code) { 44 resp.error = util.error(new Error(), { 45 code: data.Code, 46 message: data.Message 47 }); 48 } else { 49 resp.error = util.error(new Error(), { 50 code: resp.httpResponse.statusCode, 51 message: null 52 }); 53 } 54 } 55 56 function extractData(resp) { 57 Rest.extractData(resp); 58 59 var parser; 60 var req = resp.request; 61 var body = resp.httpResponse.body; 62 var operation = req.service.api.operations[req.operation]; 63 var output = operation.output; 64 65 var payload = output.payload; 66 if (payload) { 67 var payloadMember = output.members[payload]; 68 if (payloadMember.isStreaming) { 69 resp.data[payload] = body; 70 } else if (payloadMember.type === 'structure') { 71 parser = new AWS.XML.Parser(); 72 resp.data[payload] = parser.parse(body.toString(), payloadMember); 73 } else { 74 resp.data[payload] = body.toString(); 75 } 76 } else if (body.length > 0) { 77 parser = new AWS.XML.Parser(); 78 var data = parser.parse(body.toString(), output); 79 util.update(resp.data, data); 80 } 81 } 82 83 module.exports = { 84 buildRequest: buildRequest, 85 extractError: extractError, 86 extractData: extractData 87 };