This is an automated email from the ASF dual-hosted git repository.

ghenzler pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/sling-org-apache-sling-api.git


The following commit(s) were added to refs/heads/master by this push:
     new 8e6f6c3  SLING-9745 Handle absolute URIs without scheme correctly
8e6f6c3 is described below

commit 8e6f6c3e19b86d9cf0b0647a9ab8af1c0f094bb0
Author: georg.henzler <[email protected]>
AuthorDate: Wed Sep 23 20:39:56 2020 +0200

    SLING-9745 Handle absolute URIs without scheme correctly
---
 .../org/apache/sling/api/uri/SlingUriBuilder.java  | 30 ++++++++--------
 .../org/apache/sling/api/uri/SlingUriTest.java     | 40 ++++++++++++++++++++++
 2 files changed, 54 insertions(+), 16 deletions(-)

diff --git a/src/main/java/org/apache/sling/api/uri/SlingUriBuilder.java 
b/src/main/java/org/apache/sling/api/uri/SlingUriBuilder.java
index 29ef397..7088672 100644
--- a/src/main/java/org/apache/sling/api/uri/SlingUriBuilder.java
+++ b/src/main/java/org/apache/sling/api/uri/SlingUriBuilder.java
@@ -657,23 +657,21 @@ public class SlingUriBuilder {
 
     private String toStringInternal(boolean includeScheme, boolean 
includeFragment) {
         StringBuilder requestUri = new StringBuilder();
-
-        if (isAbsolute()) {
-            if (includeScheme) {
-                requestUri.append(scheme + CHAR_COLON);
+        
+        if (includeScheme && isAbsolute()) {
+            requestUri.append(scheme + CHAR_COLON);
+        }
+        if (isNotBlank(host)) {
+            requestUri.append(CHAR_SLASH + CHAR_SLASH);
+            if (isNotBlank(userInfo)) {
+                requestUri.append(userInfo + CHAR_AT);
             }
-            if (schemeSpecificPart == null) {
-                requestUri.append(CHAR_SLASH + CHAR_SLASH);
-                if (isNotBlank(userInfo)) {
-                    requestUri.append(userInfo + CHAR_AT);
-                }
-                requestUri.append(host);
-                if (port > 0
-                        && !(scheme.equals(HTTP_SCHEME) && port == 
HTTP_DEFAULT_PORT)
-                        && !(scheme.equals(HTTPS_SCHEME) && port == 
HTTPS_DEFAULT_PORT)) {
-                    requestUri.append(CHAR_COLON);
-                    requestUri.append(port);
-                }
+            requestUri.append(host);
+            if (port > 0 
+                    && !(HTTP_SCHEME.equals(scheme) && port == 
HTTP_DEFAULT_PORT)
+                    && !(HTTPS_SCHEME.equals(scheme) && port == 
HTTPS_DEFAULT_PORT)) {
+                requestUri.append(CHAR_COLON);
+                requestUri.append(port);
             }
         }
         if (schemeSpecificPart != null) {
diff --git a/src/test/java/org/apache/sling/api/uri/SlingUriTest.java 
b/src/test/java/org/apache/sling/api/uri/SlingUriTest.java
index 8faaa71..3e11d9a 100644
--- a/src/test/java/org/apache/sling/api/uri/SlingUriTest.java
+++ b/src/test/java/org/apache/sling/api/uri/SlingUriTest.java
@@ -81,6 +81,46 @@ public class SlingUriTest {
     }
 
     @Test
+    public void testFullUriWithoutSchemeSimple() {
+
+        String testUriStr = "//cdn.example.com/test/js_file.js";
+
+        testUri(testUriStr, false, false, false, false, false, slingUri -> {
+            assertEquals(null, slingUri.getScheme());
+            assertEquals("//cdn.example.com/test/js_file.js", 
slingUri.getSchemeSpecificPart());
+            assertEquals(null, slingUri.getUserInfo());
+            assertEquals("cdn.example.com", slingUri.getHost());
+            assertEquals(-1, slingUri.getPort());
+            assertEquals("/test/js_file", slingUri.getResourcePath());
+            assertEquals(null, slingUri.getSelectorString());
+            assertEquals("js", slingUri.getExtension());
+            assertEquals(null, slingUri.getSuffix());
+            assertEquals(null, slingUri.getQuery());
+        }, asList(resolver, null));
+
+    }
+
+    @Test
+    public void testFullUriWithoutSchemeComplex() {
+
+        String testUriStr = 
"//user:[email protected]:3000/test/js_file.txt.js?par1=val1&par2=val2";
+
+        testUri(testUriStr, false, false, false, false, false, slingUri -> {
+            assertEquals(null, slingUri.getScheme());
+            
assertEquals("//user:[email protected]:3000/test/js_file.txt.js?par1=val1&par2=val2",
 slingUri.getSchemeSpecificPart());
+            assertEquals("user:pw", slingUri.getUserInfo());
+            assertEquals("cdn.example.com", slingUri.getHost());
+            assertEquals(3000, slingUri.getPort());
+            assertEquals("/test/js_file", slingUri.getResourcePath());
+            assertEquals("txt", slingUri.getSelectorString());
+            assertEquals("js", slingUri.getExtension());
+            assertEquals(null, slingUri.getSuffix());
+            assertEquals("par1=val1&par2=val2", slingUri.getQuery());
+        }, asList(resolver, null));
+
+    }
+    
+    @Test
     public void testAbsolutePathSlingUri() {
         String testUriStr = 
"/test/to/path.sel1.json/suffix/path?p1=2&p2=3#frag3939";
 

Reply via email to