cxf-issues mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Sergey Beryozkin (JIRA)" <j...@apache.org>
Subject [jira] Resolved: (CXF-2652) UriInfo.getAbsolutePath throws "java.net.URISyntaxException: Illegal character in path" when there is an encoded space in the request URI
Date Fri, 05 Feb 2010 12:05:28 GMT

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


Mime
View raw message