ExecuteAndWaitInterceptor发生Struts2 NotSerializableException

时间:2017-12-05 19:06:17

标签: struts2

我们正在运行Struts 2.5.14.1并致力于外部化Tomcat会话状态。这需要Serializable会话。但是,我们使用ExecuteAndWait拦截器的Action失败了。由于我们的原始代码非常复杂,我在下面写了一个更简单的代码,演示了完全相同的行为。

这里显示的是简单的操作:

package com.sentrylink.web.actions;

import java.util.concurrent.TimeUnit;

import org.apache.struts2.convention.annotation.InterceptorRef;
import org.apache.struts2.convention.annotation.InterceptorRefs;
import org.apache.struts2.convention.annotation.Result;
import org.apache.struts2.convention.annotation.Results;

import com.opensymphony.xwork2.ActionSupport;

@SuppressWarnings("serial")
@Results({
    @Result(name="wait", location="/"),
    @Result(name=ActionSupport.SUCCESS, location="/WEB-INF/content/messagePage.jsp"),
})
@InterceptorRefs({
    @InterceptorRef("webStack"),
    @InterceptorRef("execAndWait")
})
public class TestExecuteAndWait extends ActionSupport {

    public String execute() throws Exception {
        TimeUnit.SECONDS.sleep(10);
        return SUCCESS;
    }

}

运行此功能

WARNING: Cannot serialize session attribute __execWaittest-execute-and-wait for session 74CDB9F8D00BBC697030AFC6978E94F6 
java.io.NotSerializableException: com.opensymphony.xwork2.inject.ContainerImpl$ConstructorInjector

看起来Struts正在引入一个不需要的项目进行序列化。它可能与here描述的错误有关,虽然该错误的修复似乎出现在2.5.14.1中(毫不奇怪,因为该修复是在2013年)。

我怀疑这是框架中的一个错误,但在我继续提交报告并为自己找出解决方法之前,我想我会看到是否有人有解决方案或曾经让ExecuteAndWait与序列化工作会话。

0 个答案:

没有答案