[
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.