2017-05-19 1 views
0

Ich möchte, dass meine Anwendung ein Json-Schema erhält und später überprüft, ob einige JSON-Objekte mit dem Schema übereinstimmen. Mein Problem ist, dass ich, wenn ich ein falsches JSON-Schema zur Verfügung stelle, keine Ausnahme, sondern nur eine Warnung in den Protokollen bekomme. Also möchte ich entweder mit einer Ausnahme geworfen werden, oder irgendwie die Warnungen in Betracht ziehen. Die Warnmeldungen scheinen mir jedoch ziemlich still zu sein.Wie erzwinge ich fge Json-Schema-Validator, um einen Fehler auf unbekannte Schlüsselwörter zu werfen?

Ich bin mit Java und der Bibliothek ist das ziemlich Standard eines für json-schema

String json = "{\"a\":\"b\"}; 
JsonNode schema = new ObjectMapper().readTree(json); 
JsonSchemaFactory.byDefault().getSyntaxValidator(); 

// this returns true but I want it to return false, since "a" is not a valid keyword 
validator.schemaIsValid(schema); 

// this returns a waning --> the following keywords are unknown and will be ignored: [a] 
System.out.println(validator.validateSchema(schema)); 

Antwort

0

ich in der Lage war für die FGE Validator benötigt, um die Fehlerschwelle zu ändern, um die Validierung als nicht erfolgreich, wenn unbekannte Eigenschaften versehen sind, zu berücksichtigen. Der folgende Code macht die Arbeit

void validateSchema(JsonNode schemaNode) throws JsonProcessingException { 

    SyntaxValidator validator = JsonSchemaFactory.byDefault().getSyntaxValidator(); 

    ProcessingReport report = new ListProcessingReport(null, LogLevel.INFO); 
    ValueHolder<SchemaTree> holder = ValueHolder.<SchemaTree>hold("schema", 
     new CanonicalSchemaTree(SchemaKey.anonymousKey(), schemaNode)); 

    Processor<ValueHolder<SchemaTree>, ValueHolder<SchemaTree>> processor = 
    validator.getProcessor(); 
    report = ProcessingResult.uncheckedResult(processor, report, holder).getReport(); 

    if (!report.isSuccess()) { 
    IllegalArgumentException ex = new IllegalArgumentException(); 

    for (ProcessingMessage processingMessage : report) { 
     ex.addSuppressed(processingMessage.asException()); 
    } 

    throw ex; 
    } 
} 
2

Das Meta-Schema von JSON-Schema ("das Schema von Schemata") zusätzliche Eigenschaften ermöglicht, so dass der fge Validator tut auch, und es gibt keinen Grund, warum die Implementierung diese Beschränkung ändern würde.

Eine Sache, die Sie tun können, ist das Meta-Schema herunterzuladen, ändern Sie es zu "additionalProperties": false, dann laden Sie dieses geänderte Meta-Schema mit dem Validator und validieren Sie Ihr eigenes Schema damit.

Das draft4 Meta-Schema ist hier: http://json-schema.org/draft-04/schema

+0

Guter Punkt, danke. Allerdings habe ich einen anderen Ansatz für mein Problem gefunden, der mir eigentlich besser passt. Danke trotzdem. – LIvanov

Verwandte Themen