Skip to content

Commit 86c2943

Browse files
committed
2 parents 821cc20 + c15ab15 commit 86c2943

File tree

5 files changed

+40
-5
lines changed

5 files changed

+40
-5
lines changed
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
package org.everit.json.schema.internal;
2+
3+
import java.net.URI;
4+
import java.net.URISyntaxException;
5+
import java.util.Optional;
6+
import org.everit.json.schema.FormatValidator;
7+
8+
public class URIV4FormatValidator implements FormatValidator {
9+
10+
@Override
11+
public Optional<String> validate(final String subject) {
12+
try {
13+
URI uri = new URI(subject);
14+
return Optional.empty();
15+
} catch (URISyntaxException | NullPointerException e) {
16+
return failure(subject);
17+
}
18+
}
19+
20+
protected Optional<String> failure(String subject) {
21+
return Optional.of(String.format("[%s] is not a valid URI", subject));
22+
}
23+
24+
@Override public String formatName() {
25+
return "uri";
26+
}
27+
}

core/src/main/java/org/everit/json/schema/loader/SpecificationVersion.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020
import org.everit.json.schema.internal.URIFormatValidator;
2121
import org.everit.json.schema.internal.URIReferenceFormatValidator;
2222
import org.everit.json.schema.internal.URITemplateFormatValidator;
23+
import org.everit.json.schema.internal.URIV4FormatValidator;
2324

2425
/**
2526
* @author erosb
@@ -109,7 +110,7 @@ private static final List<String> keywords(String... keywords) {
109110
static {
110111
Map<String, FormatValidator> formatValidators = new HashMap<>();
111112
formatValidators.put("date-time", new DateTimeFormatValidator());
112-
formatValidators.put("uri", new URIFormatValidator());
113+
formatValidators.put("uri", new URIV4FormatValidator());
113114
formatValidators.put("email", new EmailFormatValidator());
114115
formatValidators.put("ipv4", new IPV4Validator());
115116
formatValidators.put("ipv6", new IPV6Validator());
@@ -122,6 +123,7 @@ private static final List<String> keywords(String... keywords) {
122123
static {
123124
Map<String, FormatValidator> v6Validators = new HashMap<>(V4_VALIDATORS);
124125
v6Validators.put("json-pointer", new JsonPointerFormatValidator());
126+
v6Validators.put("uri", new URIFormatValidator());
125127
v6Validators.put("uri-reference", new URIReferenceFormatValidator());
126128
v6Validators.put("uri-template", new URITemplateFormatValidator());
127129
V6_VALIDATORS = unmodifiableMap(v6Validators);

core/src/test/java/org/everit/json/schema/internal/DefaultFormatValidatorTest.java

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -183,9 +183,14 @@ public void uriFailure() {
183183
}
184184

185185
@Test
186-
public void relativeURIRefFails() {
186+
public void relativeURIRefFailsInDraft6() {
187187
assertFailure("abc", new URIFormatValidator(), "[abc] is not a valid URI");
188188
}
189+
190+
@Test
191+
public void relativeURIRefSucceedsInDraft4() {
192+
assertSuccess("abc", new URIV4FormatValidator());
193+
}
189194
//
190195
// @Test
191196
// public void protocolRelativeUriSuccess() {

core/src/test/java/org/everit/json/schema/loader/SchemaLoaderTest.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
import static org.everit.json.schema.TestSupport.asStream;
55
import static org.everit.json.schema.TestSupport.loadAsV6;
66
import static org.everit.json.schema.TestSupport.v6Loader;
7+
import org.everit.json.schema.internal.URIV4FormatValidator;
78
import static org.everit.json.schema.loader.SpecificationVersion.DRAFT_6;
89
import static org.junit.Assert.assertEquals;
910
import static org.junit.Assert.assertFalse;
@@ -70,7 +71,7 @@ public void booleanSchema() {
7071
public void builderhasDefaultFormatValidators() {
7172
SchemaLoader actual = SchemaLoader.builder().schemaJson(get("booleanSchema")).build();
7273
assertTrue(actual.getFormatValidator("date-time").get() instanceof DateTimeFormatValidator);
73-
assertTrue(actual.getFormatValidator("uri").get() instanceof URIFormatValidator);
74+
assertTrue(actual.getFormatValidator("uri").get() instanceof URIV4FormatValidator);
7475
assertTrue(actual.getFormatValidator("email").get() instanceof EmailFormatValidator);
7576
assertTrue(actual.getFormatValidator("ipv4").get() instanceof IPV4Validator);
7677
assertTrue(actual.getFormatValidator("ipv6").get() instanceof IPV6Validator);

tests/src/test/resources/org/everit/json/schema/draft4/format.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -45,8 +45,8 @@
4545
},
4646
{
4747
"data": "abc",
48-
"description": "an invalid URI though valid URI reference",
49-
"valid": false
48+
"description": "a URI that actually is a valid URI reference",
49+
"valid": true
5050
}
5151
]
5252
},

0 commit comments

Comments
 (0)