如何配置Camel JSON Schema Validator使用JSON Draft 07及解决schemaLoader报错
Camel JSON Schema Validator 切换Draft 07及报错修复方案
错误根因
JsonSchemaException: Validation: null is an invalid segment for URI报错的核心原因是自定义JsonSchemaLoader初始化时未配置schema资源的基准URI,导致schema引用解析阶段出现空URI段。
正确实现步骤
- 第一步:实现支持Draft 07的自定义JsonSchemaLoader
import org.apache.camel.component.jsonvalidator.JsonSchemaLoader; import com.networknt.schema.JsonSchema; import com.networknt.schema.JsonSchemaFactory; import com.networknt.schema.SpecVersion; import com.networknt.schema.SchemaValidatorsConfig; import java.io.InputStream; import java.net.URI; public class Draft07JsonSchemaLoader implements JsonSchemaLoader { @Override public JsonSchema loadSchema(InputStream inputStream, String resourceUri, SchemaValidatorsConfig config) throws Exception { // 指定Draft 07版本的schema工厂 JsonSchemaFactory factory = JsonSchemaFactory.getInstance(SpecVersion.VersionFlag.V7); // 显式设置基准URI,避免空段错误 URI baseUri = URI.create(resourceUri.startsWith("classpath:") ? resourceUri.replace("classpath:", "resource:classpath/") : resourceUri); return factory.getSchema(baseUri, inputStream, config); } }
- 第二步:注册自定义Loader到Camel上下文
SpringBoot环境直接将Loader注册为Bean即可,Camel会自动扫描注入:
@Bean public JsonSchemaLoader draft07JsonSchemaLoader() { return new Draft07JsonSchemaLoader(); }
纯Camel环境手动绑定到组件:
JsonValidatorComponent validatorComponent = context.getComponent("json-validator", JsonValidatorComponent.class); validatorComponent.setSchemaLoader(new Draft07JsonSchemaLoader());
- 第三步:路由中正常使用JSON校验组件即可
from("direct:validateJson") .to("json-validator:schemas/your-schema.json") .to("log:validateSuccess");
注意事项
- 不要修改
JsonSchemaFactory默认的URI解析逻辑,否则会导致$ref引用解析失效 - 自定义Loader中必须传入
resourceUri对应的基准URI,不能仅传入InputStream加载schema,否则会触发空URI段报错
内容的提问来源于stack exchange,提问作者Midovsky
相关产品推荐
相关产品推荐

