users@jsr311.java.net

UriBuilder.buildFromEncoded() spec interpretation

From: Andrzej Michalec <andrzej.michalec_at_googlemail.com>
Date: Sat, 24 Jan 2009 13:04:33 +0100

Hi,
I am looking for clarification of JAX-RS specification 1.0 for
"UriBuilder.build(Object... values)" in encoding context.
Spec says that "All '%' characters in the stringified values will be
encoded." This note matches behavior or URLEncoder, since % must be
encoded anyway.
My problem is that for "UriBuilder.buildFromEncoded(Object... values)"
spec says "All % characters in the stringified values that are not
followed by two hexadecimal numbers will be encoded".

My interpretation of spec authors' intention is that: passed values
are already encoded e.g. non-encoded value "foo%bar" must be encoded
to "foo%25bar" and passed here. However if there are any '%' not
matching percent-with-two-hexes like second '%' in "foo%25bar%baz".
Their encoding should be forced. I think then "foo%25bar%baz" should
become "foo%25bar%25baz". If URLEncoder would be applied once more
result would be different, both percent chars would be affected
leading to "foo%2525bar%25baz".

How should "buildFromEncoded()" behave when "foo+bar" is passed? If
'%' char encoding is forced also '+' char should be, leading to
"foo%2Bbar".

I see behavior of "buildFromEncoded" as not aligned with URLEncode
behavior. This "extra" safety rule is not necessary for me... can
anybody explain this aspect?

cheers,
andy.