Skip to content

Commit

Permalink
Update JsonSchema.Net
Browse files Browse the repository at this point in the history
Signed-off-by: andreas hilti <andreas.hilti@bluewin.ch>
  • Loading branch information
andreas-hilti committed Nov 12, 2023
1 parent 1e3886b commit a6fa26e
Show file tree
Hide file tree
Showing 4 changed files with 28 additions and 54 deletions.
2 changes: 1 addition & 1 deletion src/CycloneDX.Core/CycloneDX.Core.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
<PrivateAssets>all</PrivateAssets>
</PackageReference>
<PackageReference Include="JsonSchema.Net" Version="3.3.2" />
<PackageReference Include="JsonSchema.Net" Version="5.3.1" />
<PackageReference Include="protobuf-net" Version="3.2.26" />
<PackageReference Include="protobuf-net.BuildTools" Version="3.2.12" PrivateAssets="all" IncludeAssets="runtime;build;native;contentfiles;analyzers;buildtransitive" />
<PackageReference Include="System.Text.Json" Version="7.0.2" />
Expand Down
40 changes: 13 additions & 27 deletions src/CycloneDX.Core/Json/Validator.cs
Original file line number Diff line number Diff line change
Expand Up @@ -173,13 +173,13 @@ public static ValidationResult Validate(string jsonString, SpecificationVersion
private static ValidationResult Validate(JsonSchema schema, JsonDocument jsonDocument, string schemaVersionString)
{
var validationMessages = new List<string>();
var validationOptions = new ValidationOptions
var validationOptions = new EvaluationOptions
{
OutputFormat = OutputFormat.Detailed,
OutputFormat = OutputFormat.List,
RequireFormatValidation = true
};

var result = schema.Validate(jsonDocument.RootElement, validationOptions);
var result = schema.Evaluate(jsonDocument.RootElement, validationOptions);

if (result.IsValid)
{
Expand All @@ -197,34 +197,20 @@ private static ValidationResult Validate(JsonSchema schema, JsonDocument jsonDoc
}
else
{
validationMessages.Add($"Validation failed: {result.Message}");
validationMessages.Add(result.SchemaLocation.ToString());
validationMessages.Add($"On instance: {result.InstanceLocation}:");
validationMessages.Add(result.InstanceLocation.Evaluate(jsonDocument.RootElement).ToString());

if (result.NestedResults != null)
validationMessages.Add("Validation failed:");
// because we requested the results as a flat list
// there will be no nested results
foreach (var detail in result.Details)
{
var nestedResults = new Queue<ValidationResults>(result.NestedResults);

while (nestedResults.Count > 0)
if (detail.HasErrors)
{
var nestedResult = nestedResults.Dequeue();

if (
!string.IsNullOrEmpty(nestedResult.Message)
&& nestedResult.NestedResults != null
&& nestedResult.NestedResults.Count > 0)
{
validationMessages.Add($"{nestedResult.InstanceLocation}: {nestedResult.Message}");
}

if (nestedResult.NestedResults != null)
foreach (var error in detail.Errors)
{
foreach (var newNestedResult in nestedResult.NestedResults)
{
nestedResults.Enqueue(newNestedResult);
}
validationMessages.Add(error.Value);
}
validationMessages.Add(detail.SchemaLocation.ToString());
validationMessages.Add($"On instance: {detail.InstanceLocation}:");
validationMessages.Add(detail.InstanceLocation.Evaluate(jsonDocument.RootElement).ToString());
}
}
}
Expand Down
2 changes: 1 addition & 1 deletion src/CycloneDX.Spdx/CycloneDX.Spdx.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
<PrivateAssets>all</PrivateAssets>
</PackageReference>
<PackageReference Include="JsonSchema.Net" Version="3.3.2" />
<PackageReference Include="JsonSchema.Net" Version="5.3.1" />
<PackageReference Include="System.Text.Json" Version="7.0.2" />
</ItemGroup>

Expand Down
38 changes: 13 additions & 25 deletions src/CycloneDX.Spdx/Validation/JsonValidator.cs
Original file line number Diff line number Diff line change
Expand Up @@ -78,42 +78,30 @@ public static ValidationResult Validate(string jsonString)
private static ValidationResult Validate(JsonSchema schema, JsonDocument jsonDocument)
{
var validationMessages = new List<string>();
var validationOptions = new ValidationOptions
var validationOptions = new EvaluationOptions
{
OutputFormat = OutputFormat.Detailed,
OutputFormat = OutputFormat.List,
RequireFormatValidation = true
};

var result = schema.Validate(jsonDocument.RootElement, validationOptions);
var result = schema.Evaluate(jsonDocument.RootElement, validationOptions);

if (!result.IsValid)
{
validationMessages.Add($"Validation failed: {result.Message}");
validationMessages.Add(result.SchemaLocation.ToString());

if (result.NestedResults != null)
validationMessages.Add("Validation failed:");
// because we requested the results as a flat list
// there will be no nested results
foreach (var detail in result.Details)
{
var nestedResults = new Queue<ValidationResults>(result.NestedResults);

while (nestedResults.Count > 0)
if (detail.HasErrors)
{
var nestedResult = nestedResults.Dequeue();

if (
!string.IsNullOrEmpty(nestedResult.Message)
&& nestedResult.NestedResults != null
&& nestedResult.NestedResults.Count > 0)
{
validationMessages.Add($"{nestedResult.InstanceLocation}: {nestedResult.Message}");
}

if (nestedResult.NestedResults != null)
foreach (var error in detail.Errors)
{
foreach (var newNestedResult in nestedResult.NestedResults)
{
nestedResults.Enqueue(newNestedResult);
}
validationMessages.Add(error.Value);
}
validationMessages.Add(detail.SchemaLocation.ToString());
validationMessages.Add($"On instance: {detail.InstanceLocation}:");
validationMessages.Add(detail.InstanceLocation.Evaluate(jsonDocument.RootElement).ToString());
}
}
}
Expand Down

0 comments on commit a6fa26e

Please sign in to comment.