XFire从管道中接收一个SOAP请求到返回一个SOAP响应,会经历一系列的阶段。在管道调用的任何一个阶段,XFire都可以添加一些额外的Handler,在对消息进行加工处理后再传入到下一个阶段中。在SOAP请求消息对Web Service发起真正调用之前,分别会经过传输、预转发、转发、策略实施、用户信息处理、预调用、服务调用等阶段。
服务器端开发:
配置web.xml文件:
XFireService
contextConfigLocation
/WEB-INF/xfire-servlet.xml
org.springframework.web.context.ContextLoaderListener
org.springframework.web.util.IntrospectorCleanupListener
xfire
org.springframework.web.servlet.DispatcherServlet
xfire
*.ws
xfireServlet
org.codehaus.xfire.spring.XFireSpringServlet
xfireServlet
/service/*
index.jsp
xfire-servlet.xml文件:
XFire为Spring提供了方便易用的导出器XFireExporter,借助该导出器的支持,我们可以在Spring容器中将一个POJO导出为Web Service。IWeixin01.java是业务服务类,在此拥有一个getUserInfo的方法,我们希望将此方法开放为Web Service。在实际应用中,如果某个类具有众多的方法,而其中的某些方法不需要开放为Web Service的情况下,我们可以定义一个窄接口,该接口中只需定义那些开放为Web Service的业务方法。
将一个业务类所有需要开放为Web Service的方法通过一个窄接口来描述是值得推荐的作法,这让Web Service的接口显得很“干净”。其次,XFire的导出器也需要服务接口的支持,因为它采用基于接口的动态代理技术。
窄接口中的方法在真实的系统中可能需要引用其它的业务类或DAO获取数据库中的真实数据,为了简化实例,我们在此简化了实例。在该配置文件中引入了xfire.xml这个Spring配置文件。它是在XFire核心JAR包中拥有一个预定义的Spring配置文件,它定义了XFire在Spring中必须用到的一些Bean和资源,需要引入这个预定义的配置文件。从该配置文件中可以看出,我们通过XFireExporter将业务类导出为Web Service,对于任何导出器,我们都需要引入XFire环境,即serviceFactory和xfire,这是标准的配置。ServiceFactory是XFire的核心类,它可以将一个POJO生成为一个Web Service。
接口:
package test;
public interface IWeixin01 {
public String getUserInfo(String accessToken,String opendId);
}
实现类:
package test;
public class Weixin01Impl implements IWeixin01{
public String getUserInfo(String accessToken,String opendId){
StringBuilder sb =new StringBuilder();
sb.append("{");
sb.append("'subscribe': 1,");
sb.append("'openid': 'o7Lp5t6n59DeX3U0C7Kric9qEx-Q',");
sb.append("'nickname': '方�?',");
sb.append("'sex': 1,");
sb.append("'language': 'zh_CN',");
sb.append("'city': '深圳',");
sb.append(" 'province': '广东',");
sb.append(" 'country': '中国',");
sb.append(" 'subscribe_time': 1389684286");
sb.append("}");
return sb.toString();
}
}
访问:http://localhost:8888/ECPIC/service/YangService01.ws?wsdl
可以看到wsdl内容