-
Type:
Bug
-
Status: Closed
-
Priority:
Major
-
Resolution: Fixed
-
Affects Version/s: 2.6, 2.7
-
Fix Version/s: 2.7.4, 2.6.7, 3.0.0-milestone1
-
Component/s: None
-
Labels:None
-
Estimated Complexity:Unknown
Use Case: OData (odata.org) / odata4j (odata4j.org)
Building an URI based on OData query parameter:
URI called by http client: .../Employees?$filter=startswith(CarrierId,'A')
URI build on server:
String nextHref = uriInfo.getRequestUriBuilder().replaceQueryParam("$skiptoken", "
{dummySkipToken}").build().toString();
Result is:
/Employees?$filter=startswith%2528CarrierId%252C%2527A%2527%2529&$skiptoken=%7BdummySkipToken%7D
The value of query parameter $filter is encoded twice. The issue is in the embrasing {} of the value of the $skiptoken query parameter.
CXF does a partial encoding of the first query parameter which succeeds and then gets a UriSyntaxException for the 2nd query parameter. After that it falls back and encodes the whole URI while the 1st query option is already encoded.