[ https://issues.apache.org/jira/browse/CXF-7210?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15820453#comment-15820453 ]
Sebastian Hoß commented on CXF-7210: ------------------------------------ Thanks a lot! :-) > 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ß > Assignee: Freeman Fang > Priority: Trivial > Fix For: 3.2.0, 3.1.10 > > > 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)