以前,我用
SchemaLoader
加载我在本地拥有的json模式文件,并根据它们验证json对象。我的一些模式具有对其他本地文件的引用。
我现在正在迁移到融合模式注册表,我已经在注册表中注册了我的模式。使用
io.confluent.kafka.schemaregistry.client.CachedSchemaRegistryClient
,我能够查询特定主题的最新模式元数据,并获取模式iteslf、引用等。
然而,我不清楚如何使用
org.everit.json.schema.loader.SchemaLoader
(或任何可以验证消息的东西)加载模式文本并准备好模式。当我运行这段代码时,最后一行出现异常,因为它不理解
#ref
在顶层架构中。来自注册表的架构具有
references
填充,但我不确定如何将它们插入SchemaLoader。
java.net.MalformedURLException: no protocol: RefSchema1.schema.json
CachedSchemaRegistryClient registryClient = new CachedSchemaRegistryClient(schemaRegistryUrl, 10);
System.out.println("Schema mode: " + registryClient.getMode());
var schemaMetaData = registryClient.getLatestSchemaMetadata(SCHEMA_SUBJECT);
System.out.println("analysis output schema ID: " + schemaMetaData.getId());
System.out.println("analysis output schema Version: " + schemaMetaData.getVersion());
System.out.println("analysis output schema: " + schemaMetaData.getSchema());
System.out.println("analysis output schema type: " + schemaMetaData.getSchemaType());
System.out.println("analysis output schema refs: " + schemaMetaData.getReferences());
var schemaObj = new JSONObject(schemaMetaData.getSchema());
Schema schema = SchemaLoader.load(schemaObj);
另一件奇怪的事情是,当我使用模式meata数据中的id调用registerClient.getSchemaById()时,我得到了该模式的“无效模式”异常。