java json架构validation相对路径不起作用(未找到URI)

我正在从github查看2.2.6版本的validation器代码。 我没有更改回购“ https://github.com/fge/json-schema-validator.git ”中的任何代码

当我针对引用第二个模式文件的json模式测试它时,我无法运行示例1(当我使用硬编码的URI时,我可以使它工作)。

我简单地重新命名了“com.github.fge.jsonschema.examples.Example1.java”以使用我的团队json架构和json文件。 我已经构建了项目并将我的json模式文件复制到“json-schema-validator \ bin \ com \ github \ fge \ jsonschema \ examples”(全部在同一个文件夹中,类似于fstab示例)

顶层的一部分附上,

}, "MovingWindow": { "description": "Is this an moving window measure?", "type": "boolean" } }, "minItems": 1, "uniqueItems": true }, "RealTimeProfile": { "$ref": "rtp.json#" } }, "required": [ "MeasureTemplateId", "MeasureInstanceId", 

但我无法获得较低级别的读取,第二个模式文件(“rtp.json”)被识别并正常工作。 我看到以下错误:

线程“main”中的exceptioncom.github.fge.jsonschema.core.exceptions.ProcessingException:fatal:URI“rtp.json#”不是绝对级别:“致命”uri:“rtp.json#”

我的代码片段:

 File jsonFile = new File("CumulativeCountBad.json"); File jsonSchemaFile = new File("main.json"); JsonNode good = JsonLoader.fromFile(jsonFile); JsonNode mainSchema = JsonLoader.fromFile(jsonSchemaFile); final JsonSchemaFactory factory = JsonSchemaFactory.byDefault(); final JsonSchema schema = factory.getJsonSchema(mainSchema); ProcessingReport report; report = schema.validate(good); System.out.println("good: " + report); 

我的问题似乎与下面的问题相似,但是当我将引用设置为:“$ ref”:“rtp.json#”时,我似乎无法运行该东西。

https://github.com/fge/json-schema-validator/issues/94

任何帮助赞赏。 PS – 我是一个java新手,道歉,如果有明显的东西,我有ommited谢谢

问题是您加载JSON然后将其转换为架构。 并且您的架构在“id”中没有绝对URI。 所以,它无法奏效。

您希望使用绝对URI来加载它们。 由于您最初使用的是File (注意,使用Java 7+,您确实希望使用java.nio.file),您可以使用以下命令获取绝对URI:

 final File jsonSchemaFile = new File("main.json"); final URI uri = jsonSchemaFile.toURI(); 

然后加载架构:

 final JsonSchema schema = factory.getJsonSchema(uri.toString());