2014-04-01 00:47:41 -06:00

91 lines
2.4 KiB
JavaScript

var AWS = require('../core');
require('../xml/builder');
require('./rest');
/**
* @api private
*/
AWS.ServiceInterface.RestXml = {
buildRequest: function buildRequest(req) {
AWS.ServiceInterface.Rest.buildRequest(req);
AWS.ServiceInterface.RestXml.populateBody(req);
},
extractError: function extractError(resp) {
AWS.ServiceInterface.Rest.extractError(resp);
var data = new AWS.XML.Parser({}).parse(resp.httpResponse.body.toString());
if (data.Errors) data = data.Errors;
if (data.Error) data = data.Error;
if (data.Code) {
resp.error = AWS.util.error(new Error(), {
code: data.Code,
message: data.Message
});
} else {
resp.error = AWS.util.error(new Error(), {
code: resp.httpResponse.statusCode,
message: null
});
}
},
extractData: function extractData(resp) {
AWS.ServiceInterface.Rest.extractData(resp);
var req = resp.request;
var httpResponse = resp.httpResponse;
var operation = req.service.api.operations[req.operation];
var rules = operation.output.members;
var output = operation.output;
var payload = output.payload;
if (payload) {
if (rules[payload].streaming) {
resp.data[payload] = httpResponse.body;
} else {
resp.data[payload] = httpResponse.body.toString();
}
} else if (httpResponse.body.length > 0) {
var parser = new AWS.XML.Parser(operation.output || {});
AWS.util.update(resp.data, parser.parse(httpResponse.body.toString()));
}
},
populateBody: function populateBody(req) {
var input = req.service.api.operations[req.operation].input;
var payload = input.payload;
var rules = {};
var builder = null;
var params = req.params;
if (typeof payload === 'string') {
rules = input.members[payload];
params = params[payload];
if (params === undefined) return;
if (rules.type === 'structure') {
builder = new AWS.XML.Builder(payload, rules.members, req.service.api);
req.httpRequest.body = builder.toXML(params);
} else {
// non-xml paylaod
req.httpRequest.body = params;
}
} else if (payload) {
AWS.util.arrayEach(payload, function (member) {
rules[member] = input.members[member];
});
builder = new AWS.XML.Builder(input.wrapper, rules, req.service.api);
req.httpRequest.body = builder.toXML(params);
}
}
};