Jsf 2 如何找出ServerSideStateHelper中StringIndexOutOfBoundsException的原因?
当我为JSF 2.2应用程序执行负载测试时,有时会在日志中出现以下错误(顺便说一句,我在jmeter采样器的get请求中提取viewstate变量,并在jmeter采样器的post请求中发送该viewstate变量): -我有一个可恢复的ViewHandler类:Jsf 2 如何找出ServerSideStateHelper中StringIndexOutOfBoundsException的原因?,jsf-2,jsf-2.2,Jsf 2,Jsf 2.2,当我为JSF 2.2应用程序执行负载测试时,有时会在日志中出现以下错误(顺便说一句,我在jmeter采样器的get请求中提取viewstate变量,并在jmeter采样器的post请求中发送该viewstate变量): -我有一个可恢复的ViewHandler类: import javax.faces.application.ViewHandler; import javax.faces.application.ViewHandlerWrapper; import javax.faces.com
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;
}
}
请告知我如何修复此异常。此情况是否仅在负载测试期间发生,还是在应用程序正常使用期间发生?@kolossus仅在负载测试中发生
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;
}
}