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
+12 -8

No files matched your search

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