How to figure out the cause of StringIndexOutOfBou

2019-07-31 16:41发布

问题:

while i am performing load test for my JSF 2.2 application, sometimes i get the following error in logs (BTW i am extracting the viewstate variable in the get request of the jmeter sampler and send that viewstate variable in the post request in the jmeter sampler):

Jul 09 10:21:56 staging i-3a840e59:  09-Jul-2014 17:21:55.490 SEVERE [http-bio-8308-exec-15] org.apache.catalina.core.StandardWrapperValve.invoke Servlet.service() for servlet [Faces Servlet] in context with path [] threw exception [String index out of range: -1] with root cause 
Jul 09 10:21:56 staging i-3a840e59:   java.lang.StringIndexOutOfBoundsException: String index out of range: -1 
Jul 09 10:21:56 staging i-3a840e59:     at java.lang.String.substring(Unknown Source) 
Jul 09 10:21:56 staging i-3a840e59:     at com.sun.faces.renderkit.ServerSideStateHelper.getState(ServerSideStateHelper.java:287) 
Jul 09 10:21:56 staging i-3a840e59:     at com.sun.faces.renderkit.ServerSideStateHelper.isStateless(ServerSideStateHelper.java:484) 
Jul 09 10:21:56 staging i-3a840e59:     at com.sun.faces.renderkit.ResponseStateManagerImpl.isStateless(ResponseStateManagerImpl.java:168) 
Jul 09 10:21:56 staging i-3a840e59:     at com.sun.faces.application.view.FaceletViewHandlingStrategy.restoreView(FaceletViewHandlingStrategy.java:539) 
Jul 09 10:21:56 staging i-3a840e59:     at com.sun.faces.application.view.MultiViewHandler.restoreView(MultiViewHandler.java:148) 
Jul 09 10:21:56 staging i-3a840e59:     at javax.faces.application.ViewHandlerWrapper.restoreView(ViewHandlerWrapper.java:353) 
Jul 09 10:21:56 staging i-3a840e59:     at org.omnifaces.viewhandler.RestorableViewHandler.restoreView(RestorableViewHandler.java:66) 
Jul 09 10:21:56 staging i-3a840e59:     at com.motivosity.web.utils.RestorableViewHandler.restoreView(RestorableViewHandler.java:21) 
Jul 09 10:21:56 staging i-3a840e59:     at com.sun.faces.lifecycle.RestoreViewPhase.execute(RestoreViewPhase.java:197) 
Jul 09 10:21:56 staging i-3a840e59:     at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101) 
Jul 09 10:21:56 staging i-3a840e59:     at com.sun.faces.lifecycle.RestoreViewPhase.doPhase(RestoreViewPhase.java:121) 
Jul 09 10:21:56 staging i-3a840e59:     at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:198) 
Jul 09 10:21:56 staging i-3a840e59:     at javax.faces.webapp.FacesServlet.service(FacesServlet.java:646) 
Jul 09 10:21:56 staging i-3a840e59:     at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:303) 
Jul 09 10:21:56 staging i-3a840e59:     at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208) 
Jul 09 10:21:56 staging i-3a840e59:     at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52) 
Jul 09 10:21:56 staging i-3a840e59:     at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241) 
Jul 09 10:21:56 staging i-3a840e59:     at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208) 
Jul 09 10:21:56 staging i-3a840e59:     at org.apache.shiro.web.servlet.ProxiedFilterChain.doFilter(ProxiedFilterChain.java:61) 
Jul 09 10:21:56 staging i-3a840e59:     at org.apache.shiro.web.servlet.AdviceFilter.executeChain(AdviceFilter.java:108) 
Jul 09 10:21:56 staging i-3a840e59:     at org.apache.shiro.web.servlet.AdviceFilter.doFilterInternal(AdviceFilter.java:137) 
Jul 09 10:21:56 staging i-3a840e59:     at org.apache.shiro.web.servlet.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:125) 
Jul 09 10:21:56 staging i-3a840e59:     at org.apache.shiro.web.servlet.ProxiedFilterChain.doFilter(ProxiedFilterChain.java:66) 
Jul 09 10:21:56 staging i-3a840e59:     at org.apache.shiro.web.servlet.AbstractShiroFilter.executeChain(AbstractShiroFilter.java:449) 
Jul 09 10:21:56 staging i-3a840e59:     at org.apache.shiro.web.servlet.AbstractShiroFilter$1.call(AbstractShiroFilter.java:365) 
Jul 09 10:21:56 staging i-3a840e59:     at org.apache.shiro.subject.support.SubjectCallable.doCall(SubjectCallable.java:90) 
Jul 09 10:21:56 staging i-3a840e59:     at org.apache.shiro.subject.support.SubjectCallable.call(SubjectCallable.java:83) 
Jul 09 10:21:56 staging i-3a840e59:     at org.apache.shiro.subject.support.DelegatingSubject.execute(DelegatingSubject.java:383) 
Jul 09 10:21:56 staging i-3a840e59:     at org.apache.shiro.web.servlet.AbstractShiroFilter.doFilterInternal(AbstractShiroFilter.java:362) 
Jul 09 10:21:56 staging i-3a840e59:     at org.apache.shiro.web.servlet.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:125) 
Jul 09 10:21:56 staging i-3a840e59:     at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241) 
Jul 09 10:21:56 staging i-3a840e59:     at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208) 
Jul 09 10:21:56 staging i-3a840e59:     at org.springframework.orm.jpa.support.OpenEntityManagerInViewFilter.doFilterInternal(OpenEntityManagerInViewFilter.java:180) 
Jul 09 10:21:56 staging i-3a840e59:     at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) 
Jul 09 10:21:56 staging i-3a840e59:     at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241) 
Jul 09 10:21:56 staging i-3a840e59:     at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208) 
Jul 09 10:21:56 staging i-3a840e59:     at org.springframework.web.filter.HiddenHttpMethodFilter.doFilterInternal(HiddenHttpMethodFilter.java:77) 
Jul 09 10:21:56 staging i-3a840e59:     at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) 
Jul 09 10:21:56 staging i-3a840e59:     at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241) 
Jul 09 10:21:56 staging i-3a840e59:     at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208) 
Jul 09 10:21:56 staging i-3a840e59:     at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:88) 
Jul 09 10:21:56 staging i-3a840e59:     at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) 
Jul 09 10:21:56 staging i-3a840e59:     at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241) 
Jul 09 10:21:56 staging i-3a840e59:     at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208) 
Jul 09 10:21:56 staging i-3a840e59:     at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:220) 
Jul 09 10:21:56 staging i-3a840e59:     at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:122) 
Jul 09 10:21:56 staging i-3a840e59:     at de.javakaffee.web.msm.RequestTrackingContextValve.invoke(RequestTrackingContextValve.java:99) 
Jul 09 10:21:56 staging i-3a840e59:     at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:501) 
Jul 09 10:21:56 staging i-3a840e59:     at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:171) 
Jul 09 10:21:56 staging i-3a840e59:     at de.javakaffee.web.msm.RequestTrackingHostValve.invoke(RequestTrackingHostValve.java:156) 
Jul 09 10:21:56 staging i-3a840e59:     at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102) 
Jul 09 10:21:56 staging i-3a840e59:     at org.apache.catalina.valves.RemoteIpValve.invoke(RemoteIpValve.java:683) 
Jul 09 10:21:56 staging i-3a840e59:     at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:116) 
Jul 09 10:21:56 staging i-3a840e59:     at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:408) 
Jul 09 10:21:56 staging i-3a840e59:     at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1040) 
Jul 09 10:21:56 staging i-3a840e59:     at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:607) 
Jul 09 10:21:56 staging i-3a840e59:     at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:314) 
Jul 09 10:21:56 staging i-3a840e59:     at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source) 
Jul 09 10:21:56 staging i-3a840e59:     at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) 
Jul 09 10:21:56 staging i-3a840e59:     at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) 
Jul 09 10:21:56 staging i-3a840e59:     at java.lang.Thread.run(Unknown Source) 

-i have a RestorableViewHandler class:

import javax.faces.application.ViewHandler;
import javax.faces.application.ViewHandlerWrapper;
import javax.faces.component.UIViewRoot;
import javax.faces.context.FacesContext;

import org.apache.commons.lang.exception.ExceptionUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class RestorableViewHandler extends ViewHandlerWrapper {

    private static final Logger log = (Logger) LoggerFactory.getLogger(RestorableViewHandler.class);

    private ViewHandler wrapped;

    public RestorableViewHandler(ViewHandler wrapped) {
        this.wrapped = wrapped;
    }

    @Override
    public UIViewRoot restoreView(FacesContext context, String viewId) {
        UIViewRoot createdView = null;
        try {
            UIViewRoot restoredView = wrapped.restoreView(context, viewId);

            if (!(restoredView == null && context.isPostback())) {
                return restoredView;
            }

            createdView = createView(context, viewId);
            context.setViewRoot(createdView);
            getViewDeclarationLanguage(context, viewId).buildView(context, createdView);
        } catch (Exception e) {
            if (log.isErrorEnabled()) {
                log.error("################### viewId: " + viewId);
                log.error("################### createdView: " + createdView);
                log.error("Exception happened in restoreView: " + ExceptionUtils.getFullStackTrace(e));
            }
        }

        return createdView;
    }

    @Override
    public ViewHandler getWrapped() {
        return wrapped;
    }

}

please advise how can i fix this exception.

标签: jsf-2 jsf-2.2