From 1b97c1b51cb050472f4f8d7f90bc39e8eade4e02 Mon Sep 17 00:00:00 2001 From: Anju Chamantha Date: Wed, 18 Feb 2026 10:07:26 +0530 Subject: [PATCH 1/2] Bug fix related to fhirConnector --- fhir/Dependencies.toml | 52 ++++++++++++++++++++++++++++++------------ fhir/utils.bal | 2 +- 2 files changed, 38 insertions(+), 16 deletions(-) diff --git a/fhir/Dependencies.toml b/fhir/Dependencies.toml index b3202a3..ecdea69 100644 --- a/fhir/Dependencies.toml +++ b/fhir/Dependencies.toml @@ -5,7 +5,7 @@ [ballerina] dependencies-toml-version = "2" -distribution-version = "2201.12.3" +distribution-version = "2201.12.11" [[package]] org = "ballerina" @@ -41,16 +41,33 @@ dependencies = [ [[package]] org = "ballerina" name = "crypto" -version = "2.9.0" +version = "2.9.3" dependencies = [ {org = "ballerina", name = "jballerina.java"}, {org = "ballerina", name = "time"} ] +[[package]] +org = "ballerina" +name = "data.csv" +version = "0.8.1" +dependencies = [ + {org = "ballerina", name = "jballerina.java"} +] + [[package]] org = "ballerina" name = "data.jsondata" -version = "1.1.0" +version = "1.1.3" +dependencies = [ + {org = "ballerina", name = "jballerina.java"}, + {org = "ballerina", name = "lang.object"} +] + +[[package]] +org = "ballerina" +name = "data.xmldata" +version = "1.5.3" dependencies = [ {org = "ballerina", name = "jballerina.java"}, {org = "ballerina", name = "lang.object"} @@ -73,12 +90,17 @@ modules = [ [[package]] org = "ballerina" name = "ftp" -version = "2.13.1" +version = "2.16.0" dependencies = [ + {org = "ballerina", name = "crypto"}, + {org = "ballerina", name = "data.csv"}, + {org = "ballerina", name = "data.jsondata"}, + {org = "ballerina", name = "data.xmldata"}, {org = "ballerina", name = "io"}, {org = "ballerina", name = "jballerina.java"}, {org = "ballerina", name = "log"}, - {org = "ballerina", name = "task"} + {org = "ballerina", name = "task"}, + {org = "ballerina", name = "time"} ] modules = [ {org = "ballerina", packageName = "ftp", moduleName = "ftp"} @@ -87,7 +109,7 @@ modules = [ [[package]] org = "ballerina" name = "http" -version = "2.14.2" +version = "2.14.9" dependencies = [ {org = "ballerina", name = "auth"}, {org = "ballerina", name = "cache"}, @@ -137,7 +159,7 @@ version = "0.0.0" [[package]] org = "ballerina" name = "jwt" -version = "2.15.0" +version = "2.15.1" dependencies = [ {org = "ballerina", name = "cache"}, {org = "ballerina", name = "crypto"}, @@ -238,7 +260,7 @@ dependencies = [ [[package]] org = "ballerina" name = "log" -version = "2.12.0" +version = "2.14.0" dependencies = [ {org = "ballerina", name = "io"}, {org = "ballerina", name = "jballerina.java"}, @@ -252,7 +274,7 @@ modules = [ [[package]] org = "ballerina" name = "mime" -version = "2.12.0" +version = "2.12.1" dependencies = [ {org = "ballerina", name = "io"}, {org = "ballerina", name = "jballerina.java"}, @@ -263,7 +285,7 @@ dependencies = [ [[package]] org = "ballerina" name = "oauth2" -version = "2.14.0" +version = "2.14.1" dependencies = [ {org = "ballerina", name = "cache"}, {org = "ballerina", name = "crypto"}, @@ -276,7 +298,7 @@ dependencies = [ [[package]] org = "ballerina" name = "observe" -version = "1.5.0" +version = "1.5.1" dependencies = [ {org = "ballerina", name = "jballerina.java"} ] @@ -284,7 +306,7 @@ dependencies = [ [[package]] org = "ballerina" name = "os" -version = "1.10.0" +version = "1.10.1" dependencies = [ {org = "ballerina", name = "io"}, {org = "ballerina", name = "jballerina.java"} @@ -293,7 +315,7 @@ dependencies = [ [[package]] org = "ballerina" name = "task" -version = "2.10.0" +version = "2.11.1" dependencies = [ {org = "ballerina", name = "jballerina.java"}, {org = "ballerina", name = "time"}, @@ -320,7 +342,7 @@ modules = [ [[package]] org = "ballerina" name = "time" -version = "2.7.0" +version = "2.8.0" dependencies = [ {org = "ballerina", name = "jballerina.java"} ] @@ -331,7 +353,7 @@ modules = [ [[package]] org = "ballerina" name = "url" -version = "2.6.0" +version = "2.6.1" dependencies = [ {org = "ballerina", name = "jballerina.java"} ] diff --git a/fhir/utils.bal b/fhir/utils.bal index 59ffad6..bc2a8b9 100644 --- a/fhir/utils.bal +++ b/fhir/utils.bal @@ -209,7 +209,7 @@ isolated function getBundleResponse(http:Response response) returns FHIRResponse json|xml responseBody = check extractResponseBody(response); map responseHeaders = extractHeadersFromResponse(response); - if statusCode == STATUS_CODE_OK { + if (statusCode == STATUS_CODE_OK || statusCode == STATUS_CODE_CREATED || statusCode == STATUS_CODE_NO_CONTENT || statusCode == STATUS_CODE_ACCEPTED) { FHIRResponse fhirResponse = {httpStatusCode: statusCode, 'resource: responseBody, serverResponseHeaders: responseHeaders}; return fhirResponse; } else { From 28a647dfe6619fd2b84717c3937dcbfbc0f1b047 Mon Sep 17 00:00:00 2001 From: Anju Chamantha Date: Wed, 18 Feb 2026 15:28:54 +0530 Subject: [PATCH 2/2] Check if response code is 2xx --- fhir/utils.bal | 24 +++++++++++++----------- 1 file changed, 13 insertions(+), 11 deletions(-) diff --git a/fhir/utils.bal b/fhir/utils.bal index bc2a8b9..d138f24 100644 --- a/fhir/utils.bal +++ b/fhir/utils.bal @@ -81,7 +81,7 @@ isolated function getFhirResourceResponse(http:Response response) returns FHIRRe xml|json responseBody = check extractResponseBody(response); map responseHeaders = extractHeadersFromResponse(response); int statusCode = response.statusCode; - if statusCode == STATUS_CODE_OK { + if is2xx(statusCode) { return {httpStatusCode: statusCode, 'resource: responseBody, serverResponseHeaders: responseHeaders}; } else { return error(FHIR_SERVER_ERROR, httpStatusCode = statusCode, 'resource = responseBody, serverResponseHeaders = responseHeaders); @@ -149,7 +149,7 @@ isolated function getAlteredResourceResponse(http:Response response, PreferenceT int statusCode = response.statusCode; map responseHeaders = extractHeadersFromResponse(response); - if statusCode == STATUS_CODE_OK || statusCode == STATUS_CODE_CREATED { + if is2xx(statusCode) { if preference == MINIMAL { string header = check response.getHeader(LOCATION); responseBody = extractResourceIdNVid(header); @@ -173,12 +173,10 @@ isolated function getDeleteResourceResponse(http:Response response) returns FHIR int statusCode = response.statusCode; xml|json responseBody = ""; map responseHeaders = extractHeadersFromResponse(response); - - if statusCode == STATUS_CODE_OK { - responseBody = check extractResponseBody(response); - FHIRResponse fhirResponse = {httpStatusCode: statusCode, 'resource: responseBody, serverResponseHeaders: responseHeaders}; - return fhirResponse; - } else if statusCode == STATUS_CODE_NO_CONTENT || statusCode == STATUS_CODE_ACCEPTED { + if is2xx(statusCode) { + if statusCode == STATUS_CODE_OK { + responseBody = check extractResponseBody(response); + } FHIRResponse fhirResponse = {httpStatusCode: statusCode, 'resource: responseBody, serverResponseHeaders: responseHeaders}; return fhirResponse; } else { @@ -208,8 +206,7 @@ isolated function getBundleResponse(http:Response response) returns FHIRResponse int statusCode = response.statusCode; json|xml responseBody = check extractResponseBody(response); map responseHeaders = extractHeadersFromResponse(response); - - if (statusCode == STATUS_CODE_OK || statusCode == STATUS_CODE_CREATED || statusCode == STATUS_CODE_NO_CONTENT || statusCode == STATUS_CODE_ACCEPTED) { + if (is2xx(statusCode)) { FHIRResponse fhirResponse = {httpStatusCode: statusCode, 'resource: responseBody, serverResponseHeaders: responseHeaders}; return fhirResponse; } else { @@ -551,7 +548,7 @@ isolated function getBulkExportResponse(http:Response response) returns FHIRResp return error FHIRConnectorError(string `${FHIR_CONNECTOR_ERROR}: ${tempResponseBody.message()}`, errorDetails = tempResponseBody); } map responseHeaders = extractHeadersFromResponse(response); - if statusCode == http:STATUS_OK || statusCode == http:STATUS_ACCEPTED { + if is2xx(statusCode) { return { httpStatusCode: statusCode, 'resource: responseBody, @@ -633,6 +630,11 @@ isolated function sanitizeRequestUrl(string url) returns string { return url.endsWith(AMPERSAND) || url.endsWith(QUESTION_MARK) ? url.substring(0, url.length() - 1) : url; } +// Checks whether the HTTP status code is in the 2xx range. +isolated function is2xx(int statusCode) returns boolean { + return statusCode >= 200 && statusCode < 300; +} + // regex in FHIR client isolated function matchesQueryPattern(string input) returns boolean { // Regex: key=value[&key=value]*