From dad5d59e588edbedf9ff1903a9957644d1bdd6bf Mon Sep 17 00:00:00 2001 From: AlejandroP Date: Wed, 20 Sep 2023 09:19:16 -0300 Subject: [PATCH 1/3] - Add Access token property and processing in Location object --- .../src/main/java/com/genexus/internet/Location.java | 10 ++++++++-- .../java/com/genexus/internet/GXRestAPIClient.java | 3 +++ 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/common/src/main/java/com/genexus/internet/Location.java b/common/src/main/java/com/genexus/internet/Location.java index 43a2b1715..8daace655 100644 --- a/common/src/main/java/com/genexus/internet/Location.java +++ b/common/src/main/java/com/genexus/internet/Location.java @@ -23,6 +23,7 @@ public class Location private String proxyAuthenticationUser = ""; private String proxyAuthenticationRealm = ""; private String proxyAuthenticationPassword = ""; + private String accessToken = ""; private IGXWSAddressing wsAddressing; private IGXWSSecurity wsSecurity; private String certificate = ""; @@ -120,7 +121,10 @@ public String getProxyAuthenticationPassword() { return proxyAuthenticationPassword; } - + public String getAccessToken() + { + return accessToken; + } public IGXWSAddressing getWSAddressing() { return wsAddressing; @@ -220,7 +224,9 @@ public void setProxyAuthenticationPassword(String authenticationPassword) { this.proxyAuthenticationPassword = authenticationPassword; } - + + public void setAccessToken(String token) { this.accessToken = token; } + public void setWSAddressing(IGXWSAddressing wsAddressing) { this.wsAddressing = wsAddressing; diff --git a/java/src/main/java/com/genexus/internet/GXRestAPIClient.java b/java/src/main/java/com/genexus/internet/GXRestAPIClient.java index 358800933..7983a9d7f 100644 --- a/java/src/main/java/com/genexus/internet/GXRestAPIClient.java +++ b/java/src/main/java/com/genexus/internet/GXRestAPIClient.java @@ -506,6 +506,9 @@ public void RestExecute() { httpClient.addHeader("Content-Type", contentType); } } + if (this.location.getAuthenticationMethod() == 4 && this.location.getAccessToken() != null && ! this.location.getAccessToken().trim().isEmpty()) { + httpClient.addHeader("Authorization", this.location.getAccessToken()); + } String serviceuri = ((this.location.getSecure() > 0) ? "https" : "http") + "://" + this.location.getHost(); serviceuri += (this.location.getPort() != 80) ? ":" + Integer.toString(this.location.getPort()): ""; serviceuri += "/" + this.location.getBaseURL() + "/" + this.location.getResourceName(); From c336bee824039dfb502be111c6c4916b3cca3af8 Mon Sep 17 00:00:00 2001 From: AlejandroP Date: Wed, 20 Sep 2023 12:24:22 -0300 Subject: [PATCH 2/3] - extract Log code from routines in GXRestAPIClient - Fix test case when receiving unwrapped response. --- .../com/genexus/internet/GXRestAPIClient.java | 37 +++++++++++++------ 1 file changed, 25 insertions(+), 12 deletions(-) diff --git a/java/src/main/java/com/genexus/internet/GXRestAPIClient.java b/java/src/main/java/com/genexus/internet/GXRestAPIClient.java index 7983a9d7f..c289afaed 100644 --- a/java/src/main/java/com/genexus/internet/GXRestAPIClient.java +++ b/java/src/main/java/com/genexus/internet/GXRestAPIClient.java @@ -297,7 +297,7 @@ public < T extends IGxJSONSerializable> T getBodyGeospatial(String varName, Clas catch (Exception e) { errorCode = DESERIALIZING_ERROR_CODE; errorMessage = DESERIALIZING_ERROR_MSG; - logger.error(DESERIALIZING_ERROR_MSG + " " + sdtClass, e); + logError(DESERIALIZING_ERROR_CODE, DESERIALIZING_ERROR_MSG + " " + sdtClass, e); return null; } } @@ -342,13 +342,13 @@ else if (jsonResponse.length() == 1 && jsonResponse.has("")) else { errorCode = RESPONSE_ERROR_CODE; errorMessage = RESPONSE_ERROR_MSG; - logger.error(RESPONSE_ERROR_MSG ); + logError(RESPONSE_ERROR_CODE, RESPONSE_ERROR_MSG); } } catch( JSONException e) { errorCode = PARSING_ERROR_CODE; errorMessage = PARSING_ERROR_MSG; - logger.error(PARSING_ERROR_MSG, e); + logError(PARSING_ERROR_CODE, PARSING_ERROR_MSG, e); } return jsonstr; } @@ -381,21 +381,21 @@ else if (jsonResponse.length()>= 1) { { errorCode = RESPONSE_ERROR_CODE; errorMessage = RESPONSE_ERROR_MSG; - logger.error(RESPONSE_ERROR_MSG + " " + sdtClass); + logError( RESPONSE_ERROR_CODE, RESPONSE_ERROR_MSG + " " + sdtClass); return null; } } else { errorCode = RESPONSE_ERROR_CODE; errorMessage = RESPONSE_ERROR_MSG; - logger.error(RESPONSE_ERROR_MSG + " " + sdtClass); + logError( RESPONSE_ERROR_CODE,RESPONSE_ERROR_MSG + " " + sdtClass); return null; } } catch (json.org.json.JSONException e) { errorCode = PARSING_ERROR_CODE; errorMessage = PARSING_ERROR_MSG; - logger.error(PARSING_ERROR_MSG + " " + sdtClass, e); + logError(PARSING_ERROR_CODE, PARSING_ERROR_MSG + " " + sdtClass, e); return null; } return sdt; @@ -431,18 +431,18 @@ else if (jsonResponse.length() == 1 && jsonResponse.has("")) else { errorCode = RESPONSE_ERROR_CODE; errorMessage = RESPONSE_ERROR_MSG; - logger.error(RESPONSE_ERROR_MSG + " " + elementClass); + logError(RESPONSE_ERROR_CODE,RESPONSE_ERROR_MSG + " " + elementClass); } } catch (json.org.json.JSONException e) { errorCode = PARSING_ERROR_CODE; errorMessage = PARSING_ERROR_MSG; - logger.error(PARSING_ERROR_MSG + " " + elementClass ,e ); + logError(PARSING_ERROR_CODE,PARSING_ERROR_MSG + " " + elementClass ,e ); } catch (Exception e) { errorCode = DESERIALIZING_ERROR_CODE; errorMessage = DESERIALIZING_ERROR_MSG; - logger.error(DESERIALIZING_ERROR_MSG + " " + elementClass, e); + logError(DESERIALIZING_ERROR_CODE, DESERIALIZING_ERROR_MSG + " " + elementClass, e); } } @@ -465,7 +465,7 @@ else if (jsonResponse.length() == 1 && jsonResponse.has("")) { catch (json.org.json.JSONException e) { errorCode = PARSING_ERROR_CODE; errorMessage = PARSING_ERROR_MSG; - logger.error(PARSING_ERROR_MSG + " " + elementClasss, e); + logError(PARSING_ERROR_CODE,PARSING_ERROR_MSG + " " + elementClasss, e); } return coll; } @@ -523,14 +523,27 @@ public void RestExecute() { else { statusCode = httpClient.getStatusCode(); try { - jsonResponse = new JSONObject(httpClient.getString()); + String response = httpClient.getString(); + if (response.trim().startsWith("[")) + { + // unwrapped list response + response = "{\"\":" + response + "}"; + } + jsonResponse = new JSONObject(response); } catch( JSONException e) { errorCode = PARSING_ERROR_CODE; errorMessage = PARSING_ERROR_MSG; - logger.error(PARSING_ERROR_MSG, e); + logError(PARSING_ERROR_CODE, PARSING_ERROR_MSG, e); jsonResponse = new JSONObject(); } } } + + private void logError(int code, String msg) { + logger.error("Error: " + Integer.toString(code) + " " + msg); + } + private void logError(int code, String msg, Exception e) { + logger.error("Error: " + Integer.toString(code) + " " + msg, e); + } } From 23080dd7d922f03fa42e05b05db4abdb9f1a586f Mon Sep 17 00:00:00 2001 From: AlejandroP Date: Wed, 20 Sep 2023 12:30:04 -0300 Subject: [PATCH 3/3] - Removed "this" prefix as per review suggested by Iroqueta --- .../java/com/genexus/internet/GXRestAPIClient.java | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/java/src/main/java/com/genexus/internet/GXRestAPIClient.java b/java/src/main/java/com/genexus/internet/GXRestAPIClient.java index c289afaed..707d1d51a 100644 --- a/java/src/main/java/com/genexus/internet/GXRestAPIClient.java +++ b/java/src/main/java/com/genexus/internet/GXRestAPIClient.java @@ -500,20 +500,20 @@ public void RestExecute() { httpClient.addHeader( "Content-Type", contentType); } else { - if (this.httpMethod == "POST" || this.httpMethod == "PUT") { + if (httpMethod == "POST" || httpMethod == "PUT") { bodyString = "{}"; httpClient.addString(bodyString); httpClient.addHeader("Content-Type", contentType); } } - if (this.location.getAuthenticationMethod() == 4 && this.location.getAccessToken() != null && ! this.location.getAccessToken().trim().isEmpty()) { - httpClient.addHeader("Authorization", this.location.getAccessToken()); + if (location.getAuthenticationMethod() == 4 && location.getAccessToken() != null && ! location.getAccessToken().trim().isEmpty()) { + httpClient.addHeader("Authorization", location.getAccessToken()); } - String serviceuri = ((this.location.getSecure() > 0) ? "https" : "http") + "://" + this.location.getHost(); - serviceuri += (this.location.getPort() != 80) ? ":" + Integer.toString(this.location.getPort()): ""; - serviceuri += "/" + this.location.getBaseURL() + "/" + this.location.getResourceName(); + String serviceuri = ((location.getSecure() > 0) ? "https" : "http") + "://" + location.getHost(); + serviceuri += (location.getPort() != 80) ? ":" + Integer.toString(location.getPort()): ""; + serviceuri += "/" + location.getBaseURL() + "/" + location.getResourceName(); serviceuri += queryString; - httpClient.execute( this.httpMethod, serviceuri); + httpClient.execute( httpMethod, serviceuri); if (httpClient.getStatusCode() >= 300 || httpClient.getErrCode() > 0) { errorCode = (httpClient.getErrCode() == 0)? 1 : httpClient.getErrCode();