2015-12-25 3 views
3

У меня проблема с работой моего кода (снова). Печально то, что он работал, но я не знаю, почему это не работает сейчас.Ссылка на схему JSON

Пример кода загрузки схемы:

// ----------------- JSON Schema ----------------- 
jsonSchema = new File("src/main/java/de/project/jsonvalidator/test1/test.json"); 
final URI uri = jsonSchema.toURI(); 
System.out.println("URI = " + uri.toString()); 
final JsonSchemaFactory factory = JsonSchemaFactory.byDefault(); 
final com.github.fge.jsonschema.main.JsonSchema schema = factory.getJsonSchema(uri.toString()); 
// ----------------- JSON Schema ----------------- 


Основной файл для схемы JSon:

{ 
    "$schema": "http://json-schema.org/draft-04/schema#", 
    "description" : "schema validating people and vehicles", 
    "type" : "object", 
    "properties": { 
     "billing_address": { "$ref": "MyBoolean.json#/MyBool" }, 
     "shipping_address": { "$ref": "MyBoolean_1.json#/MyBoolABC" } 
    } 
} 


ссылки на другие файлы схемы не будут решены!

Я следовал инструкциям по ссылке: java json schema validation relative path not working (URI not found)

Имеет кто-нибудь идея, как разрешить ссылки на относительный путь?

@Sabir Khan
Я ничего не изменил в файлах схемы json! Я просто изменил порядок некоторых строк кода. Я не получаю никаких исключений. Он просто не решает ссылки.

До:

ProcessingReport report = null; 
    boolean result = false; 
    File jsonSchema = null; 
    File jsonData = null; 
    try { 
     jsonSchema = new File("./src/main/java/de/project/jsonvalidator/test1/test.json"); 
     final URI uri = jsonSchema.toURI(); 
     final JsonSchemaFactory factory = JsonSchemaFactory.byDefault(); 

     jsonData = new File("./src/main/java/de/project/jsonvalidator/test1/data.json"); 
     JsonNode data = JsonLoader.fromFile(jsonData); 
     final com.github.fge.jsonschema.main.JsonSchema schema = factory.getJsonSchema(uri.toString()); 

     report = schema.validate(data, true); 

     System.out.println("Success = " + report.isSuccess()); 
     Iterator<ProcessingMessage> it = report.iterator(); 
     while(it.hasNext()) 
      System.out.println("msg = " + it.next().getMessage()); 

    } catch (JsonParseException jpex) { 
     System.out.println("Error. Something went wrong trying to parse json data: #<#<" 
       + jsonData 
       + ">#># or json schema: @<@<" 
       + jsonSchema 
       + ">@>@. Are the double quotes included? "+jpex.getMessage()); 
     jpex.printStackTrace(); 

    } catch (ProcessingException pex) { 
     System.out.println("Error. Something went wrong trying to process json data: #<#<" 
       + jsonData 
       + ">#># with json schema: @<@<" 
       + jsonSchema 
       + ">@>@ "+pex.getMessage()); 
     pex.printStackTrace(); 

    } catch (IOException e) { 
     System.out.println("Error. Something went wrong trying to read json data: #<#<" 
       + jsonData 
       + ">#># or json schema: @<@<" 
       + jsonSchema 
       + ">@>@"); 
     e.printStackTrace(); 

    } catch (Exception ex) { 
     ex.printStackTrace(); 
    } 


После:

ProcessingReport report = null; 
    boolean result = false; 
    File jsonSchema = null; 
    File jsonData = null; 
    try { 
     //File jsonSchema = new File("./src/main/java/de/project/jsonvalidator/test/test.json"); 

     // ----------------- JSON Schema ----------------- 
     jsonSchema = new File("src/main/java/de/project/jsonvalidator/test1/test.json"); 
     final URI uri = jsonSchema.toURI(); 
     System.out.println("URI = " + uri.toString()); 
     //JsonNode jnSchema = JsonLoader.fromFile(jsonSchema); 
     final JsonSchemaFactory factory = JsonSchemaFactory.byDefault(); 
     final com.github.fge.jsonschema.main.JsonSchema schema = factory.getJsonSchema(uri.toString()); 
     // ----------------- JSON Schema ----------------- 


     // ----------------- JSON Daten ----------------- 
     jsonData = new File("src/main/java/de/project/jsonvalidator/test1/data.json"); 
     JsonNode data = JsonLoader.fromFile(jsonData); 
     // ----------------- JSON Daten ----------------- 


     // ----------------- JSON Validierung ----------------- 
     //boolean ret = schema.validInstance(jnSchema); 
     report = schema.validate(data, true); 
     // ----------------- JSON Validierung ----------------- 


     // ----------------- JSON Auswertung ----------------- 
     //System.out.println("ret = " + ret); 
     System.out.println("Success = " + report.isSuccess()); 
     Iterator<ProcessingMessage> it = report.iterator(); 
     while(it.hasNext()) 
      System.out.println("msg = " + it.next().getMessage()); 
     // ----------------- JSON Auswertung ----------------- 



    } catch (JsonParseException jpex) { 
     System.out.println("Error. Something went wrong trying to parse json data: #<#<" 
       + jsonData 
       + ">#># or json schema: @<@<" 
       + jsonSchema 
       + ">@>@. Are the double quotes included? "+jpex.getMessage()); 
     jpex.printStackTrace(); 

    } catch (ProcessingException pex) { 
     System.out.println("Error. Something went wrong trying to process json data: #<#<" 
       + jsonData 
       + ">#># with json schema: @<@<" 
       + jsonSchema 
       + ">@>@ "+pex.getMessage()); 
     pex.printStackTrace(); 

    } catch (IOException e) { 
     System.out.println("Error. Something went wrong trying to read json data: #<#<" 
       + jsonData 
       + ">#># or json schema: @<@<" 
       + jsonSchema 
       + ">@>@"); 
     e.printStackTrace(); 

    } catch (Exception ex) { 
     ex.printStackTrace(); 
    } 


MyBoolean.json

{ 
    "MyBool": { 
     "type": "object", 
     "properties": { 
      "value" :{ 
       "type": "string", 
       "enum": [ "true", "false", "file not found" ] 
      } 
     }, 
     "required": ["value"], 
     "additionalProperties": false 
    } 
} 


и вот файл MyBoolean_1.json:

{ 
    "MyBoolABC": { 
     "type": "object", 
     "properties": { 
      "value1" :{ 
       "type": "string", 
       "enum": [ "true", "false", "file not found" ] 
      } 
     }, 
     "required": ["value1"], 
     "additionalProperties": false 
    } 
} 
+0

Какая строка выходит из строя и какое сообщение об ошибке получено? Что работало и что изменилось до того, как оно перестало работать? Измените свой вопрос, чтобы предоставить эти данные. –

ответ

0

Я нашел ответ на мой вопрос.

Я изменил код обратно:


Следующая вещь, которую я узнал, что это:

То, что синтаксический анализатор не выдает никаких сообщений об ошибке, если изменить файл схемы

{ 
    "$schema": "http://json-schema.org/draft-04/schema#", 
    "description" : "schema validating people and vehicles", 
    "type" : "object", 
    "properties": { 
     "billing_address": { "$ref": "MyBoolean.json#/MyBool" } 
    } 
} 

и данные.json все еще остаются такими же !!

Есть ли вероятность, что анализатор сообщает нам, что в файле данных есть дополнительная информация, но она не описана в файле схемы! ??

Смежные вопросы