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.ref;
Special case of a JSON Reference with a JAR URL

These URLs are legal URIs; trouble is, while they are absolute, they are also opaque (meaning their path component does not start with a /, see

This class therefore adds a special case for URI resolution by extracting the "real" path component out of the JAR URL and applying path resolution against that extracted path. While this works, this is a violation of the URI RFC.

final class JarJsonRef
    extends JsonRef
The URL part with the ! included
    private final String jarPrefix;

Everything after the !
    private final URI pathURI;

Build a JSON Reference form a JAR URL

uri the URI
    JarJsonRef(final URI uri)
        final String str = uri.toString();
        final int index = str.indexOf('!');
         = str.substring(0, index + 1);
        final String path = str.substring(index + 1);
         = URI.create(path);

Specialized constructor used when resolving against a relative URI

uri the final URI
jarPrefix the jar prefix
pathURI the path
    private JarJsonRef(final URI urifinal String jarPrefixfinal URI pathURI)
        this. = jarPrefix;
        this. = pathURI;
    public boolean isAbsolute()
        return .isEmpty();
    public JsonRef resolve(final JsonRef other)
        if (other.uri.isAbsolute())
            return other;
        final URI targetPath = .resolve(other.uri);
        final URI targetURI = URI.create( + targetPath.toString());
        return new JarJsonRef(targetURItargetPath);
New to GrepCode? Check out our FAQ X