SpringBoot整合CXF开发基于soap协议的服务,分为服务端和客户端开发
一、服务端开发
1、新建SpringBoot工程,略
2、实体类
package com.example.demo.pojo;
import java.io.Serializable;
public class User implements Serializable {
private static final long serialVersionUID = 1L;
private Long userId;
private String username;
private String email;
public Long getUserId() {
return userId;
}
public void setUserId(Long userId) {
this.userId = userId;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
}
3、服务接口
package com.example.demo.service;
import javax.jws.WebMethod;
import javax.jws.WebParam;
import javax.jws.WebService;
import com.example.demo.pojo.User;
@WebService
public interface UserService {
@WebMethod
public String getName(@WebParam(name = "userId") Long userId);
@WebMethod
public User getUser(long userId);
}
4、服务实现类
package com.example.demo.service.impl;
import javax.jws.WebService;
import com.example.demo.pojo.User;
import com.example.demo.service.UserService;
@WebService(targetNamespace = "http://service.demo.example.com/", endpointInterface = "com.example.demo.service.UserService")
public class UserServiceImpl implements UserService {
@Override
public String getName(Long userId) {
return "xiaogao" + userId;
}
@Override
public User getUser(long userId) {
User user = new User();
user.setUserId(2l);
user.setUsername("gaoyi");
user.setEmail("315319976@qq.com");
return user;
}
}
5.配置类
package com.example.demo.config;
import javax.xml.ws.Endpoint;
import org.apache.cxf.Bus;
import org.apache.cxf.bus.spring.SpringBus;
import org.apache.cxf.jaxws.EndpointImpl;
import org.apache.cxf.transport.servlet.CXFServlet;
import org.springframework.boot.web.servlet.ServletRegistrationBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import com.example.demo.service.UserService;
import com.example.demo.service.impl.UserServiceImpl;
@Configuration
public class CxfConfig {
@Bean
public ServletRegistrationBean dispatcherServlet() {
return new ServletRegistrationBean(new CXFServlet(), "/soap/*");
}
@Bean(name = Bus.DEFAULT_BUS_ID)
public SpringBus springBus() {
return new SpringBus();
}
@Bean
public UserService userService() {
return new UserServiceImpl();
}
//此处要注意导入正取的Endpoint、EndpointImpl包
@Bean
public Endpoint endpoint() {
EndpointImpl endpoint = new EndpointImpl(springBus(), userService());
endpoint.publish("/user");
return endpoint;
}
}
6、运行springboot 工程,并访问 http://localhost:8080/soap/user?wsdl
二、客户端开发
package com.example.demo.client;
import org.apache.cxf.endpoint.Client;
import org.apache.cxf.jaxws.endpoint.dynamic.JaxWsDynamicClientFactory;
public class ClientTest {
public static void main(String[] args) throws Exception {
JaxWsDynamicClientFactory clientFactory = JaxWsDynamicClientFactory.newInstance();
Client client = clientFactory.createClient("http://localhost:8080/soap/user?wsdl");
Object[] objects = client.invoke("getUser", 2l);
System.out.println(objects[0].toString());
}
}