Start line:  
End line:  

Snippet Preview

Snippet HTML Code

Stack Overflow Questions
  /*
   * Copyright (c) 2014, Francis Galiegue (fgaliegue@gmail.com)
   *
   * 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 this file and of both licenses is available at the root of this
  * project or, if you have the jar distribution, in directory META-INF/, under
  * the names LGPL-3.0.txt and ASL-2.0.txt respectively.
  *
  * Direct link to the sources:
  *
  * - LGPL 3.0: https://www.gnu.org/licenses/lgpl-3.0.txt
  * - ASL 2.0: http://www.apache.org/licenses/LICENSE-2.0.txt
  */
 
 package com.github.fge.jsonschema.examples;
 
 
 import java.net.URI;

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()
             .setLoadingConfiguration(cfg).freeze();
 
         final JsonSchema schema
             = factory.getJsonSchema("foobar:/fstab.json#");
 
         ProcessingReport report;
 
         report = schema.validate(good);
         ..println(report);
 
         report = schema.validate(bad);
         ..println(report);
 
         report = schema.validate(bad2);
         ..println(report);
     }
 
     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()
                 .getName();
              = '/' + pkgname.replace(".""/");
         }
        public static URIDownloader getInstance()
        {
            return ;
        }
        @Override
        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