42
42
import com .networknt .schema .uri .URLFactory ;
43
43
import com .networknt .schema .uri .URLFetcher ;
44
44
import com .networknt .schema .urn .URNFactory ;
45
- import com .networknt .schema .walk .KeywordWalkListener ;
45
+ import com .networknt .schema .walk .WalkListener ;
46
46
47
47
public class JsonSchemaFactory {
48
48
private static final Logger logger = LoggerFactory
@@ -59,7 +59,8 @@ public static class Builder {
59
59
private URNFactory urnFactory ;
60
60
private final Map <String , JsonMetaSchema > jsonMetaSchemas = new HashMap <String , JsonMetaSchema >();
61
61
private final Map <String , String > uriMap = new HashMap <String , String >();
62
- private final Map <String , List <KeywordWalkListener >> keywordWalkListenersMap = new HashMap <String , List <KeywordWalkListener >>();
62
+ private final Map <String , List <WalkListener >> keywordWalkListenersMap = new HashMap <String , List <WalkListener >>();
63
+ private final List <WalkListener > propertyWalkListeners = new ArrayList <WalkListener >();
63
64
64
65
public Builder () {
65
66
// Adds support for creating {@link URL}s.
@@ -143,42 +144,52 @@ public Builder addUrnFactory(URNFactory urnFactory) {
143
144
return this ;
144
145
}
145
146
146
- public Builder addKeywordWalkListener (KeywordWalkListener keywordWalkListener ) {
147
+ public Builder addKeywordWalkListener (WalkListener keywordWalkListener ) {
147
148
if (keywordWalkListenersMap .get (ALL_KEYWORD_WALK_LISTENER_KEY ) == null ) {
148
- List <KeywordWalkListener > keywordWalkListeners = new ArrayList <KeywordWalkListener >();
149
+ List <WalkListener > keywordWalkListeners = new ArrayList <WalkListener >();
149
150
keywordWalkListenersMap .put (ALL_KEYWORD_WALK_LISTENER_KEY , keywordWalkListeners );
150
151
}
151
152
keywordWalkListenersMap .get (ALL_KEYWORD_WALK_LISTENER_KEY ).add (keywordWalkListener );
152
153
return this ;
153
154
}
154
155
155
- public Builder addKeywordWalkListener (String keyword , KeywordWalkListener keywordWalkListener ) {
156
+ public Builder addKeywordWalkListener (String keyword , WalkListener keywordWalkListener ) {
156
157
if (keywordWalkListenersMap .get (keyword ) == null ) {
157
- List <KeywordWalkListener > keywordWalkListeners = new ArrayList <KeywordWalkListener >();
158
+ List <WalkListener > keywordWalkListeners = new ArrayList <WalkListener >();
158
159
keywordWalkListenersMap .put (keyword , keywordWalkListeners );
159
160
}
160
161
keywordWalkListenersMap .get (keyword ).add (keywordWalkListener );
161
162
return this ;
162
163
}
163
164
164
165
165
- public Builder addKeywordWalkListeners (List <KeywordWalkListener > keywordWalkListeners ) {
166
+ public Builder addKeywordWalkListeners (List <WalkListener > keywordWalkListeners ) {
166
167
if (keywordWalkListenersMap .get (ALL_KEYWORD_WALK_LISTENER_KEY ) == null ) {
167
- List <KeywordWalkListener > ikeywordWalkListeners = new ArrayList <KeywordWalkListener >();
168
+ List <WalkListener > ikeywordWalkListeners = new ArrayList <WalkListener >();
168
169
keywordWalkListenersMap .put (ALL_KEYWORD_WALK_LISTENER_KEY , ikeywordWalkListeners );
169
170
}
170
171
keywordWalkListenersMap .get (ALL_KEYWORD_WALK_LISTENER_KEY ).addAll (keywordWalkListeners );
171
172
return this ;
172
173
}
173
174
174
- public Builder addKeywordWalkListeners (String keyword , List <KeywordWalkListener > keywordWalkListeners ) {
175
+ public Builder addKeywordWalkListeners (String keyword , List <WalkListener > keywordWalkListeners ) {
175
176
if (keywordWalkListenersMap .get (keyword ) == null ) {
176
- List <KeywordWalkListener > ikeywordWalkListeners = new ArrayList <KeywordWalkListener >();
177
+ List <WalkListener > ikeywordWalkListeners = new ArrayList <WalkListener >();
177
178
keywordWalkListenersMap .put (keyword , ikeywordWalkListeners );
178
179
}
179
180
keywordWalkListenersMap .get (keyword ).addAll (keywordWalkListeners );
180
181
return this ;
181
182
}
183
+
184
+ public Builder addPropertyWalkListeners (List <WalkListener > propertyWalkListeners ) {
185
+ this .propertyWalkListeners .addAll (propertyWalkListeners );
186
+ return this ;
187
+ }
188
+
189
+ public Builder addPropertyWalkListener (WalkListener propertyWalkListener ) {
190
+ this .propertyWalkListeners .add (propertyWalkListener );
191
+ return this ;
192
+ }
182
193
183
194
public JsonSchemaFactory build () {
184
195
// create builtin keywords with (custom) formats.
@@ -190,7 +201,8 @@ public JsonSchemaFactory build() {
190
201
urnFactory ,
191
202
jsonMetaSchemas ,
192
203
uriMap ,
193
- keywordWalkListenersMap
204
+ keywordWalkListenersMap ,
205
+ propertyWalkListeners
194
206
);
195
207
}
196
208
}
@@ -203,7 +215,8 @@ public JsonSchemaFactory build() {
203
215
private final Map <String , JsonMetaSchema > jsonMetaSchemas ;
204
216
private final Map <String , String > uriMap ;
205
217
private final ConcurrentMap <URI , JsonSchema > uriSchemaCache = new ConcurrentHashMap <URI , JsonSchema >();
206
- private final Map <String , List <KeywordWalkListener >> keywordWalkListenersMap ;
218
+ private final Map <String , List <WalkListener >> keywordWalkListenersMap ;
219
+ private final List <WalkListener > propertyWalkListeners ;
207
220
208
221
209
222
private JsonSchemaFactory (
@@ -214,7 +227,8 @@ private JsonSchemaFactory(
214
227
final URNFactory urnFactory ,
215
228
final Map <String , JsonMetaSchema > jsonMetaSchemas ,
216
229
final Map <String , String > uriMap ,
217
- final Map <String , List <KeywordWalkListener >> keywordWalkListenersMap ) {
230
+ final Map <String , List <WalkListener >> keywordWalkListenersMap ,
231
+ final List <WalkListener > propertyWalkListeners ) {
218
232
if (mapper == null ) {
219
233
throw new IllegalArgumentException ("ObjectMapper must not be null" );
220
234
} else if (defaultMetaSchemaURI == null || defaultMetaSchemaURI .trim ().isEmpty ()) {
@@ -238,6 +252,7 @@ private JsonSchemaFactory(
238
252
this .jsonMetaSchemas = jsonMetaSchemas ;
239
253
this .uriMap = uriMap ;
240
254
this .keywordWalkListenersMap = keywordWalkListenersMap ;
255
+ this .propertyWalkListeners = propertyWalkListeners ;
241
256
}
242
257
243
258
/**
@@ -311,7 +326,8 @@ protected JsonSchema newJsonSchema(final URI schemaUri, final JsonNode schemaNod
311
326
312
327
protected ValidationContext createValidationContext (final JsonNode schemaNode ) {
313
328
final JsonMetaSchema jsonMetaSchema = findMetaSchemaForSchema (schemaNode );
314
- return new ValidationContext (this .uriFactory , this .urnFactory , jsonMetaSchema , this , null , this .keywordWalkListenersMap );
329
+ return new ValidationContext (this .uriFactory , this .urnFactory , jsonMetaSchema , this , null ,
330
+ this .keywordWalkListenersMap , this .propertyWalkListeners );
315
331
}
316
332
317
333
private JsonMetaSchema findMetaSchemaForSchema (final JsonNode schemaNode ) {
@@ -383,7 +399,10 @@ public JsonSchema getSchema(final URI schemaUri, final SchemaValidatorsConfig co
383
399
384
400
JsonSchema jsonSchema ;
385
401
if (idMatchesSourceUri (jsonMetaSchema , schemaNode , schemaUri )) {
386
- jsonSchema = new JsonSchema (new ValidationContext (this .uriFactory , this .urnFactory , jsonMetaSchema , this , config , this .keywordWalkListenersMap ), mappedUri , schemaNode , true /*retrieved via id, resolving will not change anything*/ );
402
+ jsonSchema = new JsonSchema (
403
+ new ValidationContext (this .uriFactory , this .urnFactory , jsonMetaSchema , this , config ,
404
+ this .keywordWalkListenersMap , this .propertyWalkListeners ),
405
+ mappedUri , schemaNode , true /* retrieved via id, resolving will not change anything */ );
387
406
} else {
388
407
final ValidationContext validationContext = createValidationContext (schemaNode );
389
408
validationContext .setConfig (config );
0 commit comments