You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@cxf.apache.org by "Sebastian Hoß (JIRA)" <ji...@apache.org> on 2017/01/11 12:38:58 UTC
[jira] [Created] (CXF-7210) StringIndexOutOfBoundsException during
construction of failover request
Sebastian Hoß created CXF-7210:
----------------------------------
Summary: StringIndexOutOfBoundsException during construction of failover request
Key: CXF-7210
URL: https://issues.apache.org/jira/browse/CXF-7210
Project: CXF
Issue Type: Bug
Components: JAX-RS
Reporter: Sebastian Hoß
Priority: Trivial
In {{AbstractClient}} we [have the following|https://github.com/apache/cxf/blob/master/rt/rs/client/src/main/java/org/apache/cxf/jaxrs/client/AbstractClient.java#L650]:
{code}
UriBuilder builder = new UriBuilderImpl().uri(newBaseURI);
String basePath = reqURIPath.startsWith(baseURIPath) ? baseURIPath : getBaseURI().getRawPath();
builder.path(reqURIPath.equals(basePath) ? "" : reqURIPath.substring(basePath.length()));
{code}
This covers two out of three potential cases:
1) {{baseURIPath}} and {{reqURIPath}} have the same value which will result in only the base path being added to the builder.
2) {{baseURIPath}} and {{reqURIPath}} have a different value in which case the builder will get the base path and and everything from the request path that is not already included in the base path.
What's missing (and what is causing the exception below) is that the base path might be longer than the request path in which case {{reqURIPath.substring(basePath.length())}} throws the following stack trace:
{code}
Caused by: java.lang.StringIndexOutOfBoundsException: String index out of range: -7
at java.lang.String.substring(String.java:1875)
at org.apache.cxf.jaxrs.client.AbstractClient.calculateNewRequestURI(AbstractClient.java:652)
at org.apache.cxf.jaxrs.client.AbstractClient.calculateNewRequestURI(AbstractClient.java:642)
at org.apache.cxf.jaxrs.client.AbstractClient.retryInvoke(AbstractClient.java:688)
at org.apache.cxf.jaxrs.client.AbstractClient$RetryableImpl.invoke(AbstractClient.java:1174)
at org.apache.cxf.clustering.FailoverTargetSelector.performFailover(FailoverTargetSelector.java:207)
at org.apache.cxf.clustering.FailoverTargetSelector.complete(FailoverTargetSelector.java:166)
at org.talend.esb.servicelocator.cxf.internal.LocatorTargetSelector.complete(LocatorTargetSelector.java:57)
at org.apache.cxf.jaxrs.client.AbstractClient.preProcessResult(AbstractClient.java:575)
{code}
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)