首先当然是下载cxf框架的jar包 我下的是3.0.3版本,将jar包拷贝到自己项目中的Lib
第一步:将cxf集成到我们的项目中去,配置web.xml,在xml文件中加入以下代码
<servlet>
<servlet-name>cxf</servlet-name>
<servlet-class>
org.apache.cxf.transport.servlet.CXFServlet
</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>cxf</servlet-name>
<url-pattern>/services/*</url-pattern>
</servlet-mapping>
第二步:编写webservice接口
注意在interface 和实现类中都要加@WebService 注解否则会出现代码不全调用不到的问题
第三步:接口书写完成就要配置发布配置文件了,将接口映射到url给第三方调用。在web-inf下面创建cxf-servlet.xml文件,例如下面的代码
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:jaxws="http://cxf.apache.org/jaxws"
xmlns:soap="http://cxf.apache.org/bindings/soap"
xsi:schemaLocation="
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://cxf.apache.org/bindings/soap http://cxf.apache.org/schemas/configuration/soap.xsd
http://cxf.apache.org/jaxws
http://cxf.apache.org/schemas/jaxws.xsd">
<jaxws:server id="getZdxmlistService" //id随意起只要不跟其他的server重复就行
serviceClass="com.tko.service.ZdService" //serviceClass表示接口类
address="/getZdxmlist"> //address表示第三方访问的地址
<jaxws:serviceBean>
<bean class="com.tko.service.ZdServiceImpl" /> // 表示接口的实现类
</jaxws:serviceBean>
</jaxws:server>
</beans>
//如果要配置多个接口 可以继续添加jaxws:server
一切准备就绪,然后将项目部署到tomcat中去,访问http://localhost:8080/project/services/xxx?wsdl,出现xml页面
说明发布成功,在客户端就可以利用 cxf 工具 wsdl2java http://localhost:8080/project/services/xxx?wsdl 生成客户端代码进行调用。
cxf我感觉比axis2好用,axis2还要单独部署一个axis2.war包到tomcat中去才能使用,还有axis2不能传递自定义的复杂对象和list等,貌似只能传一维数组,如果要传
复杂对象还要进行一系列的复杂转换挺麻烦的,cxf可以传自定义对象,list,数组 貌似不能传map要进行相应的转换(新手勿喷,可能大神有更简便的方法)
PS: 假如需要调用接口的某个方法 需要返回两个数据类型,可以用json 或者map 搞定
JSONObject jo = new JSONObject();
jo.put("student",new Student());
jo.put("teacher", new Teacher());
return jo.toString(); 然后客户端再去解析json,通过get(key)把需要的对象拿出来使用