This is an automated email from the ASF dual-hosted git repository.
turcsanyi pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/nifi.git
The following commit(s) were added to refs/heads/main by this push:
new 6761de3901 NIFI-13810 Handled Trailing Separator for Paths in URI
Builder
6761de3901 is described below
commit 6761de3901a36303cd616c69ca05ecc3a1c1127d
Author: exceptionfactory <[email protected]>
AuthorDate: Fri Sep 27 08:52:53 2024 -0500
NIFI-13810 Handled Trailing Separator for Paths in URI Builder
This closes #9319.
Signed-off-by: Peter Turcsanyi <[email protected]>
---
.../nifi/web/client/StandardHttpUriBuilder.java | 12 ++++++
.../web/client/StandardHttpUriBuilderTest.java | 44 ++++++++++++++++++++++
2 files changed, 56 insertions(+)
diff --git
a/nifi-commons/nifi-web-client/src/main/java/org/apache/nifi/web/client/StandardHttpUriBuilder.java
b/nifi-commons/nifi-web-client/src/main/java/org/apache/nifi/web/client/StandardHttpUriBuilder.java
index 6b5816facd..70597239cf 100644
---
a/nifi-commons/nifi-web-client/src/main/java/org/apache/nifi/web/client/StandardHttpUriBuilder.java
+++
b/nifi-commons/nifi-web-client/src/main/java/org/apache/nifi/web/client/StandardHttpUriBuilder.java
@@ -41,6 +41,8 @@ public class StandardHttpUriBuilder implements HttpUriBuilder
{
private static final int MAXIMUM_PORT = 65535;
+ private static final char PATH_SEGMENT_SEPARATOR_CHARACTER = '/';
+
private static final String PATH_SEGMENT_SEPARATOR = "/";
private static final String QUERY_PARAMETER_SEPARATOR = "&";
@@ -132,6 +134,16 @@ public class StandardHttpUriBuilder implements
HttpUriBuilder {
}
if (!pathSegments.isEmpty()) {
+ final int pathBuilderLength = pathBuilder.length();
+ if (pathBuilderLength > 0) {
+ // Append Path Segment Separator after encodedPath and before
pathSegments when not found in encodedPath
+ final int lastIndex = pathBuilderLength - 1;
+ final char lastCharacter = pathBuilder.charAt(lastIndex);
+ if (PATH_SEGMENT_SEPARATOR_CHARACTER != lastCharacter) {
+ pathBuilder.append(PATH_SEGMENT_SEPARATOR_CHARACTER);
+ }
+ }
+
final String separatedPath = String.join(PATH_SEGMENT_SEPARATOR,
pathSegments);
pathBuilder.append(separatedPath);
}
diff --git
a/nifi-commons/nifi-web-client/src/test/java/org/apache/nifi/web/client/StandardHttpUriBuilderTest.java
b/nifi-commons/nifi-web-client/src/test/java/org/apache/nifi/web/client/StandardHttpUriBuilderTest.java
index 24a2244873..c6b7f61079 100644
---
a/nifi-commons/nifi-web-client/src/test/java/org/apache/nifi/web/client/StandardHttpUriBuilderTest.java
+++
b/nifi-commons/nifi-web-client/src/test/java/org/apache/nifi/web/client/StandardHttpUriBuilderTest.java
@@ -33,8 +33,14 @@ class StandardHttpUriBuilderTest {
private static final String ENCODED_PATH = "/resources/search";
+ private static final String ENCODED_PATH_WITH_TRAILING_SEPARATOR =
"/resources/search/";
+
private static final String PATH_WITH_SPACES_ENCODED =
"/resources/%20separated%20search";
+ private static final String BUCKETS_PATH_SEGMENT = "buckets";
+
+ private static final String FILES_PATH_SEGMENT = "files";
+
private static final String RESOURCES_PATH_SEGMENT = "resources";
private static final String RESOURCES_PATH_SEGMENT_SEPARATED =
"resources|separated";
@@ -69,6 +75,14 @@ class StandardHttpUriBuilderTest {
String.format("%s://%s:%d%s", HTTP_SCHEME, LOCALHOST, PORT,
PATH_WITH_SPACES_ENCODED)
);
+ private static final URI
HTTP_LOCALHOST_PORT_ENCODED_PATH_WITH_SPACES_AND_SEGMENTS_URI = URI.create(
+ String.format("%s://%s:%d%s/%s/%s", HTTP_SCHEME, LOCALHOST, PORT,
PATH_WITH_SPACES_ENCODED, BUCKETS_PATH_SEGMENT, FILES_PATH_SEGMENT)
+ );
+
+ private static final URI
HTTP_LOCALHOST_PORT_ENCODED_PATH_WITH_TRAILING_SEPARATOR_AND_SEGMENTS_URI =
URI.create(
+ String.format("%s://%s:%d%s%s/%s", HTTP_SCHEME, LOCALHOST, PORT,
ENCODED_PATH_WITH_TRAILING_SEPARATOR, BUCKETS_PATH_SEGMENT, FILES_PATH_SEGMENT)
+ );
+
private static final URI HTTP_LOCALHOST_RESOURCES_URI = URI.create(
String.format("%s%s", HTTP_LOCALHOST_URI, RESOURCES_PATH_SEGMENT)
);
@@ -168,6 +182,36 @@ class StandardHttpUriBuilderTest {
assertEquals(HTTP_LOCALHOST_PORT_ENCODED_PATH_WITH_SPACES_URI, uri);
}
+ @Test
+ void testBuildSchemeHostPortEncodedPathWithSpacesAndPathSegments() {
+ final HttpUriBuilder builder = new StandardHttpUriBuilder()
+ .scheme(HTTP_SCHEME)
+ .host(LOCALHOST)
+ .port(PORT)
+ .encodedPath(PATH_WITH_SPACES_ENCODED)
+ .addPathSegment(BUCKETS_PATH_SEGMENT)
+ .addPathSegment(FILES_PATH_SEGMENT);
+
+ final URI uri = builder.build();
+
+
assertEquals(HTTP_LOCALHOST_PORT_ENCODED_PATH_WITH_SPACES_AND_SEGMENTS_URI,
uri);
+ }
+
+ @Test
+ void
testBuildSchemeHostPortEncodedPathWithTrailingSeparatorAndPathSegments() {
+ final HttpUriBuilder builder = new StandardHttpUriBuilder()
+ .scheme(HTTP_SCHEME)
+ .host(LOCALHOST)
+ .port(PORT)
+ .encodedPath(ENCODED_PATH_WITH_TRAILING_SEPARATOR)
+ .addPathSegment(BUCKETS_PATH_SEGMENT)
+ .addPathSegment(FILES_PATH_SEGMENT);
+
+ final URI uri = builder.build();
+
+
assertEquals(HTTP_LOCALHOST_PORT_ENCODED_PATH_WITH_TRAILING_SEPARATOR_AND_SEGMENTS_URI,
uri);
+ }
+
@Test
void testBuildSchemeHostPathSegment() {
final HttpUriBuilder builder = new StandardHttpUriBuilder()