Skip to content

Commit 59a5d7e

Browse files
committed
changing StringSchemaValidatingVisitor to handle the nullable flag by calling ValidatingVisitor#passesTypeCheck()
1 parent b7f7b53 commit 59a5d7e

File tree

3 files changed

+15
-13
lines changed

3 files changed

+15
-13
lines changed

core/src/main/java/org/everit/json/schema/StringSchemaValidatingVisitor.java

Lines changed: 8 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -14,19 +14,15 @@ public class StringSchemaValidatingVisitor extends Visitor {
1414

1515
private int stringLength;
1616

17-
private final ValidationFailureReporter failureReporter;
17+
private final ValidatingVisitor owner;
1818

19-
public StringSchemaValidatingVisitor(Object subject, ValidationFailureReporter failureReporter) {
19+
public StringSchemaValidatingVisitor(Object subject, ValidatingVisitor owner) {
2020
this.subject = subject;
21-
this.failureReporter = requireNonNull(failureReporter, "failureReporter cannot be null");
21+
this.owner = requireNonNull(owner, "failureReporter cannot be null");
2222
}
2323

2424
@Override void visitStringSchema(StringSchema stringSchema) {
25-
if (!(subject instanceof String)) {
26-
if (stringSchema.requireString()) {
27-
failureReporter.failure(String.class, subject);
28-
}
29-
} else {
25+
if (owner.passesTypeCheck(String.class, stringSchema.requireString(), stringSchema.isNullable())) {
3026
stringSubject = (String) subject;
3127
stringLength = stringSubject.codePointCount(0, stringSubject.length());
3228
super.visitStringSchema(stringSchema);
@@ -35,14 +31,14 @@ public StringSchemaValidatingVisitor(Object subject, ValidationFailureReporter f
3531

3632
@Override void visitMinLength(Integer minLength) {
3733
if (minLength != null && stringLength < minLength.intValue()) {
38-
failureReporter.failure("expected minLength: " + minLength + ", actual: "
34+
owner.failure("expected minLength: " + minLength + ", actual: "
3935
+ stringLength, "minLength");
4036
}
4137
}
4238

4339
@Override void visitMaxLength(Integer maxLength) {
4440
if (maxLength != null && stringLength > maxLength.intValue()) {
45-
failureReporter.failure("expected maxLength: " + maxLength + ", actual: "
41+
owner.failure("expected maxLength: " + maxLength + ", actual: "
4642
+ stringLength, "maxLength");
4743
}
4844
}
@@ -51,14 +47,14 @@ public StringSchemaValidatingVisitor(Object subject, ValidationFailureReporter f
5147
if (pattern != null && !pattern.matcher(stringSubject).find()) {
5248
String message = format("string [%s] does not match pattern %s",
5349
subject, pattern.pattern());
54-
failureReporter.failure(message, "pattern");
50+
owner.failure(message, "pattern");
5551
}
5652
}
5753

5854
@Override void visitFormat(FormatValidator formatValidator) {
5955
Optional<String> failure = formatValidator.validate(stringSubject);
6056
if (failure.isPresent()) {
61-
failureReporter.failure(failure.get(), "format");
57+
owner.failure(failure.get(), "format");
6258
}
6359
}
6460

core/src/main/java/org/everit/json/schema/ValidatingVisitor.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -100,7 +100,7 @@ void visit(Schema schema) {
100100
}
101101

102102
@Override void visitStringSchema(StringSchema stringSchema) {
103-
stringSchema.accept(new StringSchemaValidatingVisitor(subject, failureReporter));
103+
stringSchema.accept(new StringSchemaValidatingVisitor(subject, this));
104104
}
105105

106106
@Override void visitCombinedSchema(CombinedSchema combinedSchema) {

core/src/test/java/org/everit/json/schema/StringSchemaTest.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -158,4 +158,10 @@ public void toStringNoExplicitType() {
158158
String actual = SchemaLoader.load(rawSchemaJson).toString();
159159
assertTrue(ObjectComparator.deepEquals(rawSchemaJson, new JSONObject(actual)));
160160
}
161+
162+
@Test
163+
public void requiresString_nullable() {
164+
Schema subject = StringSchema.builder().requiresString(true).nullable(true).build();
165+
subject.validate(JSONObject.NULL);
166+
}
161167
}

0 commit comments

Comments
 (0)