Start line:  
End line:  

Snippet Preview

Snippet HTML Code

Stack Overflow Questions
  /*
   * Copyright (c) 2012, Francis Galiegue <fgaliegue@gmail.com>
   *
   * 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
  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  * 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 <http://www.gnu.org/licenses/>.
  */
 
 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