cxf3.0.x与spring3.2整合

 <div class="iteye-blog-content-contain" style="font-size: 14px">
  进来接到webservice相关项目,本人一直从事后台底层开发,初接项目一头雾水,网上搜索之后发现大部分cxf与spring整合都是2.X的老版 本,与我本人需求出入不小,后经我与同事共同研究并获得专业指导后终于搞定,现将流程整理如下,希望能给大家带来方便。


服务端


1.首先是在项目中导入jar包:
   spring包很常用在这里不多说,cxf用到的的jar包有:
    cxf-core-3.0.3.jar
    neethi-3.0.3.jar
    woodstox-core-asl-4.4.1.jar
    wsdl4j-1.6.3.jar
    xmlschema-core-2.1.0.jar
    asm-3.3.1.jar
    cxf-rt-bindings-soap-3.0.3.jar
    cxf-rt-databinding-jaxb-3.0.3.jar
    cxf-rt-frontend-jaxws-3.0.3.jar
    cxf-rt-frontend-simple-3.0.3.jar
    cxf-rt-transports-http-3.0.3.jar
    cxf-rt-wsdl-3.0.3.jar
    stax2-api-3.1.4.jar
(这些jar包都是我个人总结的,如有多余还请大家指出)
2.在web.xml文件中配置CXFServlet

 <servlet>
      <servlet-name>CXFService</servlet-name>
       <servlet-class>org.apache.cxf.transport.servlet.CXFServlet</servlet-class>
 </servlet>
 
  <servlet-mapping>
        <servlet-name>CXFService</servlet-name>
        <url-pattern>/webservice/*</url-pattern>
  </servlet-mapping>

 3.在spring的配置文件中增加关于cxf的命名空间

xmlns:jaxws="http://cxf.apache.org/jaxws"
xsi:schemaLocation=“http://cxf.apache.org/jaxws http://cxf.apache.org/schemas/jaxws.xsd”

    同时引入cxf的xml文件

<import resource="classpath:META-INF/cxf/cxf.xml" />

    注意:cxf.xml文件在cxf-core的jar包中已存在,可以直接引入

4.开发好自己需要暴露出来的接口和类,并在类上加入注解@WebService

    这是我开发的服务端接口

import javax.jws.WebService;

import com.yao.entity.User;
@WebService
public interface WebserviceI {
	User insertUser(String name, int age, String sex);
}

   实现类

import javax.jws.WebService;

import com.yao.entity.User;
import com.yao.webservice.WebserviceI;
@WebService
public class WebserviceImpl implements WebserviceI  {

	@Override
	public User insertUser(String name, int age, String sex) {
		User user = new User();
			user.setId(1);
			user.setName(name);
			user.setAge(age);
			user.setSex(sex);
		System.out.println("插入用户成功");
		return user;
	}

     其中User类是自己开发的一个普通封装类

5.在spring中配置发布服务

<jaxws:endpoint id="WebserviceImpl"  
		implementor="com.yao.webservice.impl.WebserviceImpl"      
		address="webyao">
</jaxws:endpoint>

    其中id为写好的实现类,implementor为实现类的全限定名,address为访问路径

这样服务端的整合就全部搞定了,访问时别忘记在你的项目路径后面加入cxfServlet中配置的/webservice和发布路径/webyao以及"?wsdl"

客户端

客户端电脑首先要配置cxf的环境变量CXF_HOME,路径为cxf位置,例如:D:\apache-cxf-3.0.3,然后在path中加入%CXF_HOME%\bin

配置完成后打开命令行输入wsdl2java命令测试,测试成功的话我们就可以通过cxf来生成客户端文件了

输入命令
wsdl2java -p com.yaokr.webservice.user -d d:\src -client  http://www.webxml.com.cn/WebServices/WeatherWS.asmx?wsdl

-p后面是你要生成的包结构,-d后面是你生成文件的保存路劲,-client后面是你要使用的服务端访问地址.

生成代码之后将代码拷贝到你的项目中,也可以打成jar包后导入

接下来只需要几行简单的代码就可以搞定了

import com.ssm.service.YubaoService;
import com.ssm.service.YubaoServiceService;
import com.ssm.service.YubaoService_YubaoServicePort_Client;

public class Client {
	public static void main(String[] args) {
		YubaoServiceService yb = new YubaoServiceService();//new一个服务端实现类对象,如上文中服务端的WebserviceImpl
		YubaoService ybPort = yb.getYubaoServicePort();//用new出来的实例对象获得服务端口
		String query = ybPort.query("北京");//端口调用服务中的方法
		System.out.println(query);
	}
}

本段代码是我的客户端测试代码,与上文中的服务端代码不能对接。

至此,整个整合的过程就全部搞定了,希望能够帮助到大家,也希望大神指正代码中的毛病和问题

</div>

猜你喜欢

转载自yaokr.iteye.com/blog/2264195