骆驼JSON验证程序对JSON草案07的支持

时间:2020-06-11 16:38:07

标签: json validation apache-camel

我们正在使用Apache Camel Java DSL和json-validator组件来针对json模式验证json请求。当前的骆驼版本是2.22.0,根据骆驼文档,它使用NetworkNT JSON Schema库支持JSON模式v4,v6,v7和v2019-09。但是,当我尝试JSON模式草稿07时,运行测试时出现错误“原因:com.networknt.schema.JsonSchemaException:未知元模式:http://json-schema.org/draft-07/schema#”。

当我恢复为json模式草稿04时,它工作正常。

关于如何使它工作的任何想法?

2 个答案:

答案 0 :(得分:0)

支持v7的骆驼版本为3.4.0

您要查找的文档位于2.x上,在这种情况下,正确地指出仅支持v4:https://camel.apache.org/components/2.x/json-validator-component.html

答案 1 :(得分:0)

默认草稿是第4个草稿,但是您可以通过定义一个bean来覆盖模式验证器(JsonSchemaLoader)。

@Bean(name = "mySchemaLoader")
  public JsonSchemaLoader mySchemaLoader() {
    return (camelContext, schemaStream) -> JsonSchemaFactory.getInstance(SpecVersion.VersionFlag.V7)
        .getSchema(schemaStream);
  }

如果您要覆盖默认配置,只需创建一个Bean,它将返回V7模式验证器

...

   ObjectMapper mapper = new ObjectMapper();
    JsonSchemaFactory validatorFactory =   JsonSchemaFactory.builder(JsonSchemaFactory.getInstance(SpecVersion.VersionFlag.V7)).objectMapper(mapper).build();

....

因此,有了bean,您只需对骆驼说,您将通过查询参数使用该bean

public void configureRemote() throws Exception {

    from("direct:getPrescripciones")
        .recipientList(
            simple"${header.url}?bridgeEndpoint=true"))
        .to("json-validator:deliveryReport.schema.json?schemaLoader=#bean:mySchemaLoader")
        .end();
  }

仅此而已 这是我使用的依赖项

<properties>
    <java.version>1.8</java.version>
    <camel.version>3.4.0</camel.version>
</properties>

<dependencies>
    <dependency>
        <groupId>org.apache.camel.springboot</groupId>
        <artifactId>camel-json-validator-starter</artifactId>
        <version>${camel.version}</version>
    </dependency>

    <dependency>
        <groupId>org.apache.camel</groupId>
        <artifactId>camel-jackson</artifactId>
        <version>${camel.version}</version>
    </dependency>
    <dependency>
        <groupId>org.apache.camel</groupId>
        <artifactId>camel-http</artifactId>
        <version>${camel.version}</version>
    </dependency>
    <dependency>
        <groupId>org.apache.camel</groupId>
        <artifactId>camel-jolt</artifactId>
        <version>${camel.version}</version>
    </dependency>
    <dependency>
        <groupId>org.apache.camel.springboot</groupId>
        <artifactId>camel-servlet-starter</artifactId>
        <version>${camel.version}</version>
    </dependency>
    <dependency>
        <groupId>org.apache.camel.springboot</groupId>
        <artifactId>camel-swagger-java-starter</artifactId>
        <version>${camel.version}</version>
    </dependency>
    <dependency>
        <groupId>org.apache.camel.springboot</groupId>
        <artifactId>camel-google-pubsub-starter</artifactId>
        <version>${camel.version}</version>
    </dependency>
    <dependency>
        <groupId>org.apache.camel</groupId>
        <artifactId>camel-google-pubsub</artifactId>
        <version>${camel.version}</version>
    </dependency>
    <dependency>
        <groupId>org.projectlombok</groupId>
        <artifactId>lombok</artifactId>
        <optional>true</optional>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-test</artifactId>
        <scope>test</scope>
        <exclusions>
            <exclusion>
                <groupId>org.junit.vintage</groupId>
                <artifactId>junit-vintage-engine</artifactId>
            </exclusion>
        </exclusions>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-devtools</artifactId>
        <scope>runtime</scope>
    </dependency>
</dependencies>