Skip to content

Commit b405081

Browse files
authored
CVOC: Fix NPE (#10603)
* Fixed NPE * CVOC - Improved logger message and avoid http call on invalid url
1 parent 0f0c3b6 commit b405081

1 file changed

Lines changed: 32 additions & 12 deletions

File tree

src/main/java/edu/harvard/iq/dataverse/DatasetFieldServiceBean.java

Lines changed: 32 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
import java.net.URISyntaxException;
77
import java.net.URLEncoder;
88
import java.nio.charset.StandardCharsets;
9+
import java.security.InvalidParameterException;
910
import java.sql.Timestamp;
1011
import java.text.MessageFormat;
1112
import java.time.Instant;
@@ -20,8 +21,6 @@
2021

2122
import jakarta.ejb.EJB;
2223
import jakarta.ejb.Stateless;
23-
import jakarta.ejb.TransactionAttribute;
24-
import jakarta.ejb.TransactionAttributeType;
2524
import jakarta.inject.Named;
2625
import jakarta.json.Json;
2726
import jakarta.json.JsonArray;
@@ -523,10 +522,19 @@ public void registerExternalTerm(JsonObject cvocEntry, String term, List<Dataset
523522
if (evv.getValue() == null) {
524523
String adjustedTerm = (prefix==null)? term: term.replace(prefix, "");
525524

526-
retrievalUri = replaceRetrievalUriParam(retrievalUri, "0", adjustedTerm);
527-
retrievalUri = replaceRetrievalUriParam(retrievalUri, termUriFieldName, adjustedTerm);
528-
for (DatasetField f : relatedDatasetFields) {
529-
retrievalUri = replaceRetrievalUriParam(retrievalUri, f.getDatasetFieldType().getName(), f.getValue());
525+
try {
526+
retrievalUri = tryToReplaceRetrievalUriParam(retrievalUri, "0", adjustedTerm);
527+
retrievalUri = tryToReplaceRetrievalUriParam(retrievalUri, termUriFieldName, adjustedTerm);
528+
for (DatasetField f : relatedDatasetFields) {
529+
retrievalUri = tryToReplaceRetrievalUriParam(retrievalUri, f.getDatasetFieldType().getName(), f.getValue());
530+
}
531+
} catch (InvalidParameterException e) {
532+
logger.warning("InvalidParameterException in tryReplaceRetrievalUriParam : " + e.getMessage());
533+
return;
534+
}
535+
if (retrievalUri.contains("{")) {
536+
logger.severe("Retrieval URI still contains unreplaced parameter :" + retrievalUri);
537+
return;
530538
}
531539

532540
logger.fine("Didn't find " + term + ", calling " + retrievalUri);
@@ -580,20 +588,32 @@ public void process(HttpResponse response, HttpContext context) throws HttpExcep
580588
} catch (IOException ioe) {
581589
logger.severe("IOException when retrieving url: " + retrievalUri + " : " + ioe.getMessage());
582590
}
583-
584591
}
585592
} catch (URISyntaxException e) {
586593
logger.fine("Term is not a URI: " + term);
587594
}
588-
589595
}
590596

591-
private String replaceRetrievalUriParam(String retrievalUri, String paramName, String value) {
597+
private String tryToReplaceRetrievalUriParam(String retrievalUri, String paramName, String value) throws InvalidParameterException {
598+
599+
if(StringUtils.isBlank(paramName)) {
600+
throw new InvalidParameterException("Empty or null paramName is not allowed while replacing retrieval uri parameter");
601+
}
602+
603+
if(retrievalUri.contains(paramName)) {
604+
logger.fine("Parameter {" + paramName + "} found in retrievalUri");
605+
606+
if(StringUtils.isBlank(value)) {
607+
throw new InvalidParameterException("Empty or null value is not allowed while replacing retrieval uri parameter");
608+
}
592609

593-
if(retrievalUri.contains("encodeUrl:" + paramName)) {
594-
retrievalUri = retrievalUri.replace("{encodeUrl:"+paramName+"}", URLEncoder.encode(value, StandardCharsets.UTF_8));
610+
if(retrievalUri.contains("encodeUrl:" + paramName)) {
611+
retrievalUri = retrievalUri.replace("{encodeUrl:"+paramName+"}", URLEncoder.encode(value, StandardCharsets.UTF_8));
612+
} else {
613+
retrievalUri = retrievalUri.replace("{"+paramName+"}", value);
614+
}
595615
} else {
596-
retrievalUri = retrievalUri.replace("{"+paramName+"}", value);
616+
logger.fine("Parameter {" + paramName + "} not found in retrievalUri");
597617
}
598618

599619
return retrievalUri;

0 commit comments

Comments
 (0)