重要一点就是:jar包导入全;services.xml需要在web-info下classes的meta-info下的xfire文件里.参考代码
备注:
@4.在启动项目是,会出现
@5.web.xml配置:
<-- 用来配置xFire -->
<servlet>
<servlet-name>XFireServlet</servlet-name>
<servlet-class>
org.codehaus.xfire.transport.http.XFireConfigurableServlet
</servlet-class>
<load-on-startup>0</load-on-startup>
</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>
@6.进行wsdl测试 package com.capinfo.service;
public interface SelectInterface {
public String selectList();
}
//接口实现类
package com.capinfo.service;
import java.util.ArrayList;
import java.util.List;
import com.capinfo.system.manage.business.BuildBusiness;
public class InterfaceImpl implements SelectInterface{
private BuildBusiness buildBusiness ;
public String selectList() {
List list = new ArrayList();
list = buildBusiness.selectAllState();
System.out.println("list---"+list.size());
return "222";
}
//get and set
public BuildBusiness getBuildBusiness() {
return buildBusiness;
}
public void setBuildBusiness(BuildBusiness buildBusiness) {
this.buildBusiness = buildBusiness;
}
}
同时,我们在applicationContext.xml文件中进行实现类的Spring管理: <!-- 把service中的实现类交给spring管理 -->
<bean id="HelloWorldBean" class="com.capinfo.service.InterfaceImpl" scope="prototype">
<property name="buildBusiness" ref="buildBusiness"></property>
</bean>
此时,理论上,我们会认为类似于没有整合spring时,我们可以发布成功。可是,我们失败了。。。,我们得到null point exception(buildBusiness) <servlet>
<servlet-name>xfire</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>xfire</servlet-name>
<url-pattern>*.ws</url-pattern>
</servlet-mapping>
@2.命名空间限定+特定的服务名 <servlet>
<!-- 配合Spring容器中XFire一起工作的Servlet-->
<servlet-name>xfireServlet</servlet-name>
<servlet-class>org.codehaus.xfire.spring.XFireSpringServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>xfireServlet</servlet-name>
<!-- 在这个URI下开放Web Service服务 -->
<url-pattern>/service/*</url-pattern>
</servlet-mapping>
2.在用户请求了特定的服务名是,我们要让Spring明白,转发到哪个xfire服务类上,此时需要配置xfire bean --xfire-servlet.xml <?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">
<beans>
<!-- 引入XFire预配置信息 -->
<import resource="classpath:org/codehaus/xfire/spring/xfire.xml" />
<!-- 定义访问的url -->
<bean class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
<property name="urlMap">
<map>
<entry key="/HelloService.ws">
<ref bean="HelloService"/>
</entry>
</map>
</property>
</bean>
<!-- 使用XFire导出器 -->
<bean id="baseWebService" class="org.codehaus.xfire.spring.remoting.XFireExporter" lazy-init="false" abstract="true">
<!-- 引用xfire.xml中定义的工厂 -->
<property name="serviceFactory" ref="xfire.serviceFactory" />
<!-- 引用xfire.xml中的xfire实例 -->
<property name="xfire" ref="xfire" />
</bean>
<bean id="HelloService" parent="baseWebService">
<!-- 业务服务bean -->
<property name="serviceBean" ref="HelloWorldBean" />
<!-- 业务服务bean的窄接口类 -->
<property name="serviceClass" value="com.capinfo.service.SelectInterface" />
</bean>
</beans>
3.还需要在web.xml中指定xfire-servlet.xml位置 <!-- 用来定位Spring XML文件的上下文配置 -->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>
classpath:/WEB-INF/applicationContext.xml,/WEB-INF/xfire-servlet.xml
</param-value>
</context-param>
4.针对不同的Web.xml的配置方式,请求的路径会产生不同;常常使用第一个配置方式即可。到此配置完毕,切记不可缺少jar。