Skip to content

Commit 79b8d89

Browse files
committed
CVOC - Improved logger message and avoid http call on invalid url
1 parent cb9b097 commit 79b8d89

1 file changed

Lines changed: 30 additions & 14 deletions

File tree

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

Lines changed: 30 additions & 14 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;
@@ -495,10 +494,19 @@ public void registerExternalTerm(JsonObject cvocEntry, String term, List<Dataset
495494
if (evv.getValue() == null) {
496495
String adjustedTerm = (prefix==null)? term: term.replace(prefix, "");
497496

498-
retrievalUri = replaceRetrievalUriParam(retrievalUri, "0", adjustedTerm);
499-
retrievalUri = replaceRetrievalUriParam(retrievalUri, termUriFieldName, adjustedTerm);
500-
for (DatasetField f : relatedDatasetFields) {
501-
retrievalUri = replaceRetrievalUriParam(retrievalUri, f.getDatasetFieldType().getName(), f.getValue());
497+
try {
498+
retrievalUri = tryToReplaceRetrievalUriParam(retrievalUri, "0", adjustedTerm);
499+
retrievalUri = tryToReplaceRetrievalUriParam(retrievalUri, termUriFieldName, adjustedTerm);
500+
for (DatasetField f : relatedDatasetFields) {
501+
retrievalUri = tryToReplaceRetrievalUriParam(retrievalUri, f.getDatasetFieldType().getName(), f.getValue());
502+
}
503+
} catch (InvalidParameterException e) {
504+
logger.warning("InvalidParameterException in tryReplaceRetrievalUriParam : " + e.getMessage());
505+
return;
506+
}
507+
if (retrievalUri.contains("{")) {
508+
logger.severe("Retrieval URI still contains unreplaced parameter :" + retrievalUri);
509+
return;
502510
}
503511

504512
logger.fine("Didn't find " + term + ", calling " + retrievalUri);
@@ -552,24 +560,32 @@ public void process(HttpResponse response, HttpContext context) throws HttpExcep
552560
} catch (IOException ioe) {
553561
logger.severe("IOException when retrieving url: " + retrievalUri + " : " + ioe.getMessage());
554562
}
555-
556563
}
557564
} catch (URISyntaxException e) {
558565
logger.fine("Term is not a URI: " + term);
559566
}
560-
561567
}
562568

563-
private String replaceRetrievalUriParam(String retrievalUri, String paramName, String value) {
569+
private String tryToReplaceRetrievalUriParam(String retrievalUri, String paramName, String value) throws InvalidParameterException {
564570

565-
if(StringUtils.isBlank(paramName) || StringUtils.isBlank(value)) {
566-
return retrievalUri;
571+
if(StringUtils.isBlank(paramName)) {
572+
throw new InvalidParameterException("Empty or null paramName is not allowed while replacing retrieval uri parameter");
567573
}
568574

569-
if(retrievalUri.contains("encodeUrl:" + paramName)) {
570-
retrievalUri = retrievalUri.replace("{encodeUrl:"+paramName+"}", URLEncoder.encode(value, StandardCharsets.UTF_8));
575+
if(retrievalUri.contains(paramName)) {
576+
logger.fine("Parameter {" + paramName + "} found in retrievalUri");
577+
578+
if(StringUtils.isBlank(value)) {
579+
throw new InvalidParameterException("Empty or null value is not allowed while replacing retrieval uri parameter");
580+
}
581+
582+
if(retrievalUri.contains("encodeUrl:" + paramName)) {
583+
retrievalUri = retrievalUri.replace("{encodeUrl:"+paramName+"}", URLEncoder.encode(value, StandardCharsets.UTF_8));
584+
} else {
585+
retrievalUri = retrievalUri.replace("{"+paramName+"}", value);
586+
}
571587
} else {
572-
retrievalUri = retrievalUri.replace("{"+paramName+"}", value);
588+
logger.fine("Parameter {" + paramName + "} not found in retrievalUri");
573589
}
574590

575591
return retrievalUri;

0 commit comments

Comments
 (0)