This is an automated email from the ASF dual-hosted git repository. orpiske pushed a commit to branch main in repository https://gitbox.apache.org/repos/asf/camel.git
commit 7ccb2810f00c193d6114947643a0e8c4d806283d Author: Otavio Rodolfo Piske <angusyo...@gmail.com> AuthorDate: Tue May 23 17:11:17 2023 +0200 (chores) camel-util: use StandardCharsets in the URIScanner to avoid the costlier conversion of String to Charset --- .../java/org/apache/camel/util/URIScanner.java | 126 ++++++++++----------- 1 file changed, 58 insertions(+), 68 deletions(-) diff --git a/core/camel-util/src/main/java/org/apache/camel/util/URIScanner.java b/core/camel-util/src/main/java/org/apache/camel/util/URIScanner.java index 79862603bdc..b9cdd125ddf 100644 --- a/core/camel-util/src/main/java/org/apache/camel/util/URIScanner.java +++ b/core/camel-util/src/main/java/org/apache/camel/util/URIScanner.java @@ -16,9 +16,9 @@ */ package org.apache.camel.util; -import java.io.UnsupportedEncodingException; -import java.net.URISyntaxException; import java.net.URLDecoder; +import java.nio.charset.Charset; +import java.nio.charset.StandardCharsets; import java.util.ArrayList; import java.util.Collections; import java.util.LinkedHashMap; @@ -33,10 +33,7 @@ import static org.apache.camel.util.URISupport.RAW_TOKEN_START; * RAW syntax aware URI scanner that provides various URI manipulations. */ class URIScanner { - - // TODO: when upgrading to JDK11 as minimum then use java.nio.Charset - private static final String CHARSET = "UTF-8"; - + private static final Charset CHARSET = StandardCharsets.UTF_8; private static final char END = '\u0000'; private final StringBuilder key; @@ -57,82 +54,75 @@ class URIScanner { this.isRaw = false; } - public Map<String, Object> parseQuery(String uri, boolean useRaw) throws URISyntaxException { + public Map<String, Object> parseQuery(String uri, boolean useRaw) { // need to parse the uri query parameters manually as we cannot rely on splitting by &, // as & can be used in a parameter value as well. - try { - // use a linked map so the parameters is in the same order - Map<String, Object> answer = new LinkedHashMap<>(); - - // parse the uri parameters char by char - int len = uri.length(); - for (int i = 0; i < len; i++) { - // current char - char ch = uri.charAt(i); - // look ahead of the next char - char next; - if (i <= len - 2) { - next = uri.charAt(i + 1); - } else { - next = END; - } - - if (keyMode) { - // if there is a = sign then the key ends and we are in value mode - if (ch == '=') { - keyMode = false; - continue; - } + // use a linked map so the parameters is in the same order + Map<String, Object> answer = new LinkedHashMap<>(); + + // parse the uri parameters char by char + int len = uri.length(); + for (int i = 0; i < len; i++) { + // current char + char ch = uri.charAt(i); + // look ahead of the next char + char next; + if (i <= len - 2) { + next = uri.charAt(i + 1); + } else { + next = END; + } - if (ch != '&') { - // regular char so add it to the key - key.append(ch); - } - } else { - // are we a raw value - isRaw = checkRaw(); - - // if we are in raw mode, then we keep adding until we hit the end marker - if (isRaw) { - value.append(ch); - - if (isAtEnd(ch, next)) { - // raw value end, so add that as a parameter, and reset flags - addParameter(answer, useRaw || isRaw); - initState(); - // skip to next as we are in raw mode and have already added the value - i++; - } - continue; - } + if (keyMode) { + // if there is a = sign then the key ends and we are in value mode + if (ch == '=') { + keyMode = false; + continue; + } - if (ch != '&') { - // regular char so add it to the value - value.append(ch); + if (ch != '&') { + // regular char so add it to the key + key.append(ch); + } + } else { + // are we a raw value + isRaw = checkRaw(); + + // if we are in raw mode, then we keep adding until we hit the end marker + if (isRaw) { + value.append(ch); + + if (isAtEnd(ch, next)) { + // raw value end, so add that as a parameter, and reset flags + addParameter(answer, useRaw || isRaw); + initState(); + // skip to next as we are in raw mode and have already added the value + i++; } + continue; } - // the & denote parameter is ended - if (ch == '&') { - // parameter is ended, as we hit & separator - addParameter(answer, useRaw || isRaw); - initState(); + if (ch != '&') { + // regular char so add it to the value + value.append(ch); } } - // any left over parameters, then add that - if (key.length() > 0) { + // the & denote parameter is ended + if (ch == '&') { + // parameter is ended, as we hit & separator addParameter(answer, useRaw || isRaw); + initState(); } + } - return answer; - - } catch (UnsupportedEncodingException e) { - URISyntaxException se = new URISyntaxException(e.toString(), "Invalid encoding"); - se.initCause(e); - throw se; + // any left over parameters, then add that + if (key.length() > 0) { + addParameter(answer, useRaw || isRaw); } + + return answer; } private boolean checkRaw() { @@ -165,7 +155,7 @@ class URIScanner { return ch == rawTokenEnd && (next == '&' || next == END); } - private void addParameter(Map<String, Object> answer, boolean isRaw) throws UnsupportedEncodingException { + private void addParameter(Map<String, Object> answer, boolean isRaw) { String name = URLDecoder.decode(key.toString(), CHARSET); String text; if (isRaw) {