Skip to content

Commit 6a64bf9

Browse files
committed
Display detailed error message when user uploads json not conforming to the schema
1 parent 4fdcc53 commit 6a64bf9

4 files changed

Lines changed: 14 additions & 14 deletions

File tree

src/main/java/edu/harvard/iq/dataverse/api/Prov.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -59,8 +59,9 @@ public Response addProvJson(@Context ContainerRequestContext crc, String body, @
5959
return error(FORBIDDEN, BundleUtil.getStringFromBundle("api.prov.error.jsonUpdateNotAllowed"));
6060
}
6161

62-
if(!provUtil.isProvValid(body)) {
63-
return error(BAD_REQUEST, BundleUtil.getStringFromBundle("file.editProvenanceDialog.invalidSchemaError"));
62+
var schemaErrorMessages = provUtil.isProvValid(body);
63+
if(!schemaErrorMessages.isEmpty()) {
64+
return error(BAD_REQUEST, BundleUtil.getStringFromBundle("file.editProvenanceDialog.invalidSchemaError") + schemaErrorMessages.get());
6465
}
6566

6667
/*Add when we actually integrate provCpl*/

src/main/java/edu/harvard/iq/dataverse/provenance/ProvInvestigator.java

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
import java.util.Set;
1212
import java.util.logging.Logger;
1313
import jakarta.json.JsonObject;
14+
import java.util.Optional;
1415
import org.everit.json.schema.Schema;
1516
import org.everit.json.schema.ValidationException;
1617
import org.everit.json.schema.loader.SchemaLoader;
@@ -114,18 +115,18 @@ public String getPrettyJsonString(JsonObject jsonObject) {
114115
return gson.toJson(je);
115116
}
116117

117-
public boolean isProvValid(String jsonInput) {
118+
public Optional<String> isProvValid(String jsonInput) {
118119
try {
119120
schema.validate(new JSONObject(jsonInput)); // throws a ValidationException if this object is invalid
120121
} catch (ValidationException vx) {
121122
logger.info("Prov schema error : " + vx); //without classLoader is blows up in actual deployment
122-
return false;
123+
return Optional.of(vx.getAllMessages().toString());
123124
} catch (Exception ex) {
124125
logger.info("Prov file error : " + ex);
125-
return false;
126+
return Optional.of(ex.getMessage());
126127
}
127128

128-
return true;
129+
return Optional.empty();
129130
}
130131

131132
//Pulled from https://www.w3.org/Submission/2013/SUBM-prov-json-20130424/schema

src/main/java/edu/harvard/iq/dataverse/provenance/ProvPopupFragmentBean.java

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -95,15 +95,13 @@ public void handleFileUpload(FileUploadEvent event) throws IOException {
9595
provJsonState = IOUtils.toString(jsonUploadedTempFile.getInputStream());
9696

9797

98-
if(!provUtil.isProvValid(provJsonState)) { //if uploaded prov-json does not comply with schema
98+
provUtil.isProvValid(provJsonState).ifPresentOrElse(message -> { //if uploaded prov-json does not comply with schema
9999
Logger.getLogger(ProvPopupFragmentBean.class.getName())
100100
.log(Level.INFO, BundleUtil.getStringFromBundle("file.editProvenanceDialog.invalidSchemaError"));
101101
provJsonState = null;
102102
removeJsonAndRelatedData();
103-
JH.addMessage(FacesMessage.SEVERITY_ERROR, BundleUtil.getStringFromBundle("file.editProvenanceDialog.invalidSchemaError"));
104-
}
105-
106-
else {
103+
JH.addMessage(FacesMessage.SEVERITY_ERROR, BundleUtil.getStringFromBundle("file.editProvenanceDialog.invalidSchemaError"), message);
104+
}, () -> {
107105
try {
108106
generateProvJsonParsedEntities();
109107

@@ -117,7 +115,7 @@ public void handleFileUpload(FileUploadEvent event) throws IOException {
117115
removeJsonAndRelatedData();
118116
JH.addMessage(FacesMessage.SEVERITY_ERROR, BundleUtil.getStringFromBundle("file.editProvenanceDialog.noEntitiesError"));
119117
}
120-
}
118+
});
121119

122120
}
123121

src/test/java/edu/harvard/iq/dataverse/provenance/ProvInvestigatorTest.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -68,7 +68,7 @@ public void testProvValidator() {
6868
" }\n" +
6969
"}";
7070

71-
assertTrue(provUtilBean.isProvValid(validJsonString));
71+
assertTrue(provUtilBean.isProvValid(validJsonString).isEmpty());
7272

7373
//This string has the "entity" section misnamed to "entitddd"
7474
String invalidJsonString = "{\n" +
@@ -102,7 +102,7 @@ public void testProvValidator() {
102102
" }\n" +
103103
"}";
104104

105-
assertFalse(provUtilBean.isProvValid(invalidJsonString));
105+
assertFalse(provUtilBean.isProvValid(invalidJsonString).isEmpty());
106106

107107
}
108108

0 commit comments

Comments
 (0)