@@ -6,31 +6,100 @@ 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
+
50
+ String schemaData = " {\r\n "
51
+ + " \" type\" : \" integer\"\r\n "
52
+ + " }" ;
53
+ Map<String , RegistryEntry > registry = Collections
54
+ .singletonMap(" https://www.example.com/integer.json" , new RegistryEntry (schemaData));
55
+ JsonSchemaFactory schemaFactory = JsonSchemaFactory
56
+ .getInstance(VersionFlag . V7 , builder - > builder
57
+ .schemaLoaders(schemaLoaders - > schemaLoaders. schemas(registry:: get, RegistryEntry :: getSchemaData)));
58
+ ```
59
+
9
60
## Mapping Schema Identifier to Retrieval IRI
10
61
11
62
The schema identifier can be mapped to the retrieval IRI by implementing the ` SchemaMapper ` interface.
12
63
13
64
### Configuring Schema Mapper
14
65
15
66
``` 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();
67
+ class CustomSchemaMapper implements SchemaMapper {
68
+ @Override
69
+ public AbsoluteIri map (AbsoluteIri absoluteIRI ) {
70
+ String iri = absoluteIRI. toString();
71
+ if (" https://www.example.com/integer.json" . equals(iri)) {
72
+ return AbsoluteIri . of(" classpath:schemas/integer.json" );
73
+ }
74
+ return null ;
75
+ }
76
+ }
77
+
78
+ JsonSchemaFactory schemaFactory = JsonSchemaFactory
79
+ .getInstance(VersionFlag . V7 ,
80
+ builder - > builder. schemaMappers(schemaMappers - > schemaMappers. add(new CustomSchemaMapper ())));
22
81
```
23
82
24
83
### Configuring Prefix Mappings
25
84
26
85
``` 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();
86
+ JsonSchemaFactory schemaFactory = JsonSchemaFactory
87
+ .getInstance(VersionFlag . V7 ,
88
+ builder - > builder
89
+ .schemaMappers(schemaMappers - > schemaMappers
90
+ .mapPrefix(" https://json-schema.org" , " classpath:" )
91
+ .mapPrefix(" http://json-schema.org" , " classpath:" )));
92
+ ```
93
+
94
+ ### Configuring Mappings
95
+
96
+ ``` java
97
+ Map<String , String > mappings = Collections
98
+ .singletonMap(" https://www.example.com/integer.json" , " classpath:schemas/integer.json" );
99
+
100
+ JsonSchemaFactory schemaFactory = JsonSchemaFactory
101
+ .getInstance(VersionFlag . V7 ,
102
+ builder - > builder. schemaMappers(schemaMappers - > schemaMappers. mappings(mappings)));
34
103
```
35
104
36
105
## Customizing Network Schema Retrieval
@@ -45,11 +114,8 @@ The `SchemaLoader` interface must implemented and the implementation configured
45
114
46
115
``` java
47
116
public class CustomUriSchemaLoader implements SchemaLoader {
48
-
49
117
private static final Logger LOGGER = LoggerFactory . getLogger(CustomUriSchemaLoader . class);
50
-
51
118
private final String authorizationToken;
52
-
53
119
private final HttpClient client;
54
120
55
121
public CustomUriSchemaLoader (String authorizationToken ) {
@@ -86,13 +152,7 @@ Within the `JsonSchemaFactory` the custom `SchemaLoader` must be configured.
86
152
``` java
87
153
CustomUriSchemaLoader uriSchemaLoader = new CustomUriSchemaLoader (authorizationToken);
88
154
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
- }
155
+ JsonSchemaFactory schemaFactory = JsonSchemaFactory
156
+ .getInstance(VersionFlag . V7 ,
157
+ builder - > builder. schemaLoaders(schemaLoaders - > schemaLoaders. add(uriSchemaLoader)));
98
158
```
0 commit comments