[ https://issues.apache.org/jira/browse/CXF-2652?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Sergey Beryozkin resolved CXF-2652. ----------------------------------- Resolution: Fixed Fix Version/s: 2.3 2.2.7 Assignee: Sergey Beryozkin It has been fixed. There's a couple of things to note : - UriInfo.getPath() will return "/" only if the actual path value (the one to be returned from getPath()) is empty, no leading slash will be there otherwise. This is consistent with what is returned for the list of PathSegments. I remember asking a question on the jaxrs list about the value of PathSegment.getPath() for a value '/' and the answer was '/'. - UriInfo has getBaseUriBuilder() - please use this builder one instead of Uri.resolve(). The reason UriBuilder was introduced was to let users not to worry about ensuring the concatenation works well and to hide some of limitations of URI. There's really nothing we can do if baseUri ends with '/' for URI.resolve to work... So you can do URI uri = uriInfo.getBaseUriBuilder().path(uriInfo.getPath()).build() and this will work irrespectively of various variations with leading/trailing slashes thanks, Sergey > UriInfo.getAbsolutePath throws "java.net.URISyntaxException: Illegal > character in path" when there is an encoded space in the request URI > ----------------------------------------------------------------------------------------------------------------------------------------- > > Key: CXF-2652 > URL: https://issues.apache.org/jira/browse/CXF-2652 > Project: CXF > Issue Type: Bug > Components: JAX-RS > Affects Versions: 2.2.6 > Environment: Used with Spring > Reporter: Julien Wajsberg > Assignee: Sergey Beryozkin > Fix For: 2.2.7, 2.3 > > > I tried this simple code : > {code} > package mypackage; > import javax.ws.rs.GET; > import javax.ws.rs.Path; > import javax.ws.rs.PathParam; > import javax.ws.rs.core.Context; > import javax.ws.rs.core.UriInfo; > @Path("uri") > public class UriService { > @GET > @Path("something/{id}") > public void addSomething(String string, @Context UriInfo uriInfo, > @PathParam("id") String id) { > System.out.println("getPath -> " + uriInfo.getPath()); > System.out.println("getBasePath -> " + uriInfo.getBaseUri()); > System.out.println("getAbsolutePath -> " + > uriInfo.getBaseUri().resolve(uriInfo.getPath(false))); > System.out.println("getAbsolutePath -> " + uriInfo.getAbsolutePath()); > } > } > {code} > With a Spring-based setup and default beans.xml taken from the user guide. > Then we can use a normal browser . > With "http://localhost:9080/Uritest/rest/uri/something/3", we get in stdout : > {panel} > getPath -> /uri/something/3 > getBasePath -> http://localhost:9080/Uritest/rest > getAbsolutePath -> http://localhost:9080/uri/something/3 > getAbsolutePath -> http://localhost:9080/Uritest/rest/uri/something/3 > {panel} > But with "http://localhost:9080/Uritest/rest/uri/something/3 4", we get an > exception : > {noformat} > java.net.URISyntaxException: Illegal character in path at index 50: > http://localhost:9080/Uritest/rest/uri/something/3 4 > {noformat} > And in stdout : > {panel} > getPath -> /uri/something/3 4 > getBasePath -> http://localhost:9080/Uritest/rest > getAbsolutePath -> http://localhost:9080/uri/something/3%204 > {panel} > NB : in JAX-RS javadoc, it's said that "getAbsolutePath()" is a shortcut to > uriInfo.getBase().resolve(uriInfo.getPath())", which is plain wrong, because : > # getBase doesn't exist, that's getBaseUri > # getPath as returned by CXF begins with a slash ("/") so "resolve" doesn't > do what we want here. (maybe another bug ? tell me and I'll create another > issue) -- This message is automatically generated by JIRA. - You can reply to this email to add a comment to the issue online.