代码之家  ›  专栏  ›  技术社区  ›  Stealth Rabbi

使用来自融合架构注册表的架构在本地验证架构

  •  0
  • Stealth Rabbi  · 技术社区  · 5 年前

    以前,我用 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()时,我得到了该模式的“无效模式”异常。

    0 回复  |  直到 5 年前