function readData() {
		var oMetadataPromise = new Promise(function (fnResolve, fnReject) {
				var sResourcePath = sap.ui.require.toUrl(sNamespace + "/localService/metadata.xml"),
					oRequest = new XMLHttpRequest();

				oRequest.onload = function () {
					// 404 is not an error for XMLHttpRequest so we need to handle it here
					if (oRequest.status === 404) {
						var sError = "resource " + sResourcePath + " not found";

						Log.error(sError, sLogComponent);
						fnReject(new Error(sError, sLogComponent));
					}
					sMetadata = this.responseText;
					fnResolve();
				};
				oRequest.onerror = function () {
					var sError = "error loading resource '" + sResourcePath + "'";

					Log.error(sError, sLogComponent);
					fnReject(new Error(sError, sLogComponent));
				};
				oRequest.open("GET", sResourcePath);
				oRequest.send();
			}),
			oMockDataPromise = new Promise(function (fnResolve, fnReject) {
				var sResourcePath
						= sap.ui.require.toUrl(sNamespace + "/localService/mockdata/people.json"),
					oMockDataModel = new JSONModel(sResourcePath);

				oMockDataModel.attachRequestCompleted(function (oEvent) {
					// 404 is not an error for JSONModel so we need to handle it here
					if (oEvent.getParameter("errorobject")
						&& oEvent.getParameter("errorobject").statusCode === 404) {
						var sError = "resource '" + sResourcePath + "' not found";

						Log.error(sError, sLogComponent);
						fnReject(new Error(sError, sLogComponent));
					}
					aUsers = this.getData().value;
					fnResolve();
				});

				oMockDataModel.attachRequestFailed(function () {
					var sError = "error loading resource '" + sResourcePath + "'";

					Log.error(sError, sLogComponent);
					fnReject(new Error(sError, sLogComponent));
				});
			});

		return Promise.all([oMetadataPromise, oMockDataPromise]);
	}
Reads and caches the fake service metadata and data from their
respective files.
@returns{Promise} a promise that is resolved when the data is loaded