Springboot版本对应:
Spring boot 1.4.x ------>cxf-spring-boot-starter-jaxws 3.1.x
Spring boot 1.5.x------->cxf-spring-boot-starter-jaxws 3.2.x
Spring boot 2.x------->cxf-spring-boot-starter-jaxws 3.3.x
服务端
依赖pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.1.5.RELEASE</version>
<relativePath /> <!-- lookup parent from repository -->
</parent>
<groupId>com.plxc.cxf</groupId>
<artifactId>springboot-cxf</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>springboot-cxf</name>
<description>WebService服务-cxf</description>
<properties>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<!--WerbService CXF依赖 -->
<dependency>
<groupId>org.apache.cxf</groupId>
<artifactId>cxf-spring-boot-starter-jaxws</artifactId>
<version>3.3.2</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
</dependency>
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>2.5</version>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
配置源码
实体类
@Data
@NoArgsConstructor
@AllArgsConstructor
public class TUser implements Serializable{
private static final long serialVersionUID = 6258449347837988763L;
private String id;
private String name;
private Integer age;
private String address;
}
服务接口
@WebService(name="UserService",targetNamespace="http://service.cxf.plxc.com")
public interface UserService {
@WebMethod
String getName(@WebParam(name = "id") String id);
@WebMethod
TUser getUser(String id);
@WebMethod
List<TUser> getAllUser();
}
服务实现类
@WebService(serviceName="UserService",targetNamespace = "http://service.cxf.plxc.com", endpointInterface = "com.plxc.cxf.service.UserService")
public class UserServiceImpl implements UserService {
@Override
public String getName(String id) {
System.err.println("getName...");
return id;
}
@Override
public TUser getUser(String id) {
TUser user = new TUser(id, "小明", 28, "上海");
System.err.println("getUser...");
return user;
}
@Override
public List<TUser> getAllUser() {
TUser user1 = new TUser("1", "小明", 28, "上海");
TUser user2 = new TUser("2", "小明", 28, "上海");
List<TUser> result = new ArrayList<TUser>();
result.add(user1);
result.add(user2);
System.err.println("getAllUser...");
return result;
}
}
配置类
@Configuration
public class WebServiceConfig {
@Bean(name = Bus.DEFAULT_BUS_ID)
public SpringBus springBus() {
return new SpringBus();
}
@Bean
public UserService userService() {
return new UserServiceImpl();
}
/**
* 发布服务
*
* @return
*/
@Bean
public Endpoint endpoint() {
EndpointImpl endpoint = new EndpointImpl(springBus(), userService());// 绑定要发布的服务
endpoint.publish("/user"); // 显示要发布的名称
return endpoint;
}
}
客户端
依赖pom.xml
<dependency>
<groupId>org.apache.cxf</groupId>
<artifactId>cxf-rt-frontend-jaxws</artifactId>
<version>3.3.2</version>
</dependency>
<dependency>
<groupId>org.apache.cxf</groupId>
<artifactId>cxf-rt-transports-http</artifactId>
<version>3.3.2</version>
</dependency>
源码
/**
* 方式一:动态调用
* @throws Exception
*/
private static void test1() throws Exception {
JaxWsDynamicClientFactory dcflient = JaxWsDynamicClientFactory.newInstance();
Client client = dcflient.createClient("http://127.0.0.1:8088/services/user?wsdl");
Object[] objects = client.invoke("getName", "111");
System.err.println(objects[0].toString());
Object[] objectall = client.invoke("getAllUser");
System.err.println( objectall[0].toString());
}
/**
* 方式二:通过接口协议获取数据类型
*/
private static void test2() {
try {
// 接口地址
String address = "http://127.0.0.1:8088/services/user?wsdl";
// 代理工厂
JaxWsProxyFactoryBean jaxWsProxyFactoryBean = new JaxWsProxyFactoryBean();
// 设置代理地址
jaxWsProxyFactoryBean.setAddress(address);
// 设置接口类型
jaxWsProxyFactoryBean.setServiceClass(UserService.class);
// 创建一个代理接口实现
UserService userService = (UserService) jaxWsProxyFactoryBean.create();
// 设置链接超时和响应时间
Client proxy = ClientProxy.getClient(userService);
HTTPConduit conduit = (HTTPConduit) proxy.getConduit();
HTTPClientPolicy policy = new HTTPClientPolicy();
policy.setConnectionTimeout(1000);
policy.setReceiveTimeout(1000);
conduit.setClient(policy);
System.err.println(userService.getName("test"));
System.err.println(userService.getAllUser().size());
System.err.println(userService.getUser("test"));
} catch (Exception e) {
e.printStackTrace();
}
}
/**
*
* 方式三:部分依赖生成代码(需要通过wsimport -s . -d . -p com.example.demo.stub http://localhost:8088/services/user?wsdl生成类)
*
* @throws Exception
*/
private static void test3() throws Exception {
// wsdl网络路径
URL url = new URL("http://127.0.0.1:8088/services/user?wsdl");
// 服务描述中服务端点的限定名称 两个参数分别为 命名空间 服务名
QName qName = new QName("http://service.cxf.plxc.com", "UserService");
Service service = Service.create(url, qName);
UserService userService = service.getPort(UserService.class);
System.err.println(userService.getName("test"));
System.err.println(userService.getAllUser().size());
System.err.println(userService.getUser("test"));
}
/**
*
* 方式四:完全依赖生成代码(需要通过wsimport -s . -d . -p com.example.demo.stub http://localhost:8088/services/user?wsdl生成类)
*
*/
private static void test4() {
UserService_Service userService_Service = new UserService_Service();
UserService userService = userService_Service.getUserServiceImplPort();
System.err.println(userService.getName("test"));
System.err.println(userService.getAllUser().size());
System.err.println(userService.getUser("test"));
}