@@ -6,31 +6,99 @@ In the event a schema references a schema identifier that is not a subschema res
6
6
7
7
In the event that the schema does not define a schema identifier using the ` $id ` keyword, the retrieval IRI will be used as it's schema identifier.
8
8
9
+ ## Loading Schemas from memory
10
+
11
+ Schemas can be loaded through a map.
12
+
13
+ ``` java
14
+ String schemaData = " {\r\n "
15
+ + " \" type\" : \" integer\"\r\n "
16
+ + " }" ;
17
+ Map<String , String > schemas = Collections . singletonMap(" https://www.example.com/integer.json" , schemaData);
18
+ JsonSchemaFactory schemaFactory = JsonSchemaFactory
19
+ .getInstance(VersionFlag . V7 ,
20
+ builder - > builder. schemaLoaders(schemaLoaders - > schemaLoaders. schemas(schemas)));
21
+ ```
22
+
23
+ Schemas can be loaded through a function.
24
+
25
+ ``` java
26
+ String schemaData = " {\r\n "
27
+ + " \" type\" : \" integer\"\r\n "
28
+ + " }" ;
29
+ Map<String , String > schemas = Collections . singletonMap(" https://www.example.com/integer.json" , schemaData);
30
+ JsonSchemaFactory schemaFactory = JsonSchemaFactory
31
+ .getInstance(VersionFlag . V7 ,
32
+ builder - > builder. schemaLoaders(schemaLoaders - > schemaLoaders. schemas(schemas:: get)));
33
+ ```
34
+
35
+ Schemas can also be loaded in the following manner.
36
+
37
+ ``` java
38
+ class RegistryEntry {
39
+ private final String schemaData;
40
+
41
+ public RegistryEntry (String schemaData ) {
42
+ this . schemaData = schemaData;
43
+ }
44
+
45
+ public String getSchemaData () {
46
+ return this . schemaData;
47
+ }
48
+ }
49
+ String schemaData = " {\r\n "
50
+ + " \" type\" : \" integer\"\r\n "
51
+ + " }" ;
52
+ Map<String , RegistryEntry > registry = Collections
53
+ .singletonMap(" https://www.example.com/integer.json" , new RegistryEntry (schemaData));
54
+ JsonSchemaFactory schemaFactory = JsonSchemaFactory
55
+ .getInstance(VersionFlag . V7 , builder - > builder
56
+ .schemaLoaders(schemaLoaders - > schemaLoaders. schemas(registry:: get, RegistryEntry :: getSchemaData)));
57
+ ```
58
+
9
59
## Mapping Schema Identifier to Retrieval IRI
10
60
11
61
The schema identifier can be mapped to the retrieval IRI by implementing the ` SchemaMapper ` interface.
12
62
13
63
### Configuring Schema Mapper
14
64
15
65
``` java
16
- JsonSchemaFactory schemaFactory = JsonSchemaFactory . builder()
17
- .schemaMappers(schemaMappers - > schemaMappers
18
- .add(new CustomSchemaMapper ())
19
- .addMetaSchema(JsonMetaSchema . getV7())
20
- .defaultMetaSchemaURI(JsonMetaSchema . getV7(). getUri())
21
- .build();
66
+ class CustomSchemaMapper implements SchemaMapper {
67
+ @Override
68
+ public AbsoluteIri map (AbsoluteIri absoluteIRI ) {
69
+ String iri = absoluteIRI. toString();
70
+ if (" https://www.example.com/integer.json" . equals(iri)) {
71
+ return AbsoluteIri . of(" classpath:schemas/integer.json" );
72
+ }
73
+ return null ;
74
+ }
75
+ }
76
+
77
+ JsonSchemaFactory schemaFactory = JsonSchemaFactory
78
+ .getInstance(VersionFlag . V7 ,
79
+ builder - > builder. schemaMappers(schemaMappers - > schemaMappers. add(new CustomSchemaMapper ())));
22
80
```
23
81
24
82
### Configuring Prefix Mappings
25
83
26
84
``` java
27
- JsonSchemaFactory schemaFactory = JsonSchemaFactory . builder()
28
- .schemaMappers(schemaMappers - > schemaMappers
29
- .mapPrefix(" https://" , " http://" )
30
- .mapPrefix(" http://json-schema.org" , " classpath:" ))
31
- .addMetaSchema(JsonMetaSchema . getV7())
32
- .defaultMetaSchemaURI(JsonMetaSchema . getV7(). getUri())
33
- .build();
85
+ JsonSchemaFactory schemaFactory = JsonSchemaFactory
86
+ .getInstance(VersionFlag . V7 ,
87
+ builder - > builder
88
+ .schemaMappers(schemaMappers - > schemaMappers
89
+ .mapPrefix(" https://json-schema.org" , " classpath:" )
90
+ .mapPrefix(" http://json-schema.org" , " classpath:" )));
91
+ ```
92
+
93
+ ### Configuring Mappings
94
+
95
+ ``` java
96
+ Map<String , String > mappings = Collections
97
+ .singletonMap(" https://www.example.com/integer.json" , " classpath:schemas/integer.json" );
98
+
99
+ JsonSchemaFactory schemaFactory = JsonSchemaFactory
100
+ .getInstance(VersionFlag . V7 ,
101
+ builder - > builder. schemaMappers(schemaMappers - > schemaMappers. mappings(mappings)));
34
102
```
35
103
36
104
## Customizing Network Schema Retrieval
@@ -86,13 +154,7 @@ Within the `JsonSchemaFactory` the custom `SchemaLoader` must be configured.
86
154
``` java
87
155
CustomUriSchemaLoader uriSchemaLoader = new CustomUriSchemaLoader (authorizationToken);
88
156
89
- JsonSchemaFactory schemaFactory = JsonSchemaFactory . builder()
90
- .schemaLoaders(schemaLoaders - > schemaLoaders. add(uriSchemaLoader))
91
- .addMetaSchema(JsonMetaSchema . getV7())
92
- .defaultMetaSchemaURI(JsonMetaSchema . getV7(). getUri())
93
- .build();
94
- JsonSchema jsonSchema = schemaFactory. getSchema(schemaUri);
95
- for (ValidationMessage validationMessage : jsonSchema. validate(jsonNodeRecord)) {
96
- // handle the validation messages
97
- }
157
+ JsonSchemaFactory schemaFactory = JsonSchemaFactory
158
+ .getInstance(VersionFlag . V7 ,
159
+ builder - > builder. schemaLoaders(schemaLoaders - > schemaLoaders. add(uriSchemaLoader)));
98
160
```
0 commit comments