Start line:  
End line:  

Snippet Preview

Snippet HTML Code

Stack Overflow Questions
   * Copyright (c) 2012, Francis Galiegue <>
   * This program is free software: you can redistribute it and/or modify
   * it under the terms of the Lesser GNU General Public License as
   * published by the Free Software Foundation, either version 3 of the
   * License, or (at your option) any later version.
   * This program is distributed in the hope that it will be useful,
  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  * Lesser GNU General Public License for more details.
  * You should have received a copy of the GNU General Public License
  * along with this program.  If not, see <>.
 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