2010-10-24 59 views
0

我正在嘗試集成SAIF插件來攔截我的struts動作。我從 http://struts.sourceforge.net/saif/index.htmlStruts Action Strokes 1.3的動作調用框架

學習我已經寫的配置是這樣的: 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

報價從支柱的用戶this message郵件列表:

這是不可能的,SAIF將工作 使用默認配置S1.3自 請求處理器是不同的 - 你 可以嘗試使用舊的請求 處理器如果您的應用程序不依賴 它。

AFAICT軟銀賽富不會比標準(舊)其他 任何 請求處理工作,但它可能是 可能破解它,所以它會。

0

我之前沒有使用Struts動作調用框架,但我從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); 
    } 
    ......... 
    ......... 
} 

這似乎是相同的,與瓷磚的插件,讓我指出的文章包含了答案。

+0

你的意思是創建新的SAIF插件擴展並刪除拋出新的ServletException(味精); ? 我已經嘗試這種方式,但該方法不攔截 – 2010-10-24 23:09:13

+0

SAIF插件拋出異常,因爲它希望你的應用程序的請求處理器是類型SAIFRequestProcessor的,SAIFTilesRequestProcessor或它們(之一的孩子是什麼上面的測試做)。你的請求處理器不是這種類型的(也許你有一個自定義的; struts-config.xml中的任何標記?)。你不會擴展SAIFPlugin類並刪除「throw new ServletException(msg)」;那有一個目的。如果你刪除它,你只會沉默異常,這並不意味着該插件將在事後。 – 2010-10-25 19:51:00