diff options
author | Alexei Rousskikh <ext-alexei.rousskikh@nokia.com> | 2012-03-26 18:02:22 -0400 |
---|---|---|
committer | Chris Craig <ext-chris.craig@nokia.com> | 2012-03-28 18:35:23 +0200 |
commit | 87e6e777e80bb88775b16d39bf96c11808911639 (patch) | |
tree | 8b8ce790aca11d12a7c28a6952d10bcd7a703c43 | |
parent | cb6e1fd199f4e13487b4065771da783e15d64bf8 (diff) |
improved error handling for schema loading
Change-Id: I6befd1c483ed4af4fdf15d16ee8aecb9511bd1ac
Reviewed-by: Chris Craig <ext-chris.craig@nokia.com>
-rw-r--r-- | src/qtjsonschema/schemavalidator.cpp | 23 |
1 files changed, 21 insertions, 2 deletions
diff --git a/src/qtjsonschema/schemavalidator.cpp b/src/qtjsonschema/schemavalidator.cpp index 09b14e2..a1da1b1 100644 --- a/src/qtjsonschema/schemavalidator.cpp +++ b/src/qtjsonschema/schemavalidator.cpp @@ -349,7 +349,26 @@ QJsonObject SchemaValidator::_loadFromFile(const QString &filename, SchemaNameIn */ QJsonObject SchemaValidator::_loadFromData(const QByteArray & json, const QString & name, SchemaNameInitialization type) { - QJsonDocument doc = QJsonDocument::fromJson(json); + QJsonParseError err; + QJsonDocument doc = QJsonDocument::fromJson(json, &err ); + if (QJsonParseError::NoError != err.error) + { + // calculate line and position from file offset + int nLine = 0, nPos = 1; + if (err.offset > 0) { + QByteArray b = QByteArray::fromRawData(json, err.offset); + nLine = b.count('\n'); + nPos = err.offset - b.lastIndexOf('\n'); + if (nPos > 0) + --nPos; + } + ++nLine; + + QString str; + str = QString::fromLatin1("JSON syntax error %1 in line %2 position %3").arg(err.error).arg(nLine).arg(nPos); + return makeError(SchemaError::InvalidObject, str); + } + QJsonObject schemaObject = doc.object(); //qDebug() << "shemaName " << name << " type= " << type; @@ -357,7 +376,7 @@ QJsonObject SchemaValidator::_loadFromData(const QByteArray & json, const QStrin if (doc.isNull() || schemaObject.isEmpty()) { - return makeError(SchemaError::InvalidObject, QStringLiteral("schema data is invalid")); + return makeError(SchemaError::InvalidObject, QStringLiteral("schema data can not be empty")); } QJsonObject ret; |