-
Bug
-
Resolution: Done
-
Major
-
3.0.6.Final, 3.0.8.Final
-
None
When calling UriBuilder with a relative path that contains one or more colons, it fails with an IllegalArgumentException.
javax.ws.rs.core.UriBuilder.fromUri("foo/bar:id")
java.lang.IllegalArgumentException: Illegal uri template: foo/bar:id
at org.jboss.resteasy.specimpl.ResteasyUriBuilder.parseHierarchicalUri(ResteasyUriBuilder.java:177)
at org.jboss.resteasy.specimpl.ResteasyUriBuilder.uriTemplate(ResteasyUriBuilder.java:135)
at org.jboss.resteasy.specimpl.ResteasyUriBuilder.uri(ResteasyUriBuilder.java:188)
at javax.ws.rs.core.UriBuilder.fromUri(UriBuilder.java:119)
if (!scheme && !"".equals(group) && !group.startsWith("/") && group.indexOf(':') > -1) throw new IllegalArgumentException("Illegal uri template: " + uriTemplate);
This line in org.jboss.resteasy.specimpl.ResteasyUriBuilder#parseHierarchicalUri checks explicitly if a colon is contained in the path and throws this exception. According to http://tools.ietf.org/html/rfc3986#appendix-A the colon is allowed in the path at this position. For path-noscheme only the first segment MUST NOT contain a colon, every following segment can contain pchar* including colon.
path = path-abempty ; begins with "/" or is empty / path-absolute ; begins with "/" but not "//" / path-noscheme ; begins with a non-colon segment / path-rootless ; begins with a segment / path-empty ; zero characters path-abempty = *( "/" segment ) path-absolute = "/" [ segment-nz *( "/" segment ) ] path-noscheme = segment-nz-nc *( "/" segment ) path-rootless = segment-nz *( "/" segment ) path-empty = 0<pchar> segment = *pchar segment-nz = 1*pchar segment-nz-nc = 1*( unreserved / pct-encoded / sub-delims / "@" ) ; non-zero-length segment without any colon ":" pchar = unreserved / pct-encoded / sub-delims / ":" / "@"
This bug causes org.jboss.resteasy.mock.MockHttpRequest#initWithUri(java.lang.String) to fail for relative URIs that contain colons.