一.开发工具:MyEclipse10+CXF3.1.14+JDK1.7+Spring4.1.7
二.使用的jar包:
三.项目结构:
四.服务器端搭建:
1.web.xml配置:
<!-- 加载Spring容器配置 -->
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<!-- 设置Spring容器加载配置文件路径 -->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:applicationContext.xml</param-value>
</context-param>
<!-- 设置cxf启动 -->
<servlet>
<servlet-name>CXFServlet</servlet-name>
<servlet-class>org.apache.cxf.transport.servlet.CXFServlet</servlet-class>
<load-on-startup>2</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>CXFServlet</servlet-name>
<url-pattern>/cxf/*</url-pattern>
</servlet-mapping>
注:其中<url-pattern>/cxf/*</url-pattern>中配置的路径,就是将来在浏览器中访问时的一个根目录,建议单独设置一个目录。
2.applicationContext.xml配置:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:jaxws="http://cxf.apache.org/jaxws"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop.xsd
http://cxf.apache.org/jaxws
http://cxf.apache.org/schemas/jaxws.xsd"
default-autowire="byName">
<!-- 启动包扫描功能-->
<context:component-scan base-package="com.cxf.*" />
<!-- webservice服务-->
<jaxws:endpoint id="UserPojo" implementor="com.cxf.service.impl.UserPojoImpl" address="/UserPojo" />
</beans>
3.服务器端接口
package com.cxf.service;
import java.util.List;
import javax.jws.WebService;
import com.cxf.domain.User;
@WebService
public interface UserPojo {
public List<User> getUser(String sex);
}
注:可以设置命名空间,但这个命名空间,要与接口的实现类一致,建议提供多种服务的设置。@WebService(targetNamespace="http://service.cxf.com/")
4.服务器端接口实现类
package com.cxf.service.impl;
import java.util.ArrayList;
import java.util.List;
import javax.jws.WebService;
import com.cxf.domain.User;
import com.cxf.service.UserPojo;
@WebService(endpointInterface="com.cxf.service.UserPojo",serviceName="UserPojo")
public class UserPojoImpl implements UserPojo{
public List<User> getUser(String sex) {
List<User> list = new ArrayList<User>();
User u1 = new User();
u1.setName("小强");
u1.setAge(20);
User u2 = new User();
u2.setName("小李");
u2.setAge(26);
User u3 = new User();
u3.setName("小丽");
u3.setAge(20);
list.add(u1);
list.add(u2);
list.add(u3);
return list;
}
}
注:@WebService(endpointInterface="com.cxf.service.UserPojo"
这里为接口的类路径,serviceName="UserPojo")
在这里,我为UserPojo服务提供了一个getUser方法,返回一个User对象集合,其中,手动创建了三个User对象,这里,可以换成从数据库中查寻数据。
5.设置好这些,就可以启动服务了:
注:出现这个画面之后,还需要点击WSDL的链接,如果显示出下,说明配置正确。
五.客户端配置:
import java.util.List;
import org.apache.cxf.endpoint.Client;
import org.apache.cxf.jaxws.JaxWsProxyFactoryBean;
import org.apache.cxf.jaxws.endpoint.dynamic.JaxWsDynamicClientFactory;
import com.cxf.domain.User;
import com.cxf.service.UserPojo;
public class Test {
public static void main(String[] args) throws Exception {
JaxWsProxyFactoryBean bean = new JaxWsProxyFactoryBean();
bean.setServiceClass(UserPojo.class);
bean.setAddress("http://localhost:8080/socketWeb/cxf/UserPojo");
UserPojo userPojo = (UserPojo) bean.create();
List<User> users = userPojo.getUser("5555");
for (User u : users) {
System.out.println(u.getName());
System.out.println(u.getAge());
}
}
}
执行客户端程序,显示如下信息:
至此,客户端获取服务器端数据的操作已经全部完成。