Skip to content

Commit 86c6ac6

Browse files
fduttonFaron Dutton
andauthored
Removes need for network access when executing unit-tests (#730)
Resolves #729 Co-authored-by: Faron Dutton <[email protected]>
1 parent cff8961 commit 86c6ac6

File tree

26 files changed

+1253
-8
lines changed

26 files changed

+1253
-8
lines changed

src/main/java/com/networknt/schema/uri/URITranslator.java

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
import java.util.Arrays;
66
import java.util.Collection;
77
import java.util.HashMap;
8+
import java.util.Locale;
89
import java.util.Map;
910
import java.util.Objects;
1011

@@ -58,6 +59,19 @@ static CompositeURITranslator combine(URITranslator... uriTranslators) {
5859
return new CompositeURITranslator(uriTranslators);
5960
}
6061

62+
/**
63+
* Creates a mapping from one URI to another by replacing the beginning of the URI.
64+
* <p>
65+
* For example, replace http with https.
66+
*
67+
* @param source the search string
68+
* @param target the replacement string
69+
* @return a new URITranslator
70+
*/
71+
static URITranslator prefix(String source, String target) {
72+
return new PrefixReplacer(source, target);
73+
}
74+
6175
/**
6276
* Creates a CompositeURITranslator.
6377
* @param uriTranslators the translators to combine
@@ -119,4 +133,30 @@ public URI translate(URI original) {
119133

120134
}
121135

136+
/**
137+
* Replaces the beginning of a URI
138+
*/
139+
class PrefixReplacer implements URITranslator {
140+
private final String src;
141+
private final String tgt;
142+
143+
public PrefixReplacer(String src, String tgt) {
144+
this.src = src.toLowerCase(Locale.US);
145+
this.tgt = tgt;
146+
}
147+
148+
@Override
149+
public URI translate(URI original) {
150+
if (null != original) {
151+
String o = original.toASCIIString().toLowerCase(Locale.US);
152+
if (o.startsWith(src)) {
153+
o = tgt + o.substring(src.length());
154+
return URI.create(o);
155+
}
156+
}
157+
158+
return original;
159+
}
160+
161+
}
122162
}

src/main/resources/draft-04/schema

Lines changed: 149 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,149 @@
1+
{
2+
"id": "http://json-schema.org/draft-04/schema#",
3+
"$schema": "http://json-schema.org/draft-04/schema#",
4+
"description": "Core schema meta-schema",
5+
"definitions": {
6+
"schemaArray": {
7+
"type": "array",
8+
"minItems": 1,
9+
"items": { "$ref": "#" }
10+
},
11+
"positiveInteger": {
12+
"type": "integer",
13+
"minimum": 0
14+
},
15+
"positiveIntegerDefault0": {
16+
"allOf": [ { "$ref": "#/definitions/positiveInteger" }, { "default": 0 } ]
17+
},
18+
"simpleTypes": {
19+
"enum": [ "array", "boolean", "integer", "null", "number", "object", "string" ]
20+
},
21+
"stringArray": {
22+
"type": "array",
23+
"items": { "type": "string" },
24+
"minItems": 1,
25+
"uniqueItems": true
26+
}
27+
},
28+
"type": "object",
29+
"properties": {
30+
"id": {
31+
"type": "string"
32+
},
33+
"$schema": {
34+
"type": "string"
35+
},
36+
"title": {
37+
"type": "string"
38+
},
39+
"description": {
40+
"type": "string"
41+
},
42+
"default": {},
43+
"multipleOf": {
44+
"type": "number",
45+
"minimum": 0,
46+
"exclusiveMinimum": true
47+
},
48+
"maximum": {
49+
"type": "number"
50+
},
51+
"exclusiveMaximum": {
52+
"type": "boolean",
53+
"default": false
54+
},
55+
"minimum": {
56+
"type": "number"
57+
},
58+
"exclusiveMinimum": {
59+
"type": "boolean",
60+
"default": false
61+
},
62+
"maxLength": { "$ref": "#/definitions/positiveInteger" },
63+
"minLength": { "$ref": "#/definitions/positiveIntegerDefault0" },
64+
"pattern": {
65+
"type": "string",
66+
"format": "regex"
67+
},
68+
"additionalItems": {
69+
"anyOf": [
70+
{ "type": "boolean" },
71+
{ "$ref": "#" }
72+
],
73+
"default": {}
74+
},
75+
"items": {
76+
"anyOf": [
77+
{ "$ref": "#" },
78+
{ "$ref": "#/definitions/schemaArray" }
79+
],
80+
"default": {}
81+
},
82+
"maxItems": { "$ref": "#/definitions/positiveInteger" },
83+
"minItems": { "$ref": "#/definitions/positiveIntegerDefault0" },
84+
"uniqueItems": {
85+
"type": "boolean",
86+
"default": false
87+
},
88+
"maxProperties": { "$ref": "#/definitions/positiveInteger" },
89+
"minProperties": { "$ref": "#/definitions/positiveIntegerDefault0" },
90+
"required": { "$ref": "#/definitions/stringArray" },
91+
"additionalProperties": {
92+
"anyOf": [
93+
{ "type": "boolean" },
94+
{ "$ref": "#" }
95+
],
96+
"default": {}
97+
},
98+
"definitions": {
99+
"type": "object",
100+
"additionalProperties": { "$ref": "#" },
101+
"default": {}
102+
},
103+
"properties": {
104+
"type": "object",
105+
"additionalProperties": { "$ref": "#" },
106+
"default": {}
107+
},
108+
"patternProperties": {
109+
"type": "object",
110+
"additionalProperties": { "$ref": "#" },
111+
"default": {}
112+
},
113+
"dependencies": {
114+
"type": "object",
115+
"additionalProperties": {
116+
"anyOf": [
117+
{ "$ref": "#" },
118+
{ "$ref": "#/definitions/stringArray" }
119+
]
120+
}
121+
},
122+
"enum": {
123+
"type": "array",
124+
"minItems": 1,
125+
"uniqueItems": true
126+
},
127+
"type": {
128+
"anyOf": [
129+
{ "$ref": "#/definitions/simpleTypes" },
130+
{
131+
"type": "array",
132+
"items": { "$ref": "#/definitions/simpleTypes" },
133+
"minItems": 1,
134+
"uniqueItems": true
135+
}
136+
]
137+
},
138+
"format": { "type": "string" },
139+
"allOf": { "$ref": "#/definitions/schemaArray" },
140+
"anyOf": { "$ref": "#/definitions/schemaArray" },
141+
"oneOf": { "$ref": "#/definitions/schemaArray" },
142+
"not": { "$ref": "#" }
143+
},
144+
"dependencies": {
145+
"exclusiveMaximum": [ "maximum" ],
146+
"exclusiveMinimum": [ "minimum" ]
147+
},
148+
"default": {}
149+
}

src/main/resources/draft-06/schema

Lines changed: 155 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,155 @@
1+
{
2+
"$schema": "http://json-schema.org/draft-06/schema#",
3+
"$id": "http://json-schema.org/draft-06/schema#",
4+
"title": "Core schema meta-schema",
5+
"definitions": {
6+
"schemaArray": {
7+
"type": "array",
8+
"minItems": 1,
9+
"items": { "$ref": "#" }
10+
},
11+
"nonNegativeInteger": {
12+
"type": "integer",
13+
"minimum": 0
14+
},
15+
"nonNegativeIntegerDefault0": {
16+
"allOf": [
17+
{ "$ref": "#/definitions/nonNegativeInteger" },
18+
{ "default": 0 }
19+
]
20+
},
21+
"simpleTypes": {
22+
"enum": [
23+
"array",
24+
"boolean",
25+
"integer",
26+
"null",
27+
"number",
28+
"object",
29+
"string"
30+
]
31+
},
32+
"stringArray": {
33+
"type": "array",
34+
"items": { "type": "string" },
35+
"uniqueItems": true,
36+
"default": []
37+
}
38+
},
39+
"type": ["object", "boolean"],
40+
"properties": {
41+
"$id": {
42+
"type": "string",
43+
"format": "uri-reference"
44+
},
45+
"$schema": {
46+
"type": "string",
47+
"format": "uri"
48+
},
49+
"$ref": {
50+
"type": "string",
51+
"format": "uri-reference"
52+
},
53+
"title": {
54+
"type": "string"
55+
},
56+
"description": {
57+
"type": "string"
58+
},
59+
"default": {},
60+
"examples": {
61+
"type": "array",
62+
"items": {}
63+
},
64+
"multipleOf": {
65+
"type": "number",
66+
"exclusiveMinimum": 0
67+
},
68+
"maximum": {
69+
"type": "number"
70+
},
71+
"exclusiveMaximum": {
72+
"type": "number"
73+
},
74+
"minimum": {
75+
"type": "number"
76+
},
77+
"exclusiveMinimum": {
78+
"type": "number"
79+
},
80+
"maxLength": { "$ref": "#/definitions/nonNegativeInteger" },
81+
"minLength": { "$ref": "#/definitions/nonNegativeIntegerDefault0" },
82+
"pattern": {
83+
"type": "string",
84+
"format": "regex"
85+
},
86+
"additionalItems": { "$ref": "#" },
87+
"items": {
88+
"anyOf": [
89+
{ "$ref": "#" },
90+
{ "$ref": "#/definitions/schemaArray" }
91+
],
92+
"default": {}
93+
},
94+
"maxItems": { "$ref": "#/definitions/nonNegativeInteger" },
95+
"minItems": { "$ref": "#/definitions/nonNegativeIntegerDefault0" },
96+
"uniqueItems": {
97+
"type": "boolean",
98+
"default": false
99+
},
100+
"contains": { "$ref": "#" },
101+
"maxProperties": { "$ref": "#/definitions/nonNegativeInteger" },
102+
"minProperties": { "$ref": "#/definitions/nonNegativeIntegerDefault0" },
103+
"required": { "$ref": "#/definitions/stringArray" },
104+
"additionalProperties": { "$ref": "#" },
105+
"definitions": {
106+
"type": "object",
107+
"additionalProperties": { "$ref": "#" },
108+
"default": {}
109+
},
110+
"properties": {
111+
"type": "object",
112+
"additionalProperties": { "$ref": "#" },
113+
"default": {}
114+
},
115+
"patternProperties": {
116+
"type": "object",
117+
"additionalProperties": { "$ref": "#" },
118+
"propertyNames": { "format": "regex" },
119+
"default": {}
120+
},
121+
"dependencies": {
122+
"type": "object",
123+
"additionalProperties": {
124+
"anyOf": [
125+
{ "$ref": "#" },
126+
{ "$ref": "#/definitions/stringArray" }
127+
]
128+
}
129+
},
130+
"propertyNames": { "$ref": "#" },
131+
"const": {},
132+
"enum": {
133+
"type": "array",
134+
"minItems": 1,
135+
"uniqueItems": true
136+
},
137+
"type": {
138+
"anyOf": [
139+
{ "$ref": "#/definitions/simpleTypes" },
140+
{
141+
"type": "array",
142+
"items": { "$ref": "#/definitions/simpleTypes" },
143+
"minItems": 1,
144+
"uniqueItems": true
145+
}
146+
]
147+
},
148+
"format": { "type": "string" },
149+
"allOf": { "$ref": "#/definitions/schemaArray" },
150+
"anyOf": { "$ref": "#/definitions/schemaArray" },
151+
"oneOf": { "$ref": "#/definitions/schemaArray" },
152+
"not": { "$ref": "#" }
153+
},
154+
"default": {}
155+
}

0 commit comments

Comments
 (0)