xref: /aosp_15_r20/external/json-schema-validator/doc/upgrading.md (revision 78c4dd6aa35290980cdcd1623a7e337e8d021c7c)
1*78c4dd6aSAndroid Build Coastguard Worker## Upgrading to new versions
2*78c4dd6aSAndroid Build Coastguard Worker
3*78c4dd6aSAndroid Build Coastguard WorkerThis library can contain breaking changes in `minor` version releases.
4*78c4dd6aSAndroid Build Coastguard Worker
5*78c4dd6aSAndroid Build Coastguard WorkerThis contains information on the notable or breaking changes in each version.
6*78c4dd6aSAndroid Build Coastguard Worker
7*78c4dd6aSAndroid Build Coastguard Worker### 1.4.0
8*78c4dd6aSAndroid Build Coastguard Worker
9*78c4dd6aSAndroid Build Coastguard WorkerThis contains breaking changes
10*78c4dd6aSAndroid Build Coastguard Worker- to those using the walk functionality
11*78c4dd6aSAndroid Build Coastguard Worker- in how custom meta-schemas are created
12*78c4dd6aSAndroid Build Coastguard Worker
13*78c4dd6aSAndroid Build Coastguard WorkerWhen using the walker with defaults the `default` across a `$ref` are properly resolved and used.
14*78c4dd6aSAndroid Build Coastguard Worker
15*78c4dd6aSAndroid Build Coastguard WorkerThe behavior for the property listener is now more consistent whether or not validation is enabled. Previously if validation is enabled but the property is `null` the property listener is not called while if validation is not enabled it will be called. Now the property listener will be called in both scenarios.
16*78c4dd6aSAndroid Build Coastguard Worker
17*78c4dd6aSAndroid Build Coastguard WorkerThe following are the breaking changes to those using the walk functionality.
18*78c4dd6aSAndroid Build Coastguard Worker
19*78c4dd6aSAndroid Build Coastguard Worker`WalkEvent`
20*78c4dd6aSAndroid Build Coastguard Worker| Field                    | Change       | Notes
21*78c4dd6aSAndroid Build Coastguard Worker|--------------------------|--------------|----------
22*78c4dd6aSAndroid Build Coastguard Worker| `schemaLocation`         | Removed      | For keywords: `getValidator().getSchemaLocation()`. For items and properties: `getSchema().getSchemaLocation()`
23*78c4dd6aSAndroid Build Coastguard Worker| `evaluationPath`         | Removed      | For keywords: `getValidator().getEvaluationPath()`. For items and properties: `getSchema().getEvaluationPath()`
24*78c4dd6aSAndroid Build Coastguard Worker| `schemaNode`             | Removed      | `getSchema().getSchemaNode()`
25*78c4dd6aSAndroid Build Coastguard Worker| `parentSchema`           | Removed      | `getSchema().getParentSchema()`
26*78c4dd6aSAndroid Build Coastguard Worker| `schema`                 | New          | For keywords this is the parent schema of the validator. For items and properties this is the item or property schema being evaluated.
27*78c4dd6aSAndroid Build Coastguard Worker| `node`                   | Renamed      | `instanceNode`
28*78c4dd6aSAndroid Build Coastguard Worker| `currentJsonSchemaFactory`| Removed     | `getSchema().getValidationContext().getJsonSchemaFactory()`
29*78c4dd6aSAndroid Build Coastguard Worker| `validator`              | New          | The validator indicated by the keyword.
30*78c4dd6aSAndroid Build Coastguard Worker
31*78c4dd6aSAndroid Build Coastguard Worker
32*78c4dd6aSAndroid Build Coastguard WorkerThe following are the breaking changes in how custom meta-schemas are created.
33*78c4dd6aSAndroid Build Coastguard Worker
34*78c4dd6aSAndroid Build Coastguard Worker`JsonSchemaFactory`
35*78c4dd6aSAndroid Build Coastguard Worker* The following were renamed on `JsonSchemaFactory` builder
36*78c4dd6aSAndroid Build Coastguard Worker  * `defaultMetaSchemaURI` -> `defaultMetaSchemaIri`
37*78c4dd6aSAndroid Build Coastguard Worker  * `enableUriSchemaCache` -> `enableSchemaCache`
38*78c4dd6aSAndroid Build Coastguard Worker* The builder now accepts a `JsonMetaSchemaFactory` which can be used to restrict the loading of meta-schemas that aren't explicitly defined in the `JsonSchemaFactory`. The `DisallowUnknownJsonMetaSchemaFactory` can be used to only allow explicitly configured meta-schemas.
39*78c4dd6aSAndroid Build Coastguard Worker
40*78c4dd6aSAndroid Build Coastguard Worker`JsonMetaSchema`
41*78c4dd6aSAndroid Build Coastguard Worker* In particular `Version201909` and `Version202012` had most of the keywords moved to their respective vocabularies.
42*78c4dd6aSAndroid Build Coastguard Worker* The following were renamed
43*78c4dd6aSAndroid Build Coastguard Worker  * `getUri` -> `getIri`
44*78c4dd6aSAndroid Build Coastguard Worker* The builder now accepts a `vocabularyFactory` to allow for custom vocabularies.
45*78c4dd6aSAndroid Build Coastguard Worker* The builder now accepts a `unknownKeywordFactory`. By default this uses the `UnknownKeywordFactory` implementation that logs a warning and returns a `AnnotationKeyword`. The `DisallowUnknownKeywordFactory` can be used to disallow the use of unknown keywords.
46*78c4dd6aSAndroid Build Coastguard Worker* The implementation of the builder now correctly throws an exception for `$vocabulary` with value of `true` that are not known to the implementation.
47*78c4dd6aSAndroid Build Coastguard Worker
48*78c4dd6aSAndroid Build Coastguard Worker`ValidatorTypeCode`
49*78c4dd6aSAndroid Build Coastguard Worker* `getNonFormatKeywords` has been removed and replaced with `getKeywords`. This now includes the `format` keyword as the `JsonMetaSchema.Builder` now needs to know if the `format` keyword was configured, as it might not be in meta-schemas that don't define the format vocabulary.
50*78c4dd6aSAndroid Build Coastguard Worker* The applicable `VersionCode` for each of the `ValidatorTypeCode` were modified to remove the keywords that are defined in vocabularies for `Version201909` and `Version202012`.
51*78c4dd6aSAndroid Build Coastguard Worker
52*78c4dd6aSAndroid Build Coastguard Worker`Vocabulary`
53*78c4dd6aSAndroid Build Coastguard Worker* This now contains `Keyword` instances instead of the string keyword value as it needs to know the explicit implementation. For instance the implementation for the `items` keyword in Draft 2019-09 and Draft 2020-12 are different.
54*78c4dd6aSAndroid Build Coastguard Worker* The following were renamed
55*78c4dd6aSAndroid Build Coastguard Worker  * `getId` -> `getIri`
56*78c4dd6aSAndroid Build Coastguard Worker
57*78c4dd6aSAndroid Build Coastguard Worker### 1.3.1
58*78c4dd6aSAndroid Build Coastguard Worker
59*78c4dd6aSAndroid Build Coastguard WorkerThis contains a breaking change in that the results from `failFast` are no longer thrown as an exception. The single result is instead returned normally in the output. This was partially done to distinguish the fail fast result from true exceptions such as when references could not be resolved.
60*78c4dd6aSAndroid Build Coastguard Worker
61*78c4dd6aSAndroid Build Coastguard Worker* Annotation collection and reporting has been implemented
62*78c4dd6aSAndroid Build Coastguard Worker* Keywords have been refactored to use annotations for evaluation to improve performance and meet functional requirements
63*78c4dd6aSAndroid Build Coastguard Worker* The list and hierarchical output formats have been implemented as per the [Specification for Machine-Readable Output for JSON Schema Validation and Annotation](https://github.com/json-schema-org/json-schema-spec/blob/main/jsonschema-validation-output-machines.md).
64*78c4dd6aSAndroid Build Coastguard Worker* The fail fast evaluation processing has been redesigned and fixed. This currently passes the [JSON Schema Test Suite](https://github.com/json-schema-org/JSON-Schema-Test-Suite) with fail fast enabled. Previously contains and union type may cause incorrect results.
65*78c4dd6aSAndroid Build Coastguard Worker* This also contains fixes for regressions introduced in 1.3.0
66*78c4dd6aSAndroid Build Coastguard Worker
67*78c4dd6aSAndroid Build Coastguard WorkerThe following keywords were refactored to improve performance and meet the functional requirements.
68*78c4dd6aSAndroid Build Coastguard Worker
69*78c4dd6aSAndroid Build Coastguard WorkerIn particular this converts the `unevaluatedItems` and `unevaluatedProperties` validators to use annotations to perform the evaluation instead of the current mechanism which affects performance. This also refactors `$recursiveRef` to not rely on that same mechanism.
70*78c4dd6aSAndroid Build Coastguard Worker
71*78c4dd6aSAndroid Build Coastguard Worker* `unevaluatedProperties`
72*78c4dd6aSAndroid Build Coastguard Worker* `unevaluatedItems`
73*78c4dd6aSAndroid Build Coastguard Worker* `properties`
74*78c4dd6aSAndroid Build Coastguard Worker* `patternProperties`
75*78c4dd6aSAndroid Build Coastguard Worker* `items` / `additionalItems`
76*78c4dd6aSAndroid Build Coastguard Worker* `prefixItems` / `items`
77*78c4dd6aSAndroid Build Coastguard Worker* `contains`
78*78c4dd6aSAndroid Build Coastguard Worker* `$recursiveRef`
79*78c4dd6aSAndroid Build Coastguard Worker
80*78c4dd6aSAndroid Build Coastguard WorkerThis also fixes the issue where the `unevaluatedItems` keyword does not take into account the `contains` keyword when performing the evaluation.
81*78c4dd6aSAndroid Build Coastguard Worker
82*78c4dd6aSAndroid Build Coastguard WorkerThis also fixes cases where `anyOf` short-circuits to not short-circuit the evaluation if a adjacent `unevaluatedProperties` or `unevaluatedItems` keyword exists.
83*78c4dd6aSAndroid Build Coastguard Worker
84*78c4dd6aSAndroid Build Coastguard WorkerThis should fix most of the remaining functional and performance issues.
85*78c4dd6aSAndroid Build Coastguard Worker
86*78c4dd6aSAndroid Build Coastguard Worker#### Functional
87*78c4dd6aSAndroid Build Coastguard Worker
88*78c4dd6aSAndroid Build Coastguard Worker| Implementations | Overall                                                                 | DRAFT_03                                                          | DRAFT_04                                                            | DRAFT_06                                                           | DRAFT_07                                                               | DRAFT_2019_09                                                        | DRAFT_2020_12                                                          |
89*78c4dd6aSAndroid Build Coastguard Worker|-----------------|-------------------------------------------------------------------------|-------------------------------------------------------------------|---------------------------------------------------------------------|--------------------------------------------------------------------|------------------------------------------------------------------------|----------------------------------------------------------------------|------------------------------------------------------------------------|
90*78c4dd6aSAndroid Build Coastguard Worker| NetworkNt       | pass: r:4703 (100.0%) o:2369 (100.0%)<br>fail: r:0 (0.0%) o:1 (0.0%)    |                                                                   | pass: r:600 (100.0%) o:251 (100.0%)<br>fail: r:0 (0.0%) o:0 (0.0%)  | pass: r:796 (100.0%) o:318 (100.0%)<br>fail: r:0 (0.0%) o:0 (0.0%) | pass: r:880 (100.0%) o:541 (100.0%)<br>fail: r:0 (0.0%) o:0 (0.0%)     | pass: r:1201 (100.0%) o:625 (100.0%)<br>fail: r:0 (0.0%) o:0 (0.0%)  | pass: r:1226 (100.0%) o:634 (99.8%)<br>fail: r:0 (0.0%) o:1 (0.2%)     |
91*78c4dd6aSAndroid Build Coastguard Worker
92*78c4dd6aSAndroid Build Coastguard Worker#### Performance
93*78c4dd6aSAndroid Build Coastguard Worker
94*78c4dd6aSAndroid Build Coastguard Worker##### NetworkNT 1.3.1
95*78c4dd6aSAndroid Build Coastguard Worker
96*78c4dd6aSAndroid Build Coastguard Worker```
97*78c4dd6aSAndroid Build Coastguard WorkerBenchmark                                                          Mode  Cnt       Score      Error   Units
98*78c4dd6aSAndroid Build Coastguard WorkerNetworkntBenchmark.testValidate                                   thrpt   10    6776.693 ±  115.309   ops/s
99*78c4dd6aSAndroid Build Coastguard WorkerNetworkntBenchmark.testValidategc.alloc.rate                    thrpt   10     971.191 ±   16.420  MB/sec
100*78c4dd6aSAndroid Build Coastguard WorkerNetworkntBenchmark.testValidategc.alloc.rate.norm               thrpt   10  165318.816 ±    0.459    B/op
101*78c4dd6aSAndroid Build Coastguard WorkerNetworkntBenchmark.testValidategc.churn.G1_Eden_Space           thrpt   10     968.894 ±   51.234  MB/sec
102*78c4dd6aSAndroid Build Coastguard WorkerNetworkntBenchmark.testValidategc.churn.G1_Eden_Space.norm      thrpt   10  164933.962 ± 8636.203    B/op
103*78c4dd6aSAndroid Build Coastguard WorkerNetworkntBenchmark.testValidategc.churn.G1_Survivor_Space       thrpt   10       0.002 ±    0.001  MB/sec
104*78c4dd6aSAndroid Build Coastguard WorkerNetworkntBenchmark.testValidategc.churn.G1_Survivor_Space.norm  thrpt   10       0.274 ±    0.218    B/op
105*78c4dd6aSAndroid Build Coastguard WorkerNetworkntBenchmark.testValidategc.count                         thrpt   10      89.000             counts
106*78c4dd6aSAndroid Build Coastguard WorkerNetworkntBenchmark.testValidategc.time                          thrpt   10      99.000                 ms
107*78c4dd6aSAndroid Build Coastguard Worker```
108*78c4dd6aSAndroid Build Coastguard Worker
109*78c4dd6aSAndroid Build Coastguard Worker###### Everit 1.14.1
110*78c4dd6aSAndroid Build Coastguard Worker
111*78c4dd6aSAndroid Build Coastguard Worker```
112*78c4dd6aSAndroid Build Coastguard WorkerBenchmark                                                          Mode  Cnt       Score       Error   Units
113*78c4dd6aSAndroid Build Coastguard WorkerEveritBenchmark.testValidate                                      thrpt   10    3719.192 ±   125.592   ops/s
114*78c4dd6aSAndroid Build Coastguard WorkerEveritBenchmark.testValidategc.alloc.rate                       thrpt   10    1448.208 ±    74.746  MB/sec
115*78c4dd6aSAndroid Build Coastguard WorkerEveritBenchmark.testValidategc.alloc.rate.norm                  thrpt   10  449621.927 ±  7400.825    B/op
116*78c4dd6aSAndroid Build Coastguard WorkerEveritBenchmark.testValidategc.churn.G1_Eden_Space              thrpt   10    1446.397 ±    79.919  MB/sec
117*78c4dd6aSAndroid Build Coastguard WorkerEveritBenchmark.testValidategc.churn.G1_Eden_Space.norm         thrpt   10  449159.799 ± 18614.931    B/op
118*78c4dd6aSAndroid Build Coastguard WorkerEveritBenchmark.testValidategc.churn.G1_Survivor_Space          thrpt   10       0.001 ±     0.001  MB/sec
119*78c4dd6aSAndroid Build Coastguard WorkerEveritBenchmark.testValidategc.churn.G1_Survivor_Space.norm     thrpt   10       0.364 ±     0.391    B/op
120*78c4dd6aSAndroid Build Coastguard WorkerEveritBenchmark.testValidategc.count                            thrpt   10     133.000              counts
121*78c4dd6aSAndroid Build Coastguard WorkerEveritBenchmark.testValidategc.time                             thrpt   10     148.000                  ms
122*78c4dd6aSAndroid Build Coastguard Worker```
123*78c4dd6aSAndroid Build Coastguard Worker
124*78c4dd6aSAndroid Build Coastguard Worker### 1.3.0
125*78c4dd6aSAndroid Build Coastguard Worker
126*78c4dd6aSAndroid Build Coastguard WorkerThis adds support for Draft 2020-12
127*78c4dd6aSAndroid Build Coastguard Worker
128*78c4dd6aSAndroid Build Coastguard WorkerThis adds support for the following keywords
129*78c4dd6aSAndroid Build Coastguard Worker* `$dynamicRef`
130*78c4dd6aSAndroid Build Coastguard Worker* `$dynamicAnchor`
131*78c4dd6aSAndroid Build Coastguard Worker* `$vocabulary`
132*78c4dd6aSAndroid Build Coastguard Worker
133*78c4dd6aSAndroid Build Coastguard WorkerThis refactors the schema retrieval codes as the ID is based on IRI and not URI.
134*78c4dd6aSAndroid Build Coastguard Worker
135*78c4dd6aSAndroid Build Coastguard WorkerNote that Java does not support IRIs. See https://cr.openjdk.org/%7Edfuchs/writeups/updating-uri/ for details.
136*78c4dd6aSAndroid Build Coastguard Worker
137*78c4dd6aSAndroid Build Coastguard WorkerThe following are removed and replaced by `SchemaLoader` and `SchemaMapper`.
138*78c4dd6aSAndroid Build Coastguard Worker* `URIFactory` - No replacement. The resolve logic is in `AbsoluteIRI`.
139*78c4dd6aSAndroid Build Coastguard Worker* `URISchemeFactory` - No replacement as `URIFactory` isn't required anymore.
140*78c4dd6aSAndroid Build Coastguard Worker* `URISchemeFetcher` - No replacement. The `SchemaLoaders` are iterated and called.
141*78c4dd6aSAndroid Build Coastguard Worker* `URITranslator` - Replaced by `SchemaMapper`.
142*78c4dd6aSAndroid Build Coastguard Worker* `URLFactory` - No replacement as `URIFactory` isn't required anymore.
143*78c4dd6aSAndroid Build Coastguard Worker* `URLFetcher` - Replaced by `UriSchemaLoader`.
144*78c4dd6aSAndroid Build Coastguard Worker* `URNURIFactory` - No replacement as `URIFactory` isn't required anymore.
145*78c4dd6aSAndroid Build Coastguard Worker
146*78c4dd6aSAndroid Build Coastguard WorkerThe `SchemaLoader` and `SchemaMapper` are configured in the `JsonSchemaFactory.Builder`. See [Customizing Schema Retrieval](schema-retrieval.md).
147*78c4dd6aSAndroid Build Coastguard Worker
148*78c4dd6aSAndroid Build Coastguard WorkerAs per the specification. The `format` keyword since Draft 2019-09 no longer generates assertions by default.
149*78c4dd6aSAndroid Build Coastguard Worker
150*78c4dd6aSAndroid Build Coastguard WorkerThis can be changed by using a custom meta schema with the relevant `$vocabulary` or by setting the execution configuration to enable format assertions.
151*78c4dd6aSAndroid Build Coastguard Worker
152*78c4dd6aSAndroid Build Coastguard Worker### 1.2.0
153*78c4dd6aSAndroid Build Coastguard Worker
154*78c4dd6aSAndroid Build Coastguard WorkerThe following are a summary of the changes
155*78c4dd6aSAndroid Build Coastguard Worker* Paths are now specified using the `JsonNodePath`. The paths are `instanceLocation`, `schemaLocation` and `evaluationPath`. The meaning of these paths are as defined in the [specification](https://github.com/json-schema-org/json-schema-spec/blob/main/jsonschema-validation-output-machines.md).
156*78c4dd6aSAndroid Build Coastguard Worker* Schema Location comprises an absolute IRI component and a fragment that is a `JsonNodePath` that is typically a JSON pointer
157*78c4dd6aSAndroid Build Coastguard Worker* Rename `at` to `instanceLocation`. Note that for the `required` validator the error message `instanceLocation` does not point to the missing property to be consistent with the [specification](https://json-schema.org/draft/2020-12/json-schema-core#section-12.4.2).  The `ValidationMessage` now contains a `property` attribute if this is required.
158*78c4dd6aSAndroid Build Coastguard Worker* Rename `schemaPath` to `schemaLocation`. This should generally be an absolute IRI with a fragment particularly in later drafts.
159*78c4dd6aSAndroid Build Coastguard Worker* Add `evaluationPath`
160*78c4dd6aSAndroid Build Coastguard Worker
161*78c4dd6aSAndroid Build Coastguard Worker`JsonValidator`
162*78c4dd6aSAndroid Build Coastguard Worker* Now contains `getSchemaLocation` and `getEvaluationPath` in the interface
163*78c4dd6aSAndroid Build Coastguard Worker* Implementations now need a constructor that takes in `schemaLocation` and `evaluationPath`
164*78c4dd6aSAndroid Build Coastguard Worker* The `validate` method uses `JsonNodePath` for the `instanceLocation`
165*78c4dd6aSAndroid Build Coastguard Worker* The `validate` method with just the `rootNode` has been removed
166*78c4dd6aSAndroid Build Coastguard Worker
167*78c4dd6aSAndroid Build Coastguard Worker`JsonSchemaWalker`
168*78c4dd6aSAndroid Build Coastguard Worker* The `walk` method uses `JsonNodePath` for the `instanceLocation`
169*78c4dd6aSAndroid Build Coastguard Worker
170*78c4dd6aSAndroid Build Coastguard Worker`WalkEvent`
171*78c4dd6aSAndroid Build Coastguard Worker* Rename `at` to `instanceLocation`
172*78c4dd6aSAndroid Build Coastguard Worker* Rename `schemaPath` to `schemaLocation`
173*78c4dd6aSAndroid Build Coastguard Worker* Add `evaluationPath`
174*78c4dd6aSAndroid Build Coastguard Worker* Rename `keyWordName` to `keyword`
175*78c4dd6aSAndroid Build Coastguard Worker
176*78c4dd6aSAndroid Build Coastguard Worker`WalkListenerRunner`
177*78c4dd6aSAndroid Build Coastguard Worker* Rename `at` to `instanceLocation`
178*78c4dd6aSAndroid Build Coastguard Worker* Rename `schemaPath` to `schemaLocation`
179*78c4dd6aSAndroid Build Coastguard Worker* Add `evaluationPath`
180*78c4dd6aSAndroid Build Coastguard Worker
181*78c4dd6aSAndroid Build Coastguard Worker`BaseJsonValidator`
182*78c4dd6aSAndroid Build Coastguard Worker* The `atPath` methods are removed. Use `JsonNodePath.append` to get the path of the child
183*78c4dd6aSAndroid Build Coastguard Worker* The `buildValidationMessage` methods are removed. Use the `message` builder method instead.
184*78c4dd6aSAndroid Build Coastguard Worker
185*78c4dd6aSAndroid Build Coastguard Worker`CollectorContext`
186*78c4dd6aSAndroid Build Coastguard Worker* The `evaluatedProperties` and `evaluatedItems` are now `Collection<JsonNodePath>`
187*78c4dd6aSAndroid Build Coastguard Worker
188*78c4dd6aSAndroid Build Coastguard Worker`JsonSchema`
189*78c4dd6aSAndroid Build Coastguard Worker* The validator keys are now using `evaluationPath` instead of `schemaPath`
190*78c4dd6aSAndroid Build Coastguard Worker* The `@deprecated` constructor methods have been removed
191*78c4dd6aSAndroid Build Coastguard Worker
192*78c4dd6aSAndroid Build Coastguard Worker`ValidatorTypeCode`
193*78c4dd6aSAndroid Build Coastguard Worker* The `customMessage` has been removed. This made the `ValidatorTypeCode` mutable if the feature was used as the enum is a shared instance. The logic for determining the `customMessage` has been moved to the validator.
194*78c4dd6aSAndroid Build Coastguard Worker* The creation of `newValidator` instances now uses a functional interface instead of reflection.
195*78c4dd6aSAndroid Build Coastguard Worker
196*78c4dd6aSAndroid Build Coastguard Worker`ValidatorState`
197*78c4dd6aSAndroid Build Coastguard Worker* The `ValidatorState` is now a property of the `ExecutionContext`. This change is largely to improve performance. The `CollectorContext.get` method is particularly slow for this use case.
198*78c4dd6aSAndroid Build Coastguard Worker
199*78c4dd6aSAndroid Build Coastguard Worker### 1.1.0
200*78c4dd6aSAndroid Build Coastguard Worker
201*78c4dd6aSAndroid Build Coastguard WorkerRemoves use of `ThreadLocal` to store context and explicitly passes the context as a parameter where needed.
202*78c4dd6aSAndroid Build Coastguard Worker
203*78c4dd6aSAndroid Build Coastguard WorkerThe following are the main API changes, typically to accept an `ExecutionContext` as a parameter
204*78c4dd6aSAndroid Build Coastguard Worker
205*78c4dd6aSAndroid Build Coastguard Worker* `com.networknt.schema.JsonSchema`
206*78c4dd6aSAndroid Build Coastguard Worker* `com.networknt.schema.JsonValidator`
207*78c4dd6aSAndroid Build Coastguard Worker* `com.networknt.schema.Format`
208*78c4dd6aSAndroid Build Coastguard Worker* `com.networknt.schema.walk.JsonSchemaWalker`
209*78c4dd6aSAndroid Build Coastguard Worker* `com.networknt.schema.walk.WalkEvent`
210*78c4dd6aSAndroid Build Coastguard Worker
211*78c4dd6aSAndroid Build Coastguard Worker`JsonSchema` was modified to optionally accept an `ExecutionContext` for the `validate`, `validateAndCollect` and `walk` methods. For methods where no `ExecutionContext` is supplied, one is created for each run in the `createExecutionContext` method in `JsonSchema`.
212*78c4dd6aSAndroid Build Coastguard Worker
213*78c4dd6aSAndroid Build Coastguard Worker`ValidationResult` was modified to store the `ExecutionContext` of the run which is also a means of reusing the context, by passing this context information from the `ValidationResult` to following runs.
214*78c4dd6aSAndroid Build Coastguard Worker
215*78c4dd6aSAndroid Build Coastguard Worker### 1.0.82
216*78c4dd6aSAndroid Build Coastguard Worker
217*78c4dd6aSAndroid Build Coastguard WorkerUp to version [1.0.81](https://github.com/networknt/json-schema-validator/blob/1.0.81/pom.xml#L99), the dependency `org.apache.commons:commons-lang3` was included as a runtime dependency. Starting with [1.0.82](https://github.com/networknt/json-schema-validator/releases/tag/1.0.82) it is not required anymore.