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

时间:2014-12-15 10:32:02

标签: java json validation 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",




但是我无法获得较低级别的读取,第二个模式文件(" 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);




我的问题似乎与以下问题相似,但是当我将引用设置为以下时,我似乎无法将事情运行起来: " $ ref":" rtp.json#"

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

任何帮助表示赞赏。 PS - 我是一个java新手,如果我有一些明显的东西,我会道歉 感谢

3 个答案:

答案 0 :(得分:6)

问题是您加载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());

答案 1 :(得分:0)

我刚刚更改了我的参考 从 样式 1:"$ref":"Booking.json" 到 样式 2:"$ref":"resource:/booking-schemas/Booking.json"

它对我有用。可以使用 "$ref":"Booking.json" 生成 json 到 java pojo 文件,但是当读取 json 负载时 style1 失败。我只是将其更改为样式 2,它在两种情况下都对我有用。

答案 2 :(得分:0)

使用 "$id": "/", 更新架构 json 文件。 此更改后,架构 json 将具有类似于以下的条目:

{ 
   "$schema": "http://json-schema.org/draft-04/schema",
   "$id": "/",
   "title":"Your title",
   "description": "Your description",
   ...
}

这对我有用。