2017-05-19 12 views
0

내 응용 프로그램에 Json 스키마를 받고 나중에 일부 JSON 객체가 스키마를 준수하는지 확인해야합니다. 내 문제는, 잘못된 Json-schema를 제공하면 예외가 발생하지 않지만 로그에는 몇 가지 경고 만 표시된다는 것입니다. 그래서 나는 예외를 던지기를 원하거나 어떻게 든 경고를 고려해야한다. 그러나 경고 로그는 나에게 침묵으로 보인다.알 수없는 키워드에 fge json-schema validator가 오류를 발생시키는 방법

나는 자바를 사용하고 라이브러리는 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)); 

답변

0

내가 알 수없는 특성이 제공되는 경우 실패로 검증을 고려해야 할 FGE 검사기에 필요한 오류 임계 값을 변경 할 수 있었다. 다음 코드는 작업을 수행합니다.

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
JSON 스키마 ("스키마의 스키마")의 메타 스키마가 추가 속성을 허용

의 거의 표준 하나, 그래서 FGE 검사기입니다 또한 그렇게함으로써 구현으로 인해이 제한이 변경되는 이유가 없습니다.

메타 스키마를 다운로드하고 "additionalProperties": false으로 변경 한 다음 유효성 검사기를 사용하여이 변경된 메타 스키마를로드하고 스키마를 사용하여 스키마의 유효성을 검사 할 수 있습니다.

draft4 메타 스키마는 여기에 있습니다 : http://json-schema.org/draft-04/schema

+0

좋은 점, 감사합니다. 그러나 나는 실제로 내게 더 어울리는 나의 문제에 대해 다른 접근법을 발견했다. 어쨌든 고마워. – LIvanov