一、 各大WebService框架区别
1.xFire
(1)、支持将Web服务绑定到POJO、xmlbeans、JAXB1.1、JAXB2.0和Castor
(2)、支持基于HTTP、JMS、XMPP等多种协议访问Web服务;
(3)、容易上手,可以方便快速地从pojo发布服务;
(4)、对Spring、Pico、Plexus等项目的支持;
(5)、服务器响应时间快,是Axis的2-6倍;
(6)、依赖jar包较少(实现基本功能所需jar包:6个)
(7)、配置简单,便于开发
2.CXF
(1)、CXF相对于xFire支持ESB(企业服务总线),该项目中不会使用
(2)、CXF=xFire+Celtix,Celtix及ESB的框架,所以CXF包含xFire中的大部分功能及优点;
(3)、CXF配置采用Annotation注解方式配置服务器端,开发时可减少繁琐过程;
(4)、CXF是基于Spring的思想开发的,对Spring有较好的支持,整合方便;
(5)、.CXF支持 WS-Addressing,WS-Policy, WS-RM,WS-Security和WS-I BasicProfile;
(6)、依赖jar包相对于xFire较多(实现基本功能所需jar包:11个);
(7)、CXF更注重开发人员的工效和嵌入能力;
3.Axis2
(1)、Axis2是从Axis1.x系列发展而来,从底层全部重新实现,使用了新的扩展性更好模块架构;
(2)、支持HTTP,SMTP,JMS,TCP传输协议;
(3)、 Axis2支持多语言-除了Java,他还支持C/C++版本,对客户端的开发有很好的支持,可以生成Java和其他语言版WebService客户端和服务端代码;
(4)、Axis2是一个重量级WebService的框架依赖jar包非常多(实现总线所需jar包:15个,adb方式调用所需jar包:12个);
二、 使用及配置方式
1、 xFire使用方式及配置(服务端:基本使用)
① 创建web项目,引入实现基本功能所需的6个jar包,包括
② 创建所要暴露的接口和对应的实现类(编写所要提供的服务)
③ 在web.xml添加中配置如下信息
<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>/services/*</url-pattern>
</servlet-mapping>
④ 在src目录下创建“META-INF”文件夹及子文件夹“xfire”,在子文件夹中创建名为“services.xml”的配置文件,其内容如下:
<?xml version="1.0" encoding="utf-8"?>
<beansxmlns="http://xfire.codehaus.org/config/1.0">
<service>
<!-- 服务名称 -->
<name>HelloWorldService</name>
<!-- 实现类的命名空间 -->
<namespace>http://www.server.com/xfire/HelloWorldService</namespace>
<!-- 实现类所指的包和类 -->
<serviceClass>com.server.xfire.HelloWorldService</serviceClass>
<!-- 对应接口的实现 -->
<implementationClass>com.server.xfire.impl.HelloWorldServiceImpl</implementationClass>
</service>
</beans>
⑤ 启动tomcat
⑥ 通过链接访问xml文件
2、 xFire使用方式及配置(客户端)
① 创建普通java项目,引入实现基本功能所需的6个jar包,包括(和服务端的jar包有所不同)
② 创建服务端对应的接口类(仅接口,必须和服务器端一致)
③ 创建main方法进行测试,其内容如下:
package com.test.xfire;
import java.net.MalformedURLException;
import org.codehaus.xfire.client.XFireProxyFactory;
import org.codehaus.xfire.service.Service;
import org.codehaus.xfire.service.binding.ObjectServiceFactory;
import com.client.xfire.HelloWorldService;
public class Client {
public static voidmain(String[] args) {
//根据服务器相同的接口创建ServiceModel
ServiceserviceModel = new ObjectServiceFactory().create(HelloWorldService.class);
//声明接口类型对象
HelloWorldServiceservice = null;
//web服务对应的url地址
String url= "http://localhost:8080/webService_server/services/HelloWorldService";
try {
service= (HelloWorldService)new XFireProxyFactory().create(serviceModel,url);
} catch (MalformedURLExceptione) {
e.printStackTrace();
}
//调用WebService方法
if(service!=null){
Stringmessage = service.sayHello("刘鹏飞");
System.out.println(message);
}
}
}
3、 xFire整合Spring(服务端)
① 创建web项目,引入所依赖的jar包,包括:
② 创建所要暴露的接口和对应的实现类(编写所要提供的服务)
③ 在web.xml添加中配置如下信息
<context-param>
<param-name>contextConfigLocation</param-name>
<!-- 可以再这里加入xfire.xml也可以在applicationContext.xml中引入 -->
<param-value>classpath:beans.xml</param-value>
</context-param>
<!-- Spring framework-->
<listener>
<listener-class>
org.springframework.web.context.ContextLoaderListener
</listener-class>
</listener>
<!-- Xfire Servlet -->
<servlet>
<servlet-name>XFireServlet</servlet-name>
<!-- 不整合时使用org.codehaus.xfire.transport.http.XFireConfigurableServlet-->
<servlet-class>org.codehaus.xfire.spring.XFireSpringServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>XFireServlet</servlet-name>
<url-pattern>/services/*</url-pattern>
</servlet-mapping>
④ 在src目录下创建spring配置文件,内容如下:
<?xml version="1.0" encoding="UTF-8"?>
<beansxmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:jaxws="http://cxf.apache.org/jaxws"
xsi:schemaLocation="
http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans.xsd">
<!-- 引入xfire.xml -->
<importresource="classpath:org/codehaus/xfire/spring/xfire.xml" />
<!--Service实现类 -->
<beanid="hello" class="com.springxfire.impl.HelloWorldImpl"/>
<!-- 这里的name属性并不是调用时的Service名字;调用时要用类名,不知道为什么 -->
<beanname="helloService"class="org.codehaus.xfire.spring.ServiceBean">
<propertyname="serviceBean" ref="hello" /> <!-- Service实现类 -->
<propertyname="serviceClass"value="com.springxfire.inter.HelloWorld" /> <!-- Service接口 -->
<propertyname="inHandlers">
<list>
<refbean="addressingHandler" />
</list>
</property>
</bean>
<beanid="addressingHandler"class="org.codehaus.xfire.addressing.AddressingInHandler" />
</beans>
⑤ 服务器端创建完成,启动tomcat,输入链接测试
4、 CFX整合Spring(服务器端,基本使用)
① 创建web项目,引入CFX依赖11个jar包
② 创建所要暴露的接口和对应的实现类(编写所要提供的服务)
③ 在WEB-INF目录下创建spring配置文件,内容如下:
<?xml version="1.0" encoding="UTF-8"?>
<beansxmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:jaxws="http://cxf.apache.org/jaxws"
xsi:schemaLocation="
http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans.xsd
http://cxf.apache.org/jaxws http://cxf.apache.org/schemas/jaxws.xsd">
<importresource="classpath:META-INF/cxf/cxf.xml" />
<importresource="classpath:META-INF/cxf/cxf-extension-soap.xml" />
<importresource="classpath:META-INF/cxf/cxf-servlet.xml" />
<beanid="service1" class="com.springcxf.impl.HelloWorldImpl"></bean>
<jaxws:endpointid="hello" implementor="#service1" address="/HelloWorldService"/>
</beans>
④ 在web.xml文件中添加如下内容:
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/beans.xml</param-value>
</context-param>
<servlet>
<servlet-name>HelloWorldService</servlet-name>
<servlet-class>org.apache.cxf.transport.servlet.CXFServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>HelloWorldService</servlet-name>
<url-pattern>/services/*</url-pattern>
</servlet-mapping>
⑤ 服务器端创建完成,启动tomcat,输入链接测试
5、 Axis2暂未做研究