Actually, Reference seems to have some odd behavior in general when constructed
with baseRef. Depending on the construction one may end up with null values, odd
values, wrong URIs, NullPointerExceptions, and infinite loops resulting in
StackOverflowErrors.

Here are my test cases:

Reference host = new Reference("http://host.com";)
scheme:         http
authority:      host.com
path:           null
baseRef:        null
rel-part:       java.lang.StackOverflowError
rem-part:       http://host.com
toString:       http://host.com
targetRef:      http://host.com


Reference slashdir = new Reference(host, "/dir")
scheme:         null
authority:      null
path:           /dir
baseRef:        http://host.com
rel-part:       /dir
Apr 10, 2007 4:45:55 PM org.restlet.data.Reference getRemainingPart
WARNING: Cannot get the remaining part. [baseRef,internalRef]=[http://host.com,
/dir]
java.lang.StringIndexOutOfBoundsException: String index out of range: -11
        at java.lang.String.substring(String.java:1768)
        at java.lang.String.substring(String.java:1735)
        at org.restlet.data.Reference.getRemainingPart(Reference.java:781)
        at xex.webdb.Main.display(Main.java:69)
        at xex.webdb.Main.main(Main.java:44)
rem-part:       null
toString:       /dir
targetRef:      http://host.com/dir


Reference dir = new Reference(host, "dir")
scheme:         null
authority:      null
path:           dir
baseRef:        http://host.com
rel-part:       dir
Apr 10, 2007 4:45:55 PM org.restlet.data.Reference getRemainingPart
WARNING: Cannot get the remaining part. [baseRef,internalRef]=[http://host.com, 
dir]
java.lang.StringIndexOutOfBoundsException: String index out of range: -12
        at java.lang.String.substring(String.java:1768)
        at java.lang.String.substring(String.java:1735)
        at org.restlet.data.Reference.getRemainingPart(Reference.java:781)
        at xex.webdb.Main.display(Main.java:69)
        at xex.webdb.Main.main(Main.java:45)
rem-part:       null
toString:       dir
targetRef:      http://host.com/dir


Reference dirslash = new Reference(host, "dir/")
scheme:         null
authority:      null
path:           dir/
baseRef:        http://host.com
rel-part:       dir/
Apr 10, 2007 4:45:55 PM org.restlet.data.Reference getRemainingPart
WARNING: Cannot get the remaining part. [baseRef,internalRef]=[http://host.com,
dir/]
java.lang.StringIndexOutOfBoundsException: String index out of range: -11
        at java.lang.String.substring(String.java:1768)
        at java.lang.String.substring(String.java:1735)
        at org.restlet.data.Reference.getRemainingPart(Reference.java:781)
        at xex.webdb.Main.display(Main.java:69)
        at xex.webdb.Main.main(Main.java:46)
rem-part:       null
toString:       dir/
targetRef:      http://host.com/dir/


Reference fulldir = new Reference("http://host.com/dir";)
scheme:         http
authority:      host.com
path:           /dir
baseRef:        null
rel-part:       java.lang.StackOverflowError
rem-part:       http://host.com/dir
toString:       http://host.com/dir
targetRef:      http://host.com/dir


Reference fulldirsub = new Reference(fulldir, "sub")
scheme:         null
authority:      null
path:           sub
baseRef:        http://host.com/dir
rel-part:       sub
Apr 10, 2007 4:45:55 PM org.restlet.data.Reference getRemainingPart
WARNING: Cannot get the remaining part.
[baseRef,internalRef]=[http://host.com/dir, sub]
java.lang.StringIndexOutOfBoundsException: String index out of range: -16
        at java.lang.String.substring(String.java:1768)
        at java.lang.String.substring(String.java:1735)
        at org.restlet.data.Reference.getRemainingPart(Reference.java:781)
        at xex.webdb.Main.display(Main.java:69)
        at xex.webdb.Main.main(Main.java:49)
rem-part:       null
toString:       sub
targetRef:      http://host.com/sub


Reference fulldirslashsub = new Reference(fulldir, "/sub")
scheme:         null
authority:      null
path:           /sub
baseRef:        http://host.com/dir
rel-part:       /sub
Apr 10, 2007 4:45:55 PM org.restlet.data.Reference getRemainingPart
WARNING: Cannot get the remaining part.
[baseRef,internalRef]=[http://host.com/dir, /sub]
java.lang.StringIndexOutOfBoundsException: String index out of range: -15
        at java.lang.String.substring(String.java:1768)
        at java.lang.String.substring(String.java:1735)
        at org.restlet.data.Reference.getRemainingPart(Reference.java:781)
        at xex.webdb.Main.display(Main.java:69)
        at xex.webdb.Main.main(Main.java:50)
rem-part:       null
toString:       /sub
targetRef:      http://host.com/sub


Reference slashdirsub = new Reference(slashdir, "sub")
scheme:         null
authority:      null
path:           sub
baseRef:        /dir
rel-part:       sub
Apr 10, 2007 4:45:55 PM org.restlet.data.Reference getRemainingPart
WARNING: Cannot get the remaining part. [baseRef,internalRef]=[/dir, sub]
java.lang.StringIndexOutOfBoundsException: String index out of range: -1
        at java.lang.String.substring(String.java:1768)
        at java.lang.String.substring(String.java:1735)
        at org.restlet.data.Reference.getRemainingPart(Reference.java:781)
        at xex.webdb.Main.display(Main.java:69)
        at xex.webdb.Main.main(Main.java:52)
rem-part:       null
toString:       sub
targetRef:      java.lang.NullPointerException


Reference slashdirslashsub = new Reference(slashdir, "/sub")
scheme:         null
authority:      null
path:           /sub
baseRef:        /dir
rel-part:       /sub
rem-part:       
toString:       /sub
targetRef:      java.lang.NullPointerException


Reference dirslashsub = new Reference(dirslash, "sub");
scheme:         null
authority:      null
path:           sub
baseRef:        dir/
rel-part:       sub
Apr 10, 2007 4:45:55 PM org.restlet.data.Reference getRemainingPart
WARNING: Cannot get the remaining part. [baseRef,internalRef]=[dir/, sub]
java.lang.StringIndexOutOfBoundsException: String index out of range: -1
        at java.lang.String.substring(String.java:1768)
        at java.lang.String.substring(String.java:1735)
        at org.restlet.data.Reference.getRemainingPart(Reference.java:781)
        at xex.webdb.Main.display(Main.java:69)
        at xex.webdb.Main.main(Main.java:55)
rem-part:       null
toString:       sub
targetRef:      java.lang.NullPointerException


Reference fullsub = new Reference("http://host.com/dir/sub";)
scheme:         http
authority:      host.com
path:           /dir/sub
baseRef:        null
rel-part:       java.lang.StackOverflowError
rem-part:       http://host.com/dir/sub
toString:       http://host.com/dir/sub
targetRef:      http://host.com/dir/sub



Reply via email to