Java JSON 模式验证相对路径不起作用(找不到 URI)



我正在查看 github 的 2.2.6 版本的验证器代码。我没有从存储库"https://github.com/fge/json-schema-validator.git"更改任何代码

当我针对引用第二个架构文件的 json 架构测试示例 1 时,我无法运行示例 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新手,如果我省略了明显的东西,请道歉谢谢

问题是你加载了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 : "$ref":"Booking.json" 自风格 2 : "$ref":"resource:/booking-schemas/Booking.json"

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

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

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

这对我有用。

最新更新