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

don*_*nal 2 java validation json github json-schema-validator

我正在从github查看2.2.6版本的验证器代码.我没有更改回购" 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",
Run Code Online (Sandbox Code Playgroud)

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

线程"main"中的异常com.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);
Run Code Online (Sandbox Code Playgroud)

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

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

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

fge*_*fge 6

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

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

final File jsonSchemaFile = new File("main.json");
final URI uri = jsonSchemaFile.toURI();
Run Code Online (Sandbox Code Playgroud)

然后加载架构:

final JsonSchema schema = factory.getJsonSchema(uri.toString());
Run Code Online (Sandbox Code Playgroud)