我正在尝试集成SAIF插件来拦截我的struts动作。我从中学习 http://struts.sourceforge.net/saif/index.html
我写的配置如下: 的struts-config.xml
<plug-in className="net.sf.struts.saif.SAIFPlugin">
<set-property property="interceptor-config" value="/WEB-INF/interceptor-config.xml" />
</plug-in>
拦截-config.xml中
<interceptor-config>
<interceptor name="componentInterceptor" type="net.sf.struts.saif.ComponentInterceptor"/>
<interceptor name="testInterceptor" type="net.sf.struts.saif.TestInterceptor"/>
<default-interceptors>
<interceptor name="componentInterceptor"/>
</default-interceptors>
<action type="org.apache.struts.webapp.example.EditRegistrationAction">
<interceptor name="testInterceptor"/>
</action>
</interceptor-config>
我得到这样的错误:
javax.servlet.UnavailableException: Specified RequestProcessor not compatible with saif.
at org.apache.struts.action.ActionServlet.init(ActionServlet.java:402)
at javax.servlet.GenericServlet.init(GenericServlet.java:212)
at org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:1139)
at org.apache.catalina.core.StandardWrapper.load(StandardWrapper.java:966)
at org.apache.catalina.core.StandardContext.loadOnStartup(StandardContext.java:3996)
at org.apache.catalina.core.StandardContext.start(StandardContext.java:4266)
at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1014)
at org.apache.catalina.core.StandardHost.start(StandardHost.java:736)
at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1014)
at org.apache.catalina.core.StandardEngine.start(StandardEngine.java:443)
at org.apache.catalina.core.StandardService.start(StandardService.java:448)
at org.apache.catalina.core.StandardServer.start(StandardServer.java:700)
at org.apache.catalina.startup.Catalina.start(Catalina.java:552)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:295)
at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:433)
你可以帮我解决这个问题吗?
答案 0 :(得分:1)
之前我没有使用过Struts Action Invocation Framework,但我从Tiles那里熟悉了异常消息。 Tiles会抛出这样的消息:Specified RequestProcessor not compatible with TilesRequestProcessor
所以我认为除了消息的熟悉程度(在你的情况下Specified RequestProcessor not compatible with saif
)之外,原因也可能是相同的。
这是一个article,它修复了Tiles插件。可以帮到你。
当Struts Servlet初始化时,它会执行所有插件的初始化。该消息应该来自您的插件的init方法,如果它与Tiles相同,那么应该使用Class.isAssignableFrom进行测试。
编辑:查看SAIF插件的源代码并在其中找到:
protected void initRequestProcessorClass(ActionServlet servlet, ModuleConfig config) throws ServletException {
.........
.........
ControllerConfig ctrlConfig = config.getControllerConfig();
String configProcessorClassname = ctrlConfig.getProcessorClass();
.........
.........
// Check if specified request processor is compatible with saif.
try {
Class saifProcessorClass = SAIFRequestProcessor.class;
Class saifTilesProcessorClass = SAIFTilesRequestProcessor.class;
Class configProcessorClass = Class.forName(configProcessorClassname);
if (!saifProcessorClass.isAssignableFrom(configProcessorClass)
&& !saifTilesProcessorClass.isAssignableFrom(configProcessorClass)) {
String msg = "Specified RequestProcessor not compatible with saif.";
throw new ServletException(msg);
}
} catch (Exception ex) {
throw new ServletException(ex);
}
.........
.........
}
它似乎与Tiles插件相同,所以我指出的文章包含答案。
答案 1 :(得分:1)
从struts用户邮件列表中引用this message:
SAIF不太可能起作用 使用默认的S1.3配置 请求处理器是不同的 - 你 可以尝试使用旧请求 如果您的应用程序没有处理器 依靠它。
AFAICT SAIF无法使用 标准以外的任何东西(旧) 请求处理器,但它可能是 可能会破解它,所以它会。