From 7cbc0aec6713d9deaa4709eb5722ebc80c22eb15 Mon Sep 17 00:00:00 2001 From: James Agnew Date: Wed, 12 Feb 2025 16:54:06 -0500 Subject: [PATCH 1/3] Remove HTTPClient dependency in hapi-fhir-base --- hapi-fhir-base/pom.xml | 5 +- .../main/java/ca/uhn/fhir/util/UrlUtil.java | 36 -------------- .../fhir/jpa/searchparam/MatchUrlService.java | 3 +- hapi-fhir-server/pom.xml | 5 ++ .../fhir/rest/server/util/MatchUrlUtil.java | 48 +++++++++++++++++++ .../rest/server/util/ServletRequestUtil.java | 4 +- .../rest/server/util/MatchUrlUtilTest.java | 30 ++++++++++++ .../java/ca/uhn/fhir/util/UrlUtilTest.java | 22 --------- 8 files changed, 88 insertions(+), 65 deletions(-) create mode 100644 hapi-fhir-server/src/main/java/ca/uhn/fhir/rest/server/util/MatchUrlUtil.java create mode 100644 hapi-fhir-server/src/test/java/ca/uhn/fhir/rest/server/util/MatchUrlUtilTest.java diff --git a/hapi-fhir-base/pom.xml b/hapi-fhir-base/pom.xml index 33cb33894626..442e4802fed6 100644 --- a/hapi-fhir-base/pom.xml +++ b/hapi-fhir-base/pom.xml @@ -70,10 +70,7 @@ org.apache.commons commons-lang3 - - org.apache.httpcomponents - httpclient - + org.apache.jena diff --git a/hapi-fhir-base/src/main/java/ca/uhn/fhir/util/UrlUtil.java b/hapi-fhir-base/src/main/java/ca/uhn/fhir/util/UrlUtil.java index af3fae81c8a5..771a79d1fd7d 100644 --- a/hapi-fhir-base/src/main/java/ca/uhn/fhir/util/UrlUtil.java +++ b/hapi-fhir-base/src/main/java/ca/uhn/fhir/util/UrlUtil.java @@ -31,9 +31,6 @@ import jakarta.annotation.Nonnull; import jakarta.annotation.Nullable; import org.apache.commons.lang3.StringUtils; -import org.apache.http.NameValuePair; -import org.apache.http.client.utils.URLEncodedUtils; -import org.apache.http.message.BasicNameValuePair; import org.hl7.fhir.instance.model.api.IPrimitiveType; import java.io.UnsupportedEncodingException; @@ -572,39 +569,6 @@ public static String unescape(String theString) { return theString; } - public static List translateMatchUrl(String theMatchUrl) { - List parameters; - String matchUrl = theMatchUrl; - int questionMarkIndex = matchUrl.indexOf('?'); - if (questionMarkIndex != -1) { - matchUrl = matchUrl.substring(questionMarkIndex + 1); - } - - final String[] searchList = new String[] {"|", "=>=", "=<=", "=>", "=<"}; - final String[] replacementList = new String[] {"%7C", "=%3E%3D", "=%3C%3D", "=%3E", "=%3C"}; - matchUrl = StringUtils.replaceEach(matchUrl, searchList, replacementList); - if (matchUrl.contains(" ")) { - throw new InvalidRequestException(Msg.code(1744) + "Failed to parse match URL[" + theMatchUrl - + "] - URL is invalid (must not contain spaces)"); - } - - parameters = URLEncodedUtils.parse((matchUrl), Constants.CHARSET_UTF8, '&'); - - // One issue that has happened before is people putting a "+" sign into an email address in a match URL - // and having that turn into a " ". Since spaces are never appropriate for email addresses, let's just - // assume they really meant "+". - for (int i = 0; i < parameters.size(); i++) { - NameValuePair next = parameters.get(i); - if (next.getName().equals("email") && next.getValue().contains(" ")) { - BasicNameValuePair newPair = - new BasicNameValuePair(next.getName(), next.getValue().replace(' ', '+')); - parameters.set(i, newPair); - } - } - - return parameters; - } - /** * Creates list of sub URIs candidates for search with :above modifier * Example input: http://[host]/[pathPart1]/[pathPart2] diff --git a/hapi-fhir-jpaserver-searchparam/src/main/java/ca/uhn/fhir/jpa/searchparam/MatchUrlService.java b/hapi-fhir-jpaserver-searchparam/src/main/java/ca/uhn/fhir/jpa/searchparam/MatchUrlService.java index 870b6c9681cd..c34a9a973471 100644 --- a/hapi-fhir-jpaserver-searchparam/src/main/java/ca/uhn/fhir/jpa/searchparam/MatchUrlService.java +++ b/hapi-fhir-jpaserver-searchparam/src/main/java/ca/uhn/fhir/jpa/searchparam/MatchUrlService.java @@ -37,6 +37,7 @@ import ca.uhn.fhir.rest.param.ParameterUtil; import ca.uhn.fhir.rest.server.exceptions.InvalidRequestException; import ca.uhn.fhir.rest.server.util.ISearchParamRegistry; +import ca.uhn.fhir.rest.server.util.ServletRequestUtil; import ca.uhn.fhir.util.ReflectionUtil; import ca.uhn.fhir.util.UrlUtil; import com.google.common.collect.ArrayListMultimap; @@ -59,7 +60,7 @@ public class MatchUrlService { public SearchParameterMap translateMatchUrl( String theMatchUrl, RuntimeResourceDefinition theResourceDefinition, Flag... theFlags) { SearchParameterMap paramMap = new SearchParameterMap(); - List parameters = UrlUtil.translateMatchUrl(theMatchUrl); + List parameters = ServletRequestUtil.translateMatchUrl(theMatchUrl); ArrayListMultimap nameToParamLists = ArrayListMultimap.create(); for (NameValuePair next : parameters) { diff --git a/hapi-fhir-server/pom.xml b/hapi-fhir-server/pom.xml index b69918288ad3..94c8440ff992 100644 --- a/hapi-fhir-server/pom.xml +++ b/hapi-fhir-server/pom.xml @@ -49,6 +49,11 @@ owasp-java-html-sanitizer + + org.apache.httpcomponents + httpclient + +