public void GeoJson()
        {
            JSchemaPreloadedResolver resolver = new JSchemaPreloadedResolver();

            resolver.Add(OpenSchemaFile(@"resources\schemas\geojson\crs.json", resolver), new Uri("http://json-schema.org/geojson/crs.json#"));
            resolver.Add(OpenSchemaFile(@"resources\schemas\geojson\bbox.json", resolver), new Uri("http://json-schema.org/geojson/bbox.json#"));
            resolver.Add(OpenSchemaFile(@"resources\schemas\geojson\geometry.json", resolver), new Uri("http://json-schema.org/geojson/geometry.json#"));

            JSchema schema = OpenSchemaFile(@"resources\schemas\geojson\geojson.json", resolver);

            JObject o = JObject.Parse(@"{
              ""type"": ""Feature"",
              ""geometry"": {
                ""type"": ""Point"",
                ""coordinates"": [125.6, 10.1]
              },
              ""properties"": {
                ""name"": ""Dinagat Islands""
              }
            }");

            bool isValid = o.IsValid(schema);

            Assert.IsTrue(isValid);
        }
Пример #2
0
 private static void getResolvers(ref JSchemaPreloadedResolver resolver, string path)
 {
     #region Data
     resolver.Add(new Uri("dataJsonAPI.json", UriKind.RelativeOrAbsolute), new FileStream(path + @"Data/dataJsonAPI.json", FileMode.Open, FileAccess.Read));
     #endregion
     #region RegexPatterns
     resolver.Add(new Uri("clientIdRegex.json", UriKind.RelativeOrAbsolute), new FileStream(path + @"RegexPatterns/clientIdRegex.json", FileMode.Open, FileAccess.Read));
     #endregion
 }
            /// <summary>
            /// Initializes a new instance.
            /// </summary>
            /// <param name="baseDir"></param>
            public JSchemaRemoteResolver(string baseDir)
            {
                this.baseDir = baseDir ?? throw new ArgumentNullException(nameof(baseDir));

                nested = new JSchemaPreloadedResolver();
                nested.Add(new Uri("http://json-schema.org/draft-03/schema"), File.ReadAllText(Path.Combine(baseDir, @"schema-draft-03.json")));
                nested.Add(new Uri("http://json-schema.org/draft-04/schema"), File.ReadAllText(Path.Combine(baseDir, @"schema-draft-04.json")));
                nested.Add(new Uri("http://json-schema.org/draft-06/schema"), File.ReadAllText(Path.Combine(baseDir, @"schema-draft-06.json")));
                nested.Add(new Uri("http://json-schema.org/draft-07/schema"), File.ReadAllText(Path.Combine(baseDir, @"schema-draft-07.json")));
            }
Пример #4
0
 static JsonStoreBase()
 {
     // preload schemas
     PreloadedResolver = new JSchemaPreloadedResolver();
     PreloadedResolver.Add(EnvelopeSchemaUri, EnvelopeSchemaString);
     PreloadedResolver.Add(MessageSchemaUri, MessageSchemaString);
     PreloadedResolver.Add(MetadataSchemaUri, MetadataSchemaString);
     PreloadedResolver.Add(CatalogSchemaUri, CatalogSchemaString);
     PreloadedResolver.Add(DataSchemaUri, DataSchemaString);
 }
        private static JSchema LoadSchema(string name, IEnumerable <JSchema> toResolve = null)
        {
            var resolver = new JSchemaPreloadedResolver();

            if (toResolve != null)
            {
                foreach (var schema in toResolve)
                {
                    resolver.Add(schema.Id, schema.ToString());
                }
            }
            string uri = SchemaDirectory + name + ".schema.json";

            try {
                using (var fileReader = File.OpenText(uri)) {
                    using (var jsonReader = new JsonTextReader(fileReader)) {
                        return(JSchema.Load(jsonReader, resolver));
                    }
                }
            } catch (IOException ex) {
                logger.Error(String.Format(name.ToUpper() + " schema [" + ex.GetType().Name + "]: " + ex.Message));
            } catch (Exception ex) {
                logger.Error(String.Format(name.ToUpper() + " schema [" + ex.GetType().Name + "]: " + ex.Message));
            }
            return(null);
        }
        public void Reference_UnusedInnerSchemaOfExternalSchema()
        {
            JSchema baseSchema = JSchema.Parse(@"{
  ""definitions"": {
    ""unused"": {
      ""not"": {
        ""$ref"": ""#/definitions/used_by_unused""
      }
    },
    ""used_by_unused"": {
      ""title"": ""used by unused""
    }
  }
}");

            JSchemaPreloadedResolver resolver = new JSchemaPreloadedResolver();

            resolver.Add(baseSchema, new Uri("http://localhost/base"));

            string json = @"{
  ""not"": {
    ""$ref"": ""http://localhost/base#/definitions/unused""
  }
}";

            JSchemaReader schemaReader = new JSchemaReader(resolver);
            JSchema       refSchema    = schemaReader.ReadRoot(new JsonTextReader(new StringReader(json)));

            var unused       = (JSchema)baseSchema.ExtensionData["definitions"]["unused"];
            var usedByUnused = (JSchema)baseSchema.ExtensionData["definitions"]["used_by_unused"];

            Assert.AreEqual(usedByUnused, unused.Not);

            Assert.AreEqual(unused, refSchema.Not);
        }
Пример #7
0
        public static async Task ValidateSwaggerJson()
        {
            // Arrange
            var httpClient = HttpClientUtils.GetHttpClient(HttpClientUtils.BaseAddress);

            // Act
            var response = await httpClient.GetAsync("swagger/docs/v1");

            // Assert
            await response.ValidateSuccessAsync();

            var swaggerJson = await response.Content.ReadAsStringAsync();

            var resolver = new JSchemaPreloadedResolver();

            resolver.Add(new Uri("http://json-schema.org/draft-04/schema"), File.ReadAllText(@"schema-draft-v4.json"));

            var swaggerSchema = File.ReadAllText(@"swagger-2.0-schema.json");
            var schema        = JSchema.Parse(swaggerSchema, resolver);

            var            swaggerJObject = JObject.Parse(swaggerJson);
            IList <string> messages;
            var            isValid = swaggerJObject.IsValid(schema, out messages);

            isValid.Should().BeTrue();
        }
        public void Test()
        {
            string referencedSchemaJson = @"{
    ""definitions"": {},
    ""address"": {
        ""type"": ""object"",
        ""properties"": {
        ""street_address"": { ""type"": ""string"" },
        ""city"": { ""type"": ""string"" },
        ""state"": { ""type"": ""string"" }
    },
    ""required"": [""street_address"", ""city"", ""state""]
    }
}";

            JSchemaPreloadedResolver resolver = new JSchemaPreloadedResolver();

            resolver.Add(new Uri("schema.json", UriKind.RelativeOrAbsolute), referencedSchemaJson);
            JSchema sampleSchema = JSchema.Parse(@"{
    'type': 'object',
    'allOf': [
        { '$ref': 'schema.json#/address' }
    ]
}", resolver);
        }
        public void Test()
        {
            string referencedSchemaJson = @"{
    ""definitions"": {},
    ""address"": {
        ""type"": ""object"",
        ""properties"": {
        ""street_address"": { ""type"": ""string"" },
        ""city"": { ""type"": ""string"" },
        ""state"": { ""type"": ""string"" }
    },
    ""required"": [""street_address"", ""city"", ""state""]
    }
}";

            JSchemaPreloadedResolver resolver = new JSchemaPreloadedResolver();

            resolver.Add(new Uri("schema.json", UriKind.RelativeOrAbsolute), referencedSchemaJson);
            JSchema sampleSchema = JSchema.Parse(@"{
    'type': 'object',
    'allOf': [
        { '$ref': 'schema.json#/address' }
    ]
}", resolver);
        }
        public void RootReferenceToNestedSchemaWithIdInResolvedSchema_Root()
        {
            JSchema nested = new JSchema();

            nested.Id = new Uri("nested.json", UriKind.RelativeOrAbsolute);

            JSchema root = new JSchema
            {
                Id            = new Uri("http://test.test"),
                ExtensionData =
                {
                    { "nested", nested }
                }
            };

            string json = @"{""$ref"":""http://test.test/nested.json""}";

            JSchemaPreloadedResolver resolver = new JSchemaPreloadedResolver();

            resolver.Add(root);

            JSchemaReader schemaReader = new JSchemaReader(resolver);
            JSchema       schema       = schemaReader.ReadRoot(new JsonTextReader(new StringReader(json)));

            Assert.AreEqual(new Uri("nested.json", UriKind.RelativeOrAbsolute), schema.Id);

            Assert.AreEqual(nested, schema);
        }
Пример #11
0
        public async Task It_generates_valid_swagger_2_0_json_for_the_northwind_model()
        {
            using (WebApp.Start(HttpClientUtils.BaseAddress, NorthwindConfiguration))
            {
                // Arrange
                var httpClient = HttpClientUtils.GetHttpClient(HttpClientUtils.BaseAddress);

                // Act
                var response = await httpClient.GetAsync("swagger/docs/v1");

                // Assert
                await response.ValidateSuccessAsync();

                var swaggerJson = await response.Content.ReadAsStringAsync();

                var resolver = new JSchemaPreloadedResolver();
                resolver.Add(new Uri("http://json-schema.org/draft-04/schema"), File.ReadAllText(@"schema-draft-v4.json"));

                var swaggerSchema = File.ReadAllText(@"swagger-2.0-schema.json");
                var schema        = JSchema.Parse(swaggerSchema, resolver);

                var            swaggerJObject = JObject.Parse(swaggerJson);
                IList <string> messages;
                var            isValid = swaggerJObject.IsValid(schema, out messages);
                isValid.Should().BeTrue();
            }
        }
Пример #12
0
        /// <summary>
        /// Links parent JSON schema validation rules with child rules through the referenceUri.
        /// See ForgeSchemaValidatorTests for examples.
        /// </summary>
        /// <param name="parentRules">The parentRules that get validated against and link to the childRules.</param>
        /// <param name="childRules">The childRules that get referenced by the parentRules.</param>
        /// <param name="referenceUri">The reference URI in parentRules pointing to the childRules.</param>
        /// <returns>The parentRules linked with the childRules through the referenceUri.</returns>
        public static JSchema GetLinkedJSchemaRules(string parentRules, string childRules, string referenceUri)
        {
            JSchemaPreloadedResolver resolver = new JSchemaPreloadedResolver();

            resolver.Add(new Uri(referenceUri), childRules);

            return(JSchema.Parse(parentRules, resolver));
        }
Пример #13
0
        private static void AddSchema(JSchemaPreloadedResolver resolver, string schemaFileName, string id)
        {
            string baseRemotePath = ResolvePath(Path.Combine("Specs", "remotes"));

            string json = File.ReadAllText(Path.Combine(baseRemotePath, schemaFileName));

            resolver.Add(new Uri(id), json);
        }
Пример #14
0
        private static void AddPreloadedSchema(JSchemaPreloadedResolver resolver, Uri uri, string resourceName)
        {
            Stream       schemaData = GetEmbeddedResourceStream(resourceName);
            MemoryStream ms         = new MemoryStream();

            schemaData.CopyTo(ms);

            resolver.Add(uri, ms.ToArray());
        }
        private static void AddSchema(JSchemaPreloadedResolver resolver, string schemaFileName, string id)
        {
            string baseDirectory  = AppDomain.CurrentDomain.BaseDirectory;
            string baseRemotePath = Path.Combine(baseDirectory, Path.Combine("Specs", "remotes"));

            string json = File.ReadAllText(Path.Combine(baseRemotePath, schemaFileName));

            resolver.Add(new Uri(id), json);
        }
        public void Test_WithBaseUri()
        {
            JSchemaPreloadedResolver resolver = new JSchemaPreloadedResolver();

            resolver.Add(new Uri("http://example.com/schema1.json"), Schema1);
            resolver.Add(new Uri("http://example.com/schema2.json"), Schema2);

            JSchema schema = JSchema.Parse(Schema1, new JSchemaReaderSettings
            {
                Resolver = resolver,
                BaseUri = new Uri("http://example.com/schema1.json")
            });

            JSchema fooSchema = schema.Properties["foo"];
            Assert.AreEqual(JSchemaType.String, fooSchema.Properties["value"].Type);

            JSchema bazSchema = (JSchema)schema.ExtensionData["definitions"]["baz"];
            Assert.AreEqual(JSchemaType.Number, bazSchema.Properties["value"].Type);
        }
        public void FailToMatchPreloadedUriWithFragment()
        {
            try
            {
                JSchemaPreloadedResolver resolver = new JSchemaPreloadedResolver();
                resolver.Add(new Uri("http://json-schema.org/geojson/crs.json#"), TestHelpers.OpenFile(@"resources\schemas\geojson\crs.json"));
                resolver.Add(new Uri("http://json-schema.org/geojson/bbox.json#"), TestHelpers.OpenFile(@"resources\schemas\geojson\bbox.json"));
                resolver.Add(new Uri("http://json-schema.org/geojson/geometry.json#"), TestHelpers.OpenFile(@"resources\schemas\geojson\geometry.json"));

                OpenSchemaFile(@"resources\schemas\geojson\geojson.json", resolver);
            }
            catch (JSchemaReaderException ex)
            {
                Assert.AreEqual("Could not resolve schema reference 'http://json-schema.org/geojson/crs.json#'. Path 'properties.crs', line 9, position 17.", ex.Message);

                Uri baseUri = new Uri(TestHelpers.ResolveFilePath(@"resources\schemas\geojson\geojson.json"));

                Assert.AreEqual(baseUri, ex.BaseUri);
            }
        }
        public void Test()
        {
            JSchemaPreloadedResolver resolver = new JSchemaPreloadedResolver();

            resolver.Add(new Uri("http://example.com/schema1.json"), Schema1);
            resolver.Add(new Uri("http://example.com/schema2.json"), Schema2);

            JSchema schema = JSchema.Parse(Schema1, resolver);

            JSchema fooSchema = schema.Properties["foo"];
            Assert.AreEqual(JSchemaType.String, fooSchema.Properties["value"].Type);

            // because the root schema has no BaseUri this schema won't be set back
            ExceptionAssert.Throws<JSchemaException>(() =>
            {
                JSchema bazSchema = (JSchema)schema.ExtensionData["definitions"]["baz"];
                Assert.IsNotNull(bazSchema);
            }, "Cannot convert JToken to JSchema. No schema is associated with this token.");

            Console.WriteLine(schema.ToString());
        }
Пример #19
0
        public void Test()
        {
            var resolver = new JSchemaPreloadedResolver();

            resolver.Add(new Uri("https://a.b.c/schemas/definitions.schema.json"), SchemaRef);

            JSchema schema = JSchema.Parse(Schema, resolver);

            Assert.AreEqual("https://a.b.c/schemas/message-base.schema.json", schema.Id.OriginalString);
            Assert.AreEqual("https://a.b.c/schemas/definitions.schema.json", schema.Properties["gauges"].BaseUri.OriginalString);
            Assert.AreEqual("https://a.b.c/schemas/definitions.schema.json", schema.Properties["gauges"].PatternProperties[".*"].OneOf[1].BaseUri.OriginalString);
        }
Пример #20
0
        public void Test_WithBaseUri()
        {
            JSchemaPreloadedResolver resolver = new JSchemaPreloadedResolver();

            resolver.Add(new Uri("http://example.com/schema1.json"), Schema1);
            resolver.Add(new Uri("http://example.com/schema2.json"), Schema2);

            JSchema schema = JSchema.Parse(Schema1, new JSchemaReaderSettings
            {
                Resolver = resolver,
                BaseUri  = new Uri("http://example.com/schema1.json")
            });

            JSchema fooSchema = schema.Properties["foo"];

            Assert.AreEqual(JSchemaType.String, fooSchema.Properties["value"].Type);

            JSchema bazSchema = (JSchema)schema.ExtensionData["definitions"]["baz"];

            Assert.AreEqual(JSchemaType.Number, bazSchema.Properties["value"].Type);
        }
Пример #21
0
        public void Test()
        {
            JSchemaPreloadedResolver resolver = new JSchemaPreloadedResolver();

            resolver.Add(new Uri("http://example.com/schema1.json"), Schema1);
            resolver.Add(new Uri("http://example.com/schema2.json"), Schema2);

            JSchema schema = JSchema.Parse(Schema1, resolver);

            JSchema fooSchema = schema.Properties["foo"];

            Assert.AreEqual(JSchemaType.String, fooSchema.Properties["value"].Type);

            // because the root schema has no BaseUri this schema won't be set back
            ExceptionAssert.Throws <JSchemaException>(() =>
            {
                JSchema bazSchema = (JSchema)schema.ExtensionData["definitions"]["baz"];
                Assert.IsNotNull(bazSchema);
            }, "Cannot convert JToken to JSchema. No schema is associated with this token.");

            Console.WriteLine(schema.ToString());
        }
Пример #22
0
        public void ValidateRefSchemaSimpleType_WithBaseUri()
        {
            JSchemaPreloadedResolver resolver = new JSchemaPreloadedResolver();

            resolver.Add(new Uri("http://example.com/schema1.json"), Schema1);
            resolver.Add(new Uri("http://example.com/schema2.json"), Schema2);

            JSchema schema = JSchema.Parse(Schema1, new JSchemaReaderSettings
            {
                Resolver   = resolver,
                BaseUri    = new Uri("http://example.com/schema1.json"),
                Validators = new List <JsonValidator> {
                    new JsonFormatValidator()
                }
            });

            JSchema fooSchema = schema.Properties["foo"];

            Assert.AreEqual(1, fooSchema.Properties["value"].Validators.Count);

            JSchema bazSchema = (JSchema)schema.ExtensionData["definitions"]["baz"];

            Assert.AreEqual(1, bazSchema.Properties["value"].Validators.Count);
        }
        public void Reference_InnerSchemaOfExternalSchema()
        {
            JSchema baseSchema = TestHelpers.OpenSchemaFile(@"resources\schemas\grunt-task.json");

            JSchema fileFormatSchema = (JSchema)baseSchema.ExtensionData["definitions"]["fileFormat"];

            Assert.AreEqual("JSON schema for any Grunt task", baseSchema.Title);

            JSchemaPreloadedResolver resolver = new JSchemaPreloadedResolver();

            resolver.Add(baseSchema, new Uri("http://json.schemastore.org/grunt-task"));

            JSchema cleanSchema = TestHelpers.OpenSchemaFile(@"resources\schemas\grunt-clean-task.json", resolver);

            Assert.AreEqual(fileFormatSchema, cleanSchema.AdditionalProperties.AnyOf[0]);
        }
        public void Example()
        {
            #region Usage
            string personSchemaJson = @"{
              'type': 'object',
              'properties': {
                'name': { 'type': 'string' },
                'age': { 'type': 'integer' }
              }
            }";

            JSchemaPreloadedResolver resolver = new JSchemaPreloadedResolver();
            resolver.Add(new Uri("person.json", UriKind.RelativeOrAbsolute), personSchemaJson);

            // the external 'person.json' schema will be found using the resolver
            // the internal 'salary' schema will be found using the default resolution logic
            JSchema employeeSchema = JSchema.Parse(@"{
              'type': 'object',
              'allOf': [
                { '$ref': 'person.json' }
              ],
              'properties': {
                'salary': { '$ref': '#/definitions/salary' },
                'jobTitle': { 'type': 'string' }
              },
              'definitions': {
                'salary': { 'type': 'number' }
              }
            }", resolver);

            string json = @"{
              'name': 'James',
              'age': 29,
              'salary': 9000.01,
              'jobTitle': 'Junior Vice President'
            }";

            JObject employee = JObject.Parse(json);

            bool valid = employee.IsValid(employeeSchema);

            Console.WriteLine(valid);
            // true
            #endregion

            Assert.IsTrue(valid);
        }
        public void Example()
        {
            #region Usage
            string personSchemaJson = @"{
              'type': 'object',
              'properties': {
                'name': { 'type': 'string' },
                'age': { 'type': 'integer' }
              }
            }";

            JSchemaPreloadedResolver resolver = new JSchemaPreloadedResolver();
            resolver.Add(new Uri("person.json", UriKind.RelativeOrAbsolute), personSchemaJson);

            // the external 'person.json' schema will be found using the resolver
            // the internal 'salary' schema will be found using the default resolution logic
            JSchema employeeSchema = JSchema.Parse(@"{
              'type': 'object',
              'allOf': [
                { '$ref': 'person.json' }
              ],
              'properties': {
                'salary': { '$ref': '#/definitions/salary' },
                'jobTitle': { 'type': 'string' }
              },
              'definitions': {
                'salary': { 'type': 'number' }
              }
            }", resolver);

            string json = @"{
              'name': 'James',
              'age': 29,
              'salary': 9000.01,
              'jobTitle': 'Junior Vice President'
            }";

            JObject employee = JObject.Parse(json);

            bool valid = employee.IsValid(employeeSchema);

            Console.WriteLine(valid);
            // true
            #endregion

            Assert.IsTrue(valid);
        }
Пример #26
0
        private static async Task IsValidAgainstJsonSchemaAsync(HttpResponseMessage response)
        {
            var swaggerJson = await response.Content.ReadAsStringAsync();

            var resolver = new JSchemaPreloadedResolver();

            resolver.Add(new Uri("http://json-schema.org/draft-04/schema"), File.ReadAllText(@"schema-draft-v4.json"));

            var swaggerSchema = File.ReadAllText(@"swagger-2.0-schema.json");
            var schema        = JSchema.Parse(swaggerSchema, resolver);

            var            swaggerJObject = JObject.Parse(swaggerJson);
            IList <string> messages;
            var            isValid = swaggerJObject.IsValid(schema, out messages);

            isValid.Should().BeTrue();
        }
Пример #27
0
        public void Example()
        {
            #region Usage
            string schemaJson = @"{
              'id': 'person',
              'type': 'object',
              'properties': {
                'name': {'type':'string'},
                'age': {'type':'integer'}
              }
            }";

            JSchema personSchema = JSchema.Parse(schemaJson);

            JSchemaPreloadedResolver resolver = new JSchemaPreloadedResolver();
            resolver.Add(personSchema);

            schemaJson = @"{
              'id': 'employee',
              'type': 'object',
              'extends': {'$ref':'person'},
              'properties': {
                'salary': {'type':'number'},
                'jobTitle': {'type':'string'}
              }
            }";

            JSchema employeeSchema = JSchema.Parse(schemaJson, resolver);

            string json = @"{
              'name': 'James',
              'age': 29,
              'salary': 9000.01,
              'jobTitle': 'Junior Vice President'
            }";

            JObject employee = JObject.Parse(json);

            bool valid = employee.IsValid(employeeSchema);

            Console.WriteLine(valid);
            // true
            #endregion

            Assert.IsTrue(valid);
        }
Пример #28
0
        public void ReadRoot_ResolveSchemaReferencesFalse_DoesNotDereference()
        {
            JSchemaPreloadedResolver resolver = new JSchemaPreloadedResolver();

            resolver.Add(new Uri("person.json", UriKind.RelativeOrAbsolute), _personSchemaJson);

            // Arrange
            JSchemaReader schemaReader = new JSchemaReader(new JSchemaReaderSettings {
                ResolveSchemaReferences = false, Resolver = resolver
            });

            // Act
            JSchema schema = schemaReader.ReadRoot(new JsonTextReader(new StringReader(_employeeSchema)));

            // Assert
            Assert.AreEqual(new Uri("person.json", UriKind.Relative), schema.AllOf[0].Reference);
            Assert.AreEqual(new Uri("#/definitions/salary", UriKind.Relative), schema.Properties["salary"].Reference);
        }
        public void JSchemaPreloadedResolver()
        {
            #region JSchemaPreloadedResolver
            JSchema addressSchema = JSchema.Parse(@"{
              'type': 'object',
              'properties': {
                'line1': {'type': 'string'},
                'line2': {'type': 'string'},
                'country': {'type': 'string'}
              }
            }");

            // preload schema with ID 'http://schema.org/address.json'
            JSchemaPreloadedResolver resolver = new JSchemaPreloadedResolver();
            resolver.Add(addressSchema, new Uri("http://schema.org/address.json"));

            // the external ref will use the preloaded schema
            JSchema schema = JSchema.Parse(@"{
              'type': 'object',
              'properties': {
                'name': {'type':'string'},
                'addresses': {
                  'type': 'array',
                  'items': {'$ref': 'http://schema.org/address.json'}
                }
              }
            }", resolver);

            JToken json = JToken.Parse(@"{
              'name': 'James',
              'addresses': [
                {
                  'line1': '99 Smithington Street',
                  'line2': 'Real Town',
                  'Country': 'USA'
                }
              ]
            }");

            IList <string> errorMessages;
            bool           isValid = json.IsValid(schema, out errorMessages);
            #endregion
        }
Пример #30
0
        public JSchema ReadJsonSchema()
        {
            // We have the fibers report schema defined in FibersReport.json
            // This in-turn has ref to FibersReportItem.json

            // Whenever we have a ref, we must read the referred json firt (Parsing as schema not required, just read the text)
            // And add the referred objects json schema text to the resolver
            // And then use this resolver to parse the original schema

            var fibersReportItemJsonSchemaAsText = File.ReadAllText(@"FibersReportItem.json");
            JSchemaPreloadedResolver resolver    = new JSchemaPreloadedResolver();

            //var fibersReportItemSchema = JSchema.Parse(fibersReportItemJsonSchemaAsText, resolver); // Not required here (See A)

            resolver.Add(new Uri("FibersReportItem.json", UriKind.RelativeOrAbsolute), fibersReportItemJsonSchemaAsText);
            var fibersReportJsonSchemaAsText = File.ReadAllText(@"FibersReport.json");
            var fibersReportSchema           = JSchema.Parse(fibersReportJsonSchemaAsText, resolver); // (A) This would then parse the referred object as well

            return(fibersReportSchema);

            // However, the resulting schema has referred object completely embedded inline (not cool)
        }
        public void RefToExternalRef()
        {
            JSchemaPreloadedResolver resolver = new JSchemaPreloadedResolver();

            JSchema subSchema = JSchema.Parse(@"{
                ""integer"": {
                    ""type"": ""integer""
                }, 
                ""refToInteger"": {
                    ""$ref"": ""#/integer""
                }
            }");

            resolver.Add(subSchema, new Uri("http://*****:*****@"{
                ""$ref"": ""http://localhost:1234/subSchemas.json#/refToInteger""
            }", resolver);

            JSchema integerSchema = (JSchema)subSchema.ExtensionData["integer"];

            Assert.AreEqual(integerSchema, schema);
        }
        public void Test()
        {
            string swaggerJson = TestHelpers.OpenFileText("Resources/Schemas/swagger-2.0.json");

            JSchemaPreloadedResolver resolver = new JSchemaPreloadedResolver();

            resolver.Add(
                new Uri("http://json-schema.org/draft-04/schema"),
                Encoding.UTF8.GetBytes(TestHelpers.OpenFileText("Resources/Schemas/schema-draft-v4.json")));

            JSchema swagger = JSchema.Parse(swaggerJson, resolver);

            // resolve the nested schema
            JSchema infoSchema = resolver.GetSubschema(new SchemaReference
            {
                BaseUri     = new Uri("#", UriKind.RelativeOrAbsolute),
                SubschemaId = new Uri("#/definitions/info", UriKind.RelativeOrAbsolute)
            }, swagger);

            Assert.AreEqual("General information about the API.", infoSchema.Description);

            Console.WriteLine(infoSchema.ToString());
        }
Пример #33
0
        public static List <string> GetJsonValideringsfeil(string kryptert, string skjemafilnavn, Dictionary <string, string> underskjema = null)
        {
            var     skjema  = LesSkjemafil(skjemafilnavn);
            JSchema jSchema = null;

            if (underskjema == null || underskjema.Count == 0)
            {
                jSchema = JSchema.Parse(skjema);
            }
            else
            {
                var resolver = new JSchemaPreloadedResolver();
                foreach (KeyValuePair <string, string> entry in underskjema)
                {
                    var underskjemaJson = LesSkjemafil(entry.Value);
                    resolver.Add(new Uri(entry.Key), underskjemaJson);
                }
                jSchema = JSchema.Parse(skjema, resolver);
            }
            var kryptertJObject = JObject.Parse(kryptert);
            var isValid         = kryptertJObject.IsValid(jSchema, out IList <string> messages);

            return(messages.ToList());
        }
Пример #34
0
        public void ResolutionScope()
        {
            JSchemaPreloadedResolver resolver = new JSchemaPreloadedResolver();

            JSchema subSchema = JSchema.Parse(@"{
                ""type"": ""integer""
            }");

            resolver.Add(new Uri("http://*****:*****@"{
                ""id"": ""http://*****:*****@"[[""a""]]");

            IList <string> errorMessages;

            Assert.IsFalse(json.IsValid(schema, out errorMessages));
        }
        public void RefToExternalRef()
        {
            JSchemaPreloadedResolver resolver = new JSchemaPreloadedResolver();

            JSchema subSchema = JSchema.Parse(@"{
                ""integer"": {
                    ""type"": ""integer""
                }, 
                ""refToInteger"": {
                    ""$ref"": ""#/integer""
                }
            }");

            resolver.Add(new Uri("http://*****:*****@"{
                ""$ref"": ""http://localhost:1234/subSchemas.json#/refToInteger""
            }", resolver);

            Assert.AreEqual(JSchemaType.Integer, schema.Type);
        }
        public void GeoJson()
        {
            JSchemaPreloadedResolver resolver = new JSchemaPreloadedResolver();

            resolver.Add(new Uri("http://json-schema.org/geojson/crs.json"), TestHelpers.OpenFile(@"resources\schemas\geojson\crs.json"));
            resolver.Add(new Uri("http://json-schema.org/geojson/bbox.json"), TestHelpers.OpenFile(@"resources\schemas\geojson\bbox.json"));
            resolver.Add(new Uri("http://json-schema.org/geojson/geometry.json"), TestHelpers.OpenFile(@"resources\schemas\geojson\geometry.json"));

            JSchema schema = OpenSchemaFile(@"resources\schemas\geojson\geojson.json", resolver, new Uri("http://json-schema.org/geojson/geojson.json"));

            JObject o = JObject.Parse(@"{
              ""type"": ""Feature"",
              ""geometry"": {
                ""type"": ""Point"",
                ""coordinates"": [125.6, 10.1]
              },
              ""properties"": {
                ""name"": ""Dinagat Islands""
              }
            }");

            bool isValid1 = o.IsValid(schema);
            Assert.IsTrue(isValid1);

            JObject o2 = JObject.Parse(@"{
              ""type"": ""Feature"",
              ""geometry"": {
                ""type"": ""Point"",
                ""coordinates"": [true, 10.1]
              },
              ""bbox"": [1, 2.1, ""string?!""],
              ""properties"": {
                ""name"": ""Dinagat Islands""
              }
            }");

            IList<ValidationError> errors;
            bool isValid2 = o2.IsValid(schema, out errors);
            Assert.IsFalse(isValid2);

            Assert.AreEqual(new Uri("http://json-schema.org/geojson/bbox.json"), errors[0].SchemaBaseUri);
            Assert.AreEqual(new Uri("http://json-schema.org/geojson/geojson.json"), errors[1].SchemaBaseUri);

            PrintErrorsRecursive(errors, 0);
        }
        public void Reference_UnusedInnerSchemaOfExternalSchema()
        {
            string schemaJson = @"{
  ""definitions"": {
    ""unused"": {
      ""not"": {
        ""$ref"": ""#/definitions/used_by_unused""
      }
    },
    ""used_by_unused"": {
      ""title"": ""used by unused""
    }
  }
}";

            JSchemaPreloadedResolver resolver = new JSchemaPreloadedResolver();
            resolver.Add(new Uri("http://localhost/base"), schemaJson);

            string json = @"{
  ""not"": {
    ""$ref"": ""http://localhost/base#/definitions/unused""
  }
}";

            JSchemaReader schemaReader = new JSchemaReader(resolver);
            JSchema refSchema = schemaReader.ReadRoot(new JsonTextReader(new StringReader(json)));

            Assert.IsNotNull(refSchema.Not);
            Assert.AreEqual("used by unused", refSchema.Not.Not.Title);
        }
        public void ErrorInExternalSchema()
        {
            string schemaJson = @"{
  ""definitions"": {
    ""unused"": {
      ""not"": {
        ""$ref"": ""#/definitions/used_by_unused""
      }
    },
    ""used_by_unused"": {
      ""$ref"": ""#/definitions/invalid""
    }
  }
}";

            JSchemaPreloadedResolver resolver = new JSchemaPreloadedResolver();
            resolver.Add(new Uri("http://localhost/base"), schemaJson);

            string json = @"{
  ""not"": {
    ""$ref"": ""http://localhost/base#/definitions/unused""
  }
}";

            try
            {
                JSchemaReader schemaReader = new JSchemaReader(resolver);
                schemaReader.ReadRoot(new JsonTextReader(new StringReader(json)));
            }
            catch (JSchemaReaderException ex)
            {
                Assert.AreEqual("Error when resolving schema reference 'http://localhost/base#/definitions/unused'. Path 'not', line 2, position 11.", ex.Message);
                Assert.AreEqual(null, ex.BaseUri);

                JSchemaReaderException inner = (JSchemaReaderException)ex.InnerException;
                Assert.AreEqual("Could not resolve schema reference '#/definitions/invalid'. Path 'definitions.used_by_unused', line 8, position 24.", inner.Message);
                Assert.AreEqual(new Uri("http://localhost/base"), inner.BaseUri);
            }
        }
Пример #39
0
        public void ValidateRefSchemaSimpleType()
        {
            string json = @"{
                              ""values"": [
                                            ""1"",
                                            ""[1]"",
                                            ""\""A string!\"""",
                                            123,
                                            ""{\""prop1\"":bad!}""
                                          ],
                              ""refSchema"": {
                                              ""values"": [
                                                            ""1"",
                                                            ""[1]"",
                                                            ""\""A string!\"""",
                                                            123,
                                                            ""{\""prop1\"":bad!}""
                                                          ]}
                            }";

            string refSchema = @"{
                                  ""type"": ""object"",
                                  ""properties"": {
                                                    ""values"": {
                                                        ""type"": ""array"",
                                                        ""items"": {
                                                                    ""type"": ""string"",
                                                                    ""format"": ""json""
                                                                   }
                                                                }
                                                  }
                                }";

            JSchemaPreloadedResolver resolver = new JSchemaPreloadedResolver();

            resolver.Add(new Uri("refSchema.json", UriKind.RelativeOrAbsolute), refSchema);


            JSchemaReaderSettings settings = new JSchemaReaderSettings
            {
                Validators = new List <JsonValidator> {
                    new JsonFormatValidator()
                },
                Resolver = resolver
            };

            JSchema schema = JSchema.Parse(@"{
                                              ""type"": ""object"",
                                              ""properties"": {
                                                    ""values"": {
                                                                  ""type"": ""array"",
                                                                  ""items"": {
                                                                    ""type"": ""string"",
                                                                    ""format"": ""json""
                                                                  }
                                                                },
                                                    ""refSchema"": { ""$ref"": ""refSchema.json"" }
                                              }
                                            }", settings);

            JObject o = JObject.Parse(json);

            IList <ValidationError> errors;

            Assert.IsFalse(o.IsValid(schema, out errors));

            Assert.AreEqual(4, errors.Count);

            Assert.AreEqual(@"Invalid type. Expected String but got Integer.", errors[0].Message);
            Assert.AreEqual(ErrorType.Type, errors[0].ErrorType);
            Assert.AreEqual("#/properties/values/items", errors[0].SchemaId.OriginalString);

            Assert.AreEqual(@"String is not JSON: Unexpected character encountered while parsing value: b. Path 'prop1', line 1, position 9.", errors[1].Message);
            Assert.AreEqual(ErrorType.Validator, errors[1].ErrorType);
            Assert.AreEqual("#/properties/values/items", errors[1].SchemaId.OriginalString);

            Assert.AreEqual(@"Invalid type. Expected String but got Integer.", errors[2].Message);
            Assert.AreEqual(ErrorType.Type, errors[2].ErrorType);
            Assert.AreEqual("#/properties/refSchema/properties/values/items", errors[2].SchemaId.OriginalString);

            Assert.AreEqual(@"String is not JSON: Unexpected character encountered while parsing value: b. Path 'prop1', line 1, position 9.", errors[3].Message);
            Assert.AreEqual(ErrorType.Validator, errors[3].ErrorType);
            Assert.AreEqual("#/properties/refSchema/properties/values/items", errors[3].SchemaId.OriginalString);
        }
        public void Swagger()
        {
            JSchemaPreloadedResolver resolver = new JSchemaPreloadedResolver();
            resolver.Add(new Uri("http://json-schema.org/draft-04/schema"), TestHelpers.OpenFileText(@"resources\schemas\schema-draft-v4.json"));

            string schemaJson = TestHelpers.OpenFileText(@"resources\schemas\swagger-2.0.json");
            JSchema swaggerSchema = JSchema.Parse(schemaJson, resolver);

            string json = TestHelpers.OpenFileText(@"resources\json\swagger-petstore.json");
            JObject o = JObject.Parse(json);

            IList<string> messages;
            bool valid = o.IsValid(swaggerSchema, out messages);

            Assert.IsFalse(valid);
            Assert.AreEqual(1, messages.Count);
            Assert.AreEqual(@"String 'http://petstore.swagger.io' does not match regex pattern '^[^{}/ :\\]+(?::\d+)?$'. Path 'host', line 16, position 41.", messages[0]);

            Console.WriteLine(swaggerSchema.ToString());
        }
        public void InvalidPatternInDeferredResolvedSchema()
        {
            string schemaJson = @"{
	""title"": ""JSON schema for DNX project.json files"",
	""$schema"": ""http://json-schema.org/draft-04/schema#"",

	""type"": ""object"",

	""properties"": {
		""authors"": {
			""$ref"": ""http://test#/definitions/authors""
		},
		""authors2"": {
			""pattern"":""[]""
		}
	}
}";

            string resolvedSchemaJson = @"{
	""id"": ""http://test#"",
	""$schema"": ""http://json-schema.org/draft-04/schema#"",

	""definitions"": {
		""authors"": {
			""type"": ""array"",
			""items"": {
				""type"": ""string"",
				""uniqueItems"": true,
                ""pattern"":""[]""
			}
		}
    }
}";

            JSchemaPreloadedResolver resolver = new JSchemaPreloadedResolver();
            resolver.Add(new Uri("http://test"), resolvedSchemaJson);

            List<ValidationError> errors = new List<ValidationError>();

            JSchemaReaderSettings settings = new JSchemaReaderSettings();
            settings.Resolver = resolver;
            settings.ValidationEventHandler += (o, e) => errors.Add(e.ValidationError);

            JSchema s = JSchema.Parse(schemaJson, settings);

            Assert.AreEqual(2, errors.Count);

            Assert.AreEqual(@"Could not parse regex pattern '[]'. Regex parser error: parsing ""[]"" - Unterminated [] set.", errors[0].Message);
            Assert.AreEqual(ErrorType.Pattern, errors[0].ErrorType);
            Assert.AreEqual("http://test/#/definitions/authors/items/0", errors[0].SchemaId.OriginalString);
            Assert.AreEqual(s.Properties["authors"].Items[0], errors[0].Schema);
            Assert.AreEqual("http://test", errors[0].Schema.BaseUri.OriginalString);

            Assert.AreEqual(null, errors[1].Schema.BaseUri);
        }