天天看點

在已有的ssm項目中添加xfire

會出現xfire請求的url被struts2過濾掉的情況

此時在web.xml中應把原有設定

<filter>
  <filter-name>struts2</filter-name>
  <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
 </filter>
 <filter-mapping>
  <filter-name>struts2</filter-name>
  <url-pattern>/*</url-pattern>
 </filter-mapping>
           

更改為

<filter>
  <filter-name>struts2</filter-name>
  <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
 </filter>
 <filter-mapping>
  <filter-name>struts2</filter-name>
  <url-pattern>*.jsp</url-pattern>
 </filter-mapping>
 <filter-mapping>
  <filter-name>struts2</filter-name>
  <url-pattern>*.action</url-pattern>
 </filter-mapping>
           

最近做項目時發現用xfire調用的類需要進行spring注入時會報空指針錯誤,解決方法如下:

原有web.xml關于xfire的配置:

<servlet>
    <servlet-name>XFireServlet</servlet-name>
    <servlet-class>
        org.codehaus.xfire.transport.http.XFireConfigurableServlet
    </servlet-class>
 </servlet>

 <servlet-mapping>
	<servlet-name>XFireServlet</servlet-name>
	<url-pattern>/servlet/XFireServlet/*</url-pattern>
</servlet-mapping>

<servlet-mapping>
	<servlet-name>XFireServlet</servlet-name>
	<url-pattern>/services/*</url-pattern>
</servlet-mapping>
           

改為

<servlet>
    <servlet-name>XFireServlet</servlet-name>
    <servlet-class>
        org.codehaus.xfire.spring.XFireSpringServlet<!-- 注意此處變化 -->
    </servlet-class>
 </servlet>

 <servlet-mapping>
	<servlet-name>XFireServlet</servlet-name>
	<url-pattern>/servlet/XFireServlet/*</url-pattern>
</servlet-mapping>

<servlet-mapping>
	<servlet-name>XFireServlet</servlet-name>
	<url-pattern>/services/*</url-pattern>
</servlet-mapping>
           

還要在spring配置檔案(一般名為applicationContext.xml)中加入如下代碼:

<bean id="controllerHandlerAdapter" class="org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter"/>
    <import resource="classpath:org/codehaus/xfire/spring/xfire.xml"/>

    <bean id="baseWebService"
        class="org.codehaus.xfire.spring.remoting.XFireExporter" abstract="true">
        <property name="serviceFactory" ref="xfire.serviceFactory" />
        <property name="xfire" ref="xfire" />
    </bean>

    <bean id="changePointByLis.xfire" parent="baseWebService">
        <property name="serviceBean" ref="changePointByLis" />
        <property name="serviceClass" value="com.sinosoft.webservice.ChangePointsByLis" /><!-- 此處為xfire服務端的入口接口 -->
        <property name="namespace" value="http://127.0.0.1:8088/emergent" />
    </bean>