spring4.x + cxf3.x整合实例

1、开发工具:Eclipse4.5   + tomcat7  + jdk8  + cxf3.1.7  + spring4.1.9

2、首先Eclipse新建两个web工程:一个模拟server端发布webservice,,一个模拟client端,调用webservice,

如下图,我建的两个工程:分别为cxfSpringTestService和cxfSpringTestClient






3、为项目加入jar包:

将下载的apache-cxf-3.1.7解压后,在lib目录下的所有jar文件(其实不需要所有,这里自己懒得选了,就选所有了),复制到cxfSpringTestService工程的lib目录 下,这个目录下已经有了spring的jar,所以,无需再去spring包下找jar了


4、建测试代码:

<pre code_snippet_id="1869171" snippet_file_name="blog_20160906_1_5675032" name="code" class="java"><strong>4.1、接口:</strong>

 
<span style="font-family: Arial, Helvetica, sans-serif;">package com.wbliu.webservice.service;</span>

import java.util.List;

import javax.jws.WebService;

import com.wbliu.webservice.javabean.User;

@WebService
public interface IUserService {
	public User getUserById(long id);
	public List<User> getAllUsers();
}


4.2、接口实现类:

package com.wbliu.webservice.service.impl;

import java.util.ArrayList;
import java.util.List;

import javax.jws.WebService;

import com.wbliu.webservice.javabean.User;
import com.wbliu.webservice.service.IUserService;
@WebService
public class UserServiceImpl implements IUserService {
	@Override
	public User getUserById(long id) {
	User user = new User(100000, "testhao", 29);
	System.out.println(user.toString());
	return user;
	}


	@Override
	public List<User> getAllUsers() {
	List<User> list = new ArrayList<>();
	User user = new User(100000, "test", 29);
	User user1 = new User(100001, "test1", 19);
	User user2 = new User(100002, "test2", 39);
	list.add(user);
	list.add(user1);
	list.add(user2);
	System.out.println(list.toString());
	return list;
	}

}<strong>
</strong>


4.3、javabean:



package com.wbliu.webservice.javabean;
public class User {
	private long  id;
	private String name;
	private int  age;

	/**
	* @param id
	* @param name
	* @param age
	*/
	public User(long id, String name, int age) {
	super();
	this.id = id;
	this.name = name;
	this.age = age;
	}


	public long getId() {
	return id;
	}


	public void setId(long id) {
	this.id = id;
	}


	public String getName() {
	return name;
	}


	public void setName(String name) {
	this.name = name;
	}


	public int getAge() {
	return age;
	}


	public void setAge(int age) {
	this.age = age;
	}


	@Override
	public String toString() {
	return "User [id=" + id + ", name=" + name + ", age=" + age + "]";
	}
}


5、配置web.xml整合spring配置如下:

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" id="WebApp_ID" version="3.1">
  <display-name>springcxfserver02</display-name>
  <welcome-file-list>
    <welcome-file>index.html</welcome-file>
    <welcome-file>index.htm</welcome-file>
    <welcome-file>index.jsp</welcome-file>
    <welcome-file>default.html</welcome-file>
    <welcome-file>default.htm</welcome-file>
    <welcome-file>default.jsp</welcome-file>
  </welcome-file-list>
  <!-- 设置Spring容器加载配置文件路径 -->
    <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>classpath*:applicationContext-server.xml</param-value>
    </context-param>
    <!-- 加载Spring容器配置 -->
    <listener>
        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    </listener>

    <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>
</web-app>

6、在src目录下,新建一个spring配置文件applicationContext-server.xml,配置如下:


<?xml version="1.0" encoding="UTF-8"?>

<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:context="http://www.springframework.org/schema/context"
	xmlns:jaxws="http://cxf.apache.org/jaxws" 
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd http://cxf.apache.org/jaxws http://cxf.apache.org/schemas/jaxws.xsd">

	<!-- cxf3以后,只需要引入这个配置文件即可,其他两个废弃掉了 -->
	<import resource="classpath:META-INF/cxf/cxf.xml" />
	<jaxws:endpoint 
	    id="userService"
		implementor="com.wbliu.webservice.service.impl.UserServiceImpl"
		address="/userWS">
	</jaxws:endpoint>
</beans>  

备注:cxf3以后,只需要引入这个配置文件即可,其他两个废弃掉了

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

可以cxf核心包下,看一下,也只有cxf.xml这一个配置文件了,如里配置原来的3个,启服务时,会报错


最后的服务端的工程结构如下图:







7、将web工程部署到tomcat中:

 然后 ,启动tomcat,,,在浏览器中输入发布后的,wsdl地址:

http://localhost:8080/cxfSpringTestService/webservice/userWS?wsdl

这个地址,其实是在applicationContext-server.xml配置文件中的配置,发布地址为/userWS,代码片断如下:

<jaxws:endpoint 
	    id="userService"
		implementor="com.wbliu.webservice.service.impl.UserServiceImpl"
		address="/userWS">
	</jaxws:endpoint>

如见到下图,则说明,服务端已发布成功!:







8、服务端写好后,接下来,编写,客户端调用程序:


 同样的,将cxf包下lib目录下的所有jar,复制到cxfSpringTestClient工程下,然后在src下新建一个spring配置文件,名称为client-bean.xml,,,配置如下

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:context="http://www.springframework.org/schema/context"
	xmlns:jaxws="http://cxf.apache.org/jaxws" 
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd http://cxf.apache.org/jaxws http://cxf.apache.org/schemas/jaxws.xsd">


	<jaxws:client 
	    id="userClient"
		serviceClass="com.wbliu.webservice.service.impl.IUserService"
		address="http://localhost:8080/cxfSpringTestService/webservice/userWS">
	</jaxws:client>
</beans>
<span style="font-family: Arial; background-color: rgb(255, 255, 255);">
</span>
<span style="font-family: Arial; background-color: rgb(255, 255, 255);"><strong>9、根据wsdl文件,生成客户端代码:</strong></span>
<span style="font-family: Arial; background-color: rgb(255, 255, 255);">如下图,用jdk的【wsimport</span><span style="font-family: Arial; background-color: rgb(255, 255, 255);">】</span><span style="font-family: Arial; background-color: rgb(255, 255, 255);">在cmd命令行下,将目录指定到当前src目录 下,</span>

执行命令:

wsimport -keep http://localhost:8080/cxfSpringTestService/webservice/userWS?wsdl

然后刷新工程,查看生成的代码如下:







10、最后在客户端新建一个类,测试调用服务端的webservice程序:如下:


package com.wbliu.webservice.client;

import java.util.List;

import org.springframework.context.support.ClassPathXmlApplicationContext;

import com.wbliu.webservice.service.User;
import com.wbliu.webservice.service.impl.IUserService;

public class UserWSClientTest {
	public static void main(String[] args) {
		ClassPathXmlApplicationContext classPathXmlApplicationContext = new ClassPathXmlApplicationContext(
				new String[] {"client-bean.xml"});
		
		IUserService userService = (IUserService) classPathXmlApplicationContext.getBean("userClient");
		
		User user = userService.getUserById(1000);
		System.out.println(user.getId());
		System.out.println(user.getName());
		System.out.println(user.getAge());
		System.out.println("-------------------");
		
		List<User> allUsers = userService.getAllUsers();
		for (User u : allUsers) {
			System.out.println(u.getId());
			System.out.println(u.getName());
			System.out.println(u.getAge());
			System.out.println("-------------------");
		}

		
	}

}

最后测试成功,大功告成!!!

成功截图:

客户端:



服务器端:





  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是Spring 3.x整合CXF 2.7.12的Maven依赖配置: ```xml <dependencies> <!-- Spring --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-core</artifactId> <version>3.2.18.RELEASE</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>3.2.18.RELEASE</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-web</artifactId> <version>3.2.18.RELEASE</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-webmvc</artifactId> <version>3.2.18.RELEASE</version> </dependency> <!-- CXF --> <dependency> <groupId>org.apache.cxf</groupId> <artifactId>cxf-rt-frontend-jaxws</artifactId> <version>2.7.12</version> </dependency> <dependency> <groupId>org.apache.cxf</groupId> <artifactId>cxf-rt-transports-http</artifactId> <version>2.7.12</version> </dependency> <!-- Logging --> <dependency> <groupId>org.slf4j</groupId> <artifactId>jcl-over-slf4j</artifactId> <version>1.7.25</version> </dependency> </dependencies> ``` 这些jar包的作用如下: - `spring-core`、`spring-context`、`spring-web`、`spring-webmvc`:Spring框架的核心依赖,用于实现IoC和AOP等功能。 - `cxf-rt-frontend-jaxws`:Apache CXF框架的核心依赖,用于实现JAX-WS Web服务的开发和调用。 - `cxf-rt-transports-http`:Apache CXF框架的HTTP传输模块,用于支持HTTP协议的Web服务。 - `jcl-over-slf4j`:SLF4J的JCL适配器,用于将JCL日志转发到SLF4J中。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值