Start line:  
End line:  

Snippet Preview

Snippet HTML Code

Stack Overflow Questions
   * Copyright (c) 2014, Francis Galiegue (
   * This software is dual-licensed under:
   * - the Lesser General Public License (LGPL) version 3.0 or, at your option, any
   *   later version;
   * - the Apache Software License (ASL) version 2.0.
  * The text of both licenses is available under the src/resources/ directory of
  * this project (under the names LGPL-3.0.txt and ASL-2.0.txt respectively).
  * Direct link to the sources:
  * - LGPL 3.0:
  * - ASL 2.0:
 package com.github.fge.jsonschema.examples;

Seventh example: custom URI scheme

link to source code

This demonstrates com.github.fge.jsonschema.main.JsonSchemaFactory's ability to register a custom URI scheme. In this example, the scheme is foobar, and it is simply an alias to fetch a resource from the current package.

Two things are needed:

Once this is done, this scheme, when encountered anywhere in JSON References, will use this downloader, and you are also able to use it when loading schemas using com.github.fge.jsonschema.main.JsonSchemaFactory.getJsonSchema(java.lang.String), which is what this example does.

The schema and files used are the same as for Example2.

 public final class Example7
     public static void main(final String... args)
         throws IOExceptionProcessingException
         final JsonNode good = Utils.loadResource("/fstab-good.json");
         final JsonNode bad = Utils.loadResource("/fstab-bad.json");
         final JsonNode bad2 = Utils.loadResource("/fstab-bad2.json");
         final LoadingConfiguration cfg = LoadingConfiguration.newBuilder()
             .addScheme("foobar", CustomDownloader.getInstance()).freeze();
         final JsonSchemaFactory factory = JsonSchemaFactory.newBuilder()
         final JsonSchema schema
             = factory.getJsonSchema("foobar:/fstab.json#");
         ProcessingReport report;
         report = schema.validate(good);
         report = schema.validate(bad);
         report = schema.validate(bad2);
     private static final class CustomDownloader
         implements URIDownloader
         private static final String PREFIX;
         private static final URIDownloader INSTANCE = new CustomDownloader();
         static {
             final String pkgname = CustomDownloader.class.getPackage()
              = '/' + pkgname.replace(".""/");
        public static URIDownloader getInstance()
            return ;
        public InputStream fetch(final URI source)
            throws IOException
            final String path =  + source.getPath();
            final InputStream ret = getClass().getResourceAsStream(path);
            if (ret == null)
                throw new IOException("resource " + path + " not found");
            return ret;
New to GrepCode? Check out our FAQ X