Gracefully handle invalid dateTime param values

This commit is contained in:
Zaid Abdulla committed 2017-04-12 11:03:28 -07:00
1 parent dc5c12c8ce
commit 0d9ca3486b
3 files changed
+11 -7

No files matched your search

+1 -1
View File
@@ -407,7 +407,7 @@ saveDevice = (deviceId, deviceData, isNew, callback) ->
switch attrName
when 'value'
if not diff[1] or diff[2].value[1][0] != diff[1].value?[1][0]
if diff[2].value[1][1] == 'xsd:dateTime'
if diff[2].value[1][1] == 'xsd:dateTime' and Number.isInteger(diff[2].value[1][0])
update['$set'][path.concat('_value').join('.')] = new Date(diff[2].value[1][0])
else
update['$set'][path.concat('_value').join('.')] = diff[2].value[1][0]
+7 -6
View File
@@ -49,12 +49,13 @@ function sanitizeParameterValue(parameterValue) {
break;
case 'xsd:dateTime':
if (typeof parameterValue[0] !== 'number') {
if (parameterValue[0].getTime() != null)
parameterValue[0] = parameterValue[0].getTime();
else if (isNaN(parameterValue[0]))
parameterValue[0] = Date.parse(parameterValue[0]);
else
parameterValue[0] = +parameterValue[0];
let v = +parameterValue[0];
if (isNaN(v)) {
v = Date.parse(parameterValue[0]);
if (isNaN(v))
v = '' + parameterValue[0];
}
parameterValue[0] = v;
}
break;
default:
+3
View File
@@ -210,6 +210,9 @@ function SetParameterValues(xml, methodRequest) {
for (const p of methodRequest.parameterList) {
const pvs = paramList.node("ParameterValueStruct");
pvs.node("Name").text(p[0]);
if (p[2] === 'xsd:dateTime' && Number.isInteger(p[1]))
pvs.node("Value").attr({"xsi:type": p[2]}).text((new Date(p[1])).toISOString());
else
pvs.node("Value").attr({"xsi:type": p[2]}).text(p[1]);
}