From 4c184bed77768d96a9186d94d30b1d69e024e86c Mon Sep 17 00:00:00 2001 From: Patrick Boettcher Date: Wed, 28 Dec 2016 16:45:51 +0100 Subject: [PATCH] validator: add error-messages of sub-schemas in combined-logic-checker --- src/json-validator.cpp | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/src/json-validator.cpp b/src/json-validator.cpp index a816296..4977ee1 100644 --- a/src/json-validator.cpp +++ b/src/json-validator.cpp @@ -370,19 +370,23 @@ void json_validator::validate(json &instance, const json &schema_, const std::st if (combine_logic != none) { std::size_t count = 0; + std::ostringstream sub_schema_err; + for (const auto &s : *combined_schemas) { try { validate(instance, s, name); count++; } catch (std::exception &e) { + sub_schema_err << " one schema for failed because: " << e.what() << "\n"; + if (combine_logic == allOf) - throw std::out_of_range("At least one schema has failed for " + name + " where allOf them were requested."); + throw std::out_of_range("At least one schema has failed for " + name + " where allOf them were requested.\n" + sub_schema_err.str()); } if (combine_logic == oneOf && count > 1) - throw std::out_of_range("More than one schema has succeeded for " + name + " where only oneOf them was requested."); + throw std::out_of_range("More than one schema has succeeded for " + name + " where only oneOf them was requested.\n" + sub_schema_err.str()); } if ((combine_logic == anyOf || combine_logic == oneOf) && count == 0) - throw std::out_of_range("No schema has succeeded for " + name + " but anyOf/oneOf them should have worked."); + throw std::out_of_range("No schema has succeeded for " + name + " but anyOf/oneOf them should have worked.\n" + sub_schema_err.str()); } // check (base) schema