[DURACOM-109] Minor fix

This commit is contained in:
Elios Buzo
2025-04-23 17:43:49 +02:00
parent c553910750
commit 4dfbbec06f
2 changed files with 74 additions and 71 deletions

View File

@@ -27,10 +27,10 @@ import org.apache.http.HttpStatus;
import org.apache.http.NameValuePair;
import org.apache.http.NoHttpResponseException;
import org.apache.http.StatusLine;
import org.apache.http.client.HttpClient;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.message.BasicNameValuePair;
import org.apache.logging.log4j.Logger;
import org.dspace.app.client.DSpaceHttpClientFactory;
@@ -120,33 +120,34 @@ public class OpenaireRestConnector {
params.add(new BasicNameValuePair("grant_type", "client_credentials"));
httpPost.setEntity(new UrlEncodedFormEntity(params, "UTF-8"));
HttpClient httpClient = DSpaceHttpClientFactory.getInstance().build();
HttpResponse getResponse = httpClient.execute(httpPost);
try (CloseableHttpClient httpClient = DSpaceHttpClientFactory.getInstance().build()) {
HttpResponse getResponse = httpClient.execute(httpPost);
JSONObject responseObject = null;
try (InputStream is = getResponse.getEntity().getContent();
BufferedReader streamReader = new BufferedReader(new InputStreamReader(is, "UTF-8"))) {
String inputStr;
// verify if we have basic json
while ((inputStr = streamReader.readLine()) != null && responseObject == null) {
if (inputStr.startsWith("{") && inputStr.endsWith("}") && inputStr.contains("access_token")
&& inputStr.contains("expires_in")) {
try {
responseObject = new JSONObject(inputStr);
} catch (Exception e) {
// Not as valid as I'd hoped, move along
responseObject = null;
JSONObject responseObject = null;
try (InputStream is = getResponse.getEntity().getContent();
BufferedReader streamReader = new BufferedReader(new InputStreamReader(is, "UTF-8"))) {
String inputStr;
// verify if we have basic json
while ((inputStr = streamReader.readLine()) != null && responseObject == null) {
if (inputStr.startsWith("{") && inputStr.endsWith("}") && inputStr.contains("access_token")
&& inputStr.contains("expires_in")) {
try {
responseObject = new JSONObject(inputStr);
} catch (Exception e) {
// Not as valid as I'd hoped, move along
responseObject = null;
}
}
}
}
}
if (responseObject == null || !responseObject.has("access_token") || !responseObject.has("expires_in")) {
throw new IOException("Unable to grab the access token using provided service url, client id and secret");
}
return new OpenaireRestToken(responseObject.get("access_token").toString(),
Long.valueOf(responseObject.get("expires_in").toString()));
if (responseObject == null || !responseObject.has("access_token") || !responseObject.has("expires_in")) {
throw new IOException("Unable to grab the access token using provided service url, " +
"client id and secret");
}
return new OpenaireRestToken(responseObject.get("access_token").toString(),
Long.valueOf(responseObject.get("expires_in").toString()));
}
}
/**
@@ -171,42 +172,43 @@ public class OpenaireRestConnector {
httpGet.addHeader("Authorization", "Bearer " + accessToken);
}
HttpClient httpClient = DSpaceHttpClientFactory.getInstance().build();
getResponse = httpClient.execute(httpGet);
try (CloseableHttpClient httpClient = DSpaceHttpClientFactory.getInstance().build()) {
getResponse = httpClient.execute(httpGet);
StatusLine status = getResponse.getStatusLine();
StatusLine status = getResponse.getStatusLine();
// registering errors
switch (status.getStatusCode()) {
case HttpStatus.SC_NOT_FOUND:
// 404 - Not found
case HttpStatus.SC_FORBIDDEN:
// 403 - Invalid Access Token
case 429:
// 429 - Rate limit abuse for unauthenticated user
Header[] limitUsed = getResponse.getHeaders("x-ratelimit-used");
Header[] limitMax = getResponse.getHeaders("x-ratelimit-limit");
// registering errors
switch (status.getStatusCode()) {
case HttpStatus.SC_NOT_FOUND:
// 404 - Not found
case HttpStatus.SC_FORBIDDEN:
// 403 - Invalid Access Token
case 429:
// 429 - Rate limit abuse for unauthenticated user
Header[] limitUsed = getResponse.getHeaders("x-ratelimit-used");
Header[] limitMax = getResponse.getHeaders("x-ratelimit-limit");
if (limitUsed.length > 0) {
String limitMsg = limitUsed[0].getValue();
if (limitMax.length > 0) {
limitMsg = limitMsg.concat(" of " + limitMax[0].getValue());
if (limitUsed.length > 0) {
String limitMsg = limitUsed[0].getValue();
if (limitMax.length > 0) {
limitMsg = limitMsg.concat(" of " + limitMax[0].getValue());
}
getGotError(new NoHttpResponseException(status.getReasonPhrase() + " with usage limit "
+ limitMsg),
url + '/' + file);
} else {
// 429 - Rate limit abuse
getGotError(new NoHttpResponseException(status.getReasonPhrase()), url + '/' + file);
}
getGotError(
new NoHttpResponseException(status.getReasonPhrase() + " with usage limit " + limitMsg),
url + '/' + file);
} else {
// 429 - Rate limit abuse
getGotError(new NoHttpResponseException(status.getReasonPhrase()), url + '/' + file);
}
break;
default:
// 200 or other
break;
}
break;
default:
// 200 or other
break;
}
// do not close this httpClient
result = getResponse.getEntity().getContent();
// do not close this httpClient
result = getResponse.getEntity().getContent();
}
} catch (MalformedURLException e1) {
getGotError(e1, url + '/' + file);
} catch (Exception e) {

View File

@@ -22,8 +22,8 @@ import java.util.stream.Collectors;
import org.apache.commons.lang3.StringUtils;
import org.apache.http.HttpResponse;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.dspace.app.client.DSpaceHttpClientFactory;
@@ -87,26 +87,27 @@ public class OrcidV3AuthorDataProvider extends AbstractExternalDataProvider {
httpPost.addHeader("Accept", "application/json");
httpPost.addHeader("Content-Type", "application/x-www-form-urlencoded");
HttpClient httpClient = DSpaceHttpClientFactory.getInstance().build();
HttpResponse getResponse = httpClient.execute(httpPost);
try (CloseableHttpClient httpClient = DSpaceHttpClientFactory.getInstance().build()) {
HttpResponse getResponse = httpClient.execute(httpPost);
JSONObject responseObject = null;
try (InputStream is = getResponse.getEntity().getContent();
BufferedReader streamReader = new BufferedReader(new InputStreamReader(is, "UTF-8"))) {
String inputStr;
while ((inputStr = streamReader.readLine()) != null && responseObject == null) {
if (inputStr.startsWith("{") && inputStr.endsWith("}") && inputStr.contains("access_token")) {
try {
responseObject = new JSONObject(inputStr);
} catch (Exception e) {
//Not as valid as I'd hoped, move along
responseObject = null;
JSONObject responseObject = null;
try (InputStream is = getResponse.getEntity().getContent();
BufferedReader streamReader = new BufferedReader(new InputStreamReader(is, "UTF-8"))) {
String inputStr;
while ((inputStr = streamReader.readLine()) != null && responseObject == null) {
if (inputStr.startsWith("{") && inputStr.endsWith("}") && inputStr.contains("access_token")) {
try {
responseObject = new JSONObject(inputStr);
} catch (Exception e) {
//Not as valid as I'd hoped, move along
responseObject = null;
}
}
}
}
}
if (responseObject != null && responseObject.has("access_token")) {
accessToken = (String) responseObject.get("access_token");
if (responseObject != null && responseObject.has("access_token")) {
accessToken = (String) responseObject.get("access_token");
}
}
}
}