2011-08-04 136 views
0

我遇到了使用Spring攔截器的問題。我有一個CXF服務端點方法,我正在嘗試使用攔截器來進行一些初始化。出於某種原因,攔截器沒有被調用。這裏是我的春天項:彈簧方法攔截器問題

<jaxrs:server id="acadConnectServer" address="/rest/acadconnect3"> 
    <jaxrs:serviceBeans> 
     <ref bean="acadConnectResource" /> 
    </jaxrs:serviceBeans> 
</jaxrs:server> 
<bean id="acadConnectResource" 
    class="com.test.connectchannel.service.AcadConnectChannelResource" /> 
<bean id="connectResource" class="org.springframework.aop.framework.ProxyFactoryBean"> 
    <property name="target" ref="acadConnectResource" /> 
    <property name="interceptorNames"> 
     <list> 
      <value>methodPointCut</value> 
     </list> 
    </property> 
</bean> 
<bean id="methodPointCut" 
    class="org.springframework.aop.support.NameMatchMethodPointcutAdvisor"> 
    <property name="advice"> 
     <ref local="methodInterceptor" /> 
    </property> 
    <property name="mappedNames"> 
     <list> 
      <value>search</value> 
      <value>searchJSONP</value> 
     </list> 
    </property> 
</bean> 
<bean id="methodInterceptor" 
    class="com.test.connectchannel.util.ConnectChannelInterceptor"> 
</bean> 

正如你所看到的,我有一個CXF端點類AcadConnectChannelResource其中有幾個方法搜索和searchJSONp。我創建了Named Method Cut攔截器來攔截這兩個方法調用,因此使用自定義攔截器類進行一些初始化。但是,每次調用方法時,都不會調用攔截器。

不知道我在這裏失蹤,任何指針將不勝感激。

-Thanks

+0

嗯......一切都很好看。您是否嘗試將*放在mappedNames元素的值中。如果*不適用於此impl ...也許嘗試RegexpMethodPointcutAdvisor。這一個需要*肯定,因爲我所有的Spring切入點都使用這個...讓我知道。如果尚未完成,請在攔截器中添加一些跟蹤信息,以查看它是否在*的某處。 – Cygnusx1

+0

@ Cygnusx1使用*無效 – Shamik

回答

0

我可能是完全錯誤的,但你不想

<ref bean="connectResource" /> 

代替

<ref bean="acadConnectResource" /> 

<jaxrs:server>?您正在代理資源,但使用原始資源而不是代理。

+0

我也試過,但得到了由javax.ws.rs.WebApplicationException引起的org.apache.cxf.service.factory.ServiceConstructionException。 – Shamik

+0

這並不意味着它是錯的。這可能意味着你在別處有其他問題。我不知道CXF,但是如果你發佈堆棧跟蹤,有人可能會指出什麼是錯誤的或者將你引向正確的方向。 –