Skip to content

Commit 1974f6a

Browse files
Improved Schema validation
1 parent cc37f86 commit 1974f6a

5 files changed

Lines changed: 192 additions & 144 deletions

File tree

src/main/java/io/frictionlessdata/tableschema/exception/ValidationException.java

Lines changed: 18 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -6,21 +6,34 @@
66
import java.util.ArrayList;
77
import java.util.Collection;
88
import java.util.List;
9+
import java.util.stream.Collectors;
910

1011
public class ValidationException extends TableSchemaException {
11-
12+
1213
List<ValidationMessage> validationMessages = new ArrayList<>();
1314

1415
public ValidationException(String msg) {
1516
super(msg);
1617
}
1718

1819
public ValidationException(Exception ex) {
19-
super(ex);
20+
String message = ex.getClass()+": "+ex.getMessage();
2021
}
2122

22-
public ValidationException(JsonSchema schema, Collection<ValidationMessage> message) {
23-
this(String.format("%s: %s", schema, "validation failed"));
24-
this.validationMessages.addAll(validationMessages);
23+
public ValidationException(JsonSchema schema, Collection<ValidationMessage> messages) {
24+
this(String.format("%s: %s", schema.getName(), "validation failed"));
25+
this.validationMessages.addAll(messages);
26+
}
27+
28+
public ValidationException(String name, Collection<ValidationException> errors) {
29+
super(String.format("%s: %s", name, "validation failed: "+errors.stream().map(Throwable::getMessage).collect(Collectors.joining("\n"))));
30+
errors.forEach((ex) -> {
31+
this.validationMessages.addAll(ex.validationMessages);
32+
});
33+
34+
}
35+
36+
public List<ValidationMessage> getValidationMessages() {
37+
return validationMessages;
2538
}
2639
}

src/main/java/io/frictionlessdata/tableschema/fk/ForeignKey.java

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -43,18 +43,18 @@ public ForeignKey(String json, boolean strict) throws ForeignKeyException{
4343

4444
if(fkJsonObject.has(JSON_KEY_FIELDS)){
4545
if(fkJsonObject.get(JSON_KEY_FIELDS).isArray()) {
46-
this.fields = fkJsonObject.get(JSON_KEY_FIELDS);
46+
fields = fkJsonObject.get(JSON_KEY_FIELDS);
4747
} else {
48-
this.fields = fkJsonObject.get(JSON_KEY_FIELDS).asText();
48+
fields = fkJsonObject.get(JSON_KEY_FIELDS).asText();
4949
}
5050
}
5151

5252
if(fkJsonObject.has(JSON_KEY_REFERENCE)){
5353
JsonNode refJsonObject = fkJsonObject.get(JSON_KEY_REFERENCE);
54-
this.reference = new Reference(refJsonObject.toString(), strict);
54+
reference = new Reference(refJsonObject.toString(), strict);
5555
}
5656

57-
this.validate();
57+
validate();
5858
}
5959

6060
public void setFields(Object fields){
@@ -101,7 +101,7 @@ public final void validate() throws ForeignKeyException{
101101
if(this.strictValidation){
102102
throw fke;
103103
}else{
104-
this.getErrors().add(fke);
104+
errors.add(fke);
105105
}
106106
}
107107

@@ -145,7 +145,7 @@ public String getJson(){
145145
}
146146

147147
public List<Exception> getErrors(){
148-
return this.errors;
148+
return errors;
149149
}
150150

151151
}

src/main/java/io/frictionlessdata/tableschema/schema/JsonSchema.java

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,8 @@
1111

1212
import java.io.InputStream;
1313
import java.util.Collections;
14+
import java.util.HashMap;
15+
import java.util.Map;
1416
import java.util.Set;
1517

1618
public class JsonSchema {
@@ -52,10 +54,14 @@ public Set<ValidationMessage> validate(JsonNode json) {
5254
log.warn(msg);
5355
throw new ValidationException(this, errors);
5456
} else {
55-
log.info(msg);
57+
log.warn(msg);
5658
return errors;
5759
}
5860
}
5961
}
6062

63+
public String getName() {
64+
return (null == jsonSchema) ? null : jsonSchema.getSchemaNode().get("title").asText();
65+
}
66+
6167
}

0 commit comments

Comments
 (0)