public override SchemaReference ResolveSchemaReference(ResolveSchemaContext context)
        {
            SchemaReference reference = base.ResolveSchemaReference(context);

            if (PreloadedUris.Any(i => i == reference.BaseUri))
            {
                return reference;
            }

            foreach (Uri preloadedUri in PreloadedUris)
            {
                if (preloadedUri.IsBaseOf(reference.BaseUri))
                {
                    Uri relativeUri = preloadedUri.MakeRelativeUri(reference.BaseUri);

                    string uriText = relativeUri.OriginalString;
                    if (reference.SubschemaId != null)
                    {
                        uriText += reference.SubschemaId.OriginalString;
                    }

                    reference.BaseUri = preloadedUri;
                    reference.SubschemaId = new Uri(uriText, UriKind.RelativeOrAbsolute);

                    return reference;
                }
            }

            return reference;
        }
        public override SchemaReference ResolveSchemaReference(ResolveSchemaContext context)
        {
            SchemaReference reference = base.ResolveSchemaReference(context);

            if (PreloadedUris.Any(i => i == reference.BaseUri))
            {
                return(reference);
            }

            foreach (Uri preloadedUri in PreloadedUris)
            {
                if (preloadedUri.IsBaseOf(reference.BaseUri))
                {
                    Uri relativeUri = preloadedUri.MakeRelativeUri(reference.BaseUri);

                    string uriText = relativeUri.OriginalString;
                    if (reference.SubschemaId != null)
                    {
                        uriText += reference.SubschemaId.OriginalString;
                    }

                    reference.BaseUri     = preloadedUri;
                    reference.SubschemaId = new Uri(uriText, UriKind.RelativeOrAbsolute);

                    return(reference);
                }
            }

            return(reference);
        }
Exemplo n.º 3
0
        public override Stream GetSchemaResource(ResolveSchemaContext context, SchemaReference reference)
        {
            var contextFilename = Path.GetFileName(context.ResolvedSchemaId.LocalPath);
            var reducedUri      = new UriBuilder(context.ResolvedSchemaId)
            {
                Fragment = null,
                Path     = context.ResolvedSchemaId.LocalPath.Substring(0, context.ResolvedSchemaId.LocalPath.Length - contextFilename.Length)
            }.Uri;

            if (!_baseUris.Any(b => Uri.Compare(b, reducedUri, UriComponents.Scheme | UriComponents.HostAndPort | UriComponents.Path, UriFormat.UriEscaped, StringComparison.OrdinalIgnoreCase) == 0))
            {
                Debug.WriteLine($"Failed to find matching baseuri for {reducedUri}");
            }
            else if (_schemaCache.TryGetValue(contextFilename, out var schemaData))
            {
                return(new MemoryStream(Encoding.UTF8.GetBytes(schemaData), false));
            }

            foreach (var searchPath in _schemaSearchDir)
            {
                var file = new FileInfo(Path.Combine(searchPath, contextFilename));
                if (!file.Exists)
                {
                    continue;
                }

                return(file.Open(FileMode.Open));
            }

            Debug.WriteLine($"Failed to find schema for {contextFilename}");
            return(null);
        }
        private JSchema ResolvedSchema(Uri schemaId, Uri resolvedSchemaId)
        {
            ResolveSchemaContext context = new ResolveSchemaContext
            {
                ResolverBaseUri  = _baseUri,
                SchemaId         = schemaId,
                ResolvedSchemaId = resolvedSchemaId
            };

            SchemaReference schemaReference = _resolver.ResolveSchemaReference(context);

            if (schemaReference.BaseUri == _baseUri)
            {
                // reference is to inside the current schema
                // use normal schema resolution
                return(null);
            }

            if (Cache.ContainsKey(schemaReference.BaseUri))
            {
                // base URI has already been resolved
                // use previously retrieved schema
                JSchema cachedSchema = Cache[schemaReference.BaseUri];
                return(_resolver.GetSubschema(schemaReference, cachedSchema));
            }

            Stream schemaData = _resolver.GetSchemaResource(context, schemaReference);

            if (schemaData == null)
            {
                // resolver returned no data
                return(null);
            }

            JSchemaReaderSettings settings = new JSchemaReaderSettings
            {
                BaseUri  = schemaReference.BaseUri,
                Resolver = _resolver
            };
            JSchemaReader schemaReader = new JSchemaReader(settings);

            schemaReader.Cache = Cache;

            JSchema rootSchema;

            using (StreamReader streamReader = new StreamReader(schemaData))
                using (JsonTextReader jsonReader = new JsonTextReader(streamReader))
                {
                    rootSchema = schemaReader.ReadRoot(jsonReader, false);
                }

            Cache[schemaReference.BaseUri] = rootSchema;

            // resolve defered schemas after it has been cached to avoid
            // stackoverflow on circular references
            schemaReader.ResolveDeferedSchemas();

            return(_resolver.GetSubschema(schemaReference, rootSchema));
        }
            public override Stream GetSchemaResource(ResolveSchemaContext context, SchemaReference reference)
            {
                if (reference.BaseUri.Host == "localhost")
                {
                    return(File.OpenRead(Path.Combine(baseDir, @"JSON-Schema-Test-Suite", "remotes", reference.BaseUri.LocalPath.Trim('/').Replace('/', '\\'))));
                }

                return(nested.GetSchemaResource(context, reference));
            }
        public override SchemaReference ResolveSchemaReference(ResolveSchemaContext context)
        {
            if (SchemaResolving != null)
            {
                SchemaResolving(this, new SchemaResolvingEventArgs()
                {
                    Context = context
                });
            }

            return(base.ResolveSchemaReference(context));
        }
 public override Stream GetSchemaResource(ResolveSchemaContext context, SchemaReference reference)
 {
     return null;
 }
 public override Stream GetSchemaResource(ResolveSchemaContext context, SchemaReference reference)
 {
     return(null);
 }
Exemplo n.º 9
0
 public override Stream GetSchemaResource(ResolveSchemaContext context, SchemaReference reference)
 {
     return(new FileStream(Path.Combine(_baseDir, Path.GetFileName(reference.BaseUri.ToString())), FileMode.Open));
 }
Exemplo n.º 10
0
 public override Stream GetSchemaResource(ResolveSchemaContext context, SchemaReference reference)
 {
     return(GetStreamFromUrl(reference.BaseUri));
 }