summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAlexei Rousskikh <ext-alexei.rousskikh@nokia.com>2012-03-26 18:02:22 -0400
committerChris Craig <ext-chris.craig@nokia.com>2012-03-28 18:35:23 +0200
commit87e6e777e80bb88775b16d39bf96c11808911639 (patch)
tree8b8ce790aca11d12a7c28a6952d10bcd7a703c43
parentcb6e1fd199f4e13487b4065771da783e15d64bf8 (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.cpp23
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;