发布webservice
1.添加maven 依赖
<!-- cxf支持 -->
<dependency>
<groupId>org.apache.cxf</groupId>
<artifactId>cxf-rt-frontend-jaxws</artifactId>
<version>3.1.6</version>
</dependency>
<dependency>
<groupId>org.apache.cxf</groupId>
<artifactId>cxf-rt-transports-http</artifactId>
<version>3.1.6</version>
</dependency>
2.添加cxf 配置类
package com.bestitu.config;
import com.bestitu.service.TestService;
import com.bestitu.service.UserService;
import com.bestitu.service.impl.TestServiceImpl;
import com.bestitu.service.impl.UserServiceImpl;
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.beans.factory.annotation.Autowired;
import org.springframework.boot.web.servlet.ServletRegistrationBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.context.support.AnnotationConfigWebApplicationContext;
import org.springframework.web.servlet.DispatcherServlet;
import javax.servlet.MultipartConfigElement;
import javax.xml.ws.Endpoint;
/**
* cxf配置
*
* 访问地址
* http://localhost:端口/工程名称/接口名?wsdl
* 两种方式:
* 1) http://localhost:8050/webservice/services
* http://localhost:8050/webservice/services/TestService?wsdl
* 2) http://localhost:8050/webservice/UserService?wsdl
*
*/
@Configuration
public class CxfConfig {
@Bean
public ServletRegistrationBean dispatcherServlet() {
// 使用前缀
return new ServletRegistrationBean(new CXFServlet(), "/services/*");
//return new ServletRegistrationBean(new CXFServlet(), "/*");
}
//自动注入spring boot默认的上传配置
@Autowired
private MultipartConfigElement multipartConfigElement;
/**
* 添加普通的controller处理
* @return
*/
@Bean
public ServletRegistrationBean dispatcherRestServlet() {
AnnotationConfigWebApplicationContext context
= new AnnotationConfigWebApplicationContext();
//替换成自己想买的controller包路径
context.scan("com.bestitu.controller");
DispatcherServlet disp = new DispatcherServlet(context);
ServletRegistrationBean registrationBean = new ServletRegistrationBean(disp);
registrationBean.setLoadOnStartup(1);
registrationBean.setMultipartConfig(multipartConfigElement);
//映射路径自定义,必须设置一个不重复的名称
registrationBean.addUrlMappings("/*");
registrationBean.setName("rest");
return registrationBean;
}
@Bean(name = Bus.DEFAULT_BUS_ID)
public SpringBus springBus() {
return new SpringBus();
}
@Bean
public UserService userService() {
return new UserServiceImpl();
}
@Bean
public Endpoint endpoint() {
EndpointImpl endpoint = new EndpointImpl(springBus(), userService());
endpoint.publish("/UserService");
return endpoint;
}
@Bean
public TestService testService() {
return new TestServiceImpl();
}
@Bean
public Endpoint endpointTest() {
EndpointImpl endpoint = new EndpointImpl(springBus(), testService());
endpoint.publish("/TestService");
return endpoint;
}
}
3.添加UserService 接口
import com.bestitu.model.User;
import javax.jws.WebMethod;
import javax.jws.WebParam;
import javax.jws.WebService;
@WebService
public interface UserService {
@WebMethod
String getName(@WebParam(name = "userId") String userId);
@WebMethod
User getUser(String userId);
@WebMethod
User getUserInfo(User user);
}
4.添加UserService 实现类
import com.bestitu.model.User;
import com.bestitu.service.UserService;
import javax.jws.WebService;
import java.util.HashMap;
import java.util.Map;
@WebService(
serviceName = "UserService", // 暴露服务名称
targetNamespace = "http://service.bestitu.com/", // 命名空间,一般是接口的包名倒序
endpointInterface = "com.bestitu.service.UserService" // 接口地址
)
public class UserServiceImpl implements UserService {
private Map<String, User> userMap = new HashMap<String, User>();
public UserServiceImpl() {
//System.out.println("向实体类插入数据");
User user = new User();
user.setId("411001");
user.setUsername("zhansan");
user.setPassword("123456");
userMap.put(user.getId(), user);
user = new User();
user.setId("411002");
user.setUsername("lisi");
user.setPassword("64513123");
userMap.put(user.getId(), user);
user = new User();
user.setId("411003");
user.setUsername("wangwu");
user.setPassword("手动阀手动阀");
userMap.put(user.getId(), user);
}
@Override
public String getName(String userId) {
return "liyd-" + userId;
}
@Override
public User getUser(String userId) {
System.out.println("userMap是:" + userMap);
return userMap.get(userId);
}
@Override
public User getUserInfo(User user) {
return user;
}
}
5.访问wsdl
访问地址
http://{ip}:{端口}/{项目名}/services
http://{ip}:{端口}/{项目名}/services/UserService?wsdl
6.访问webservice
@Test
public void testWebService() throws Exception {
JaxWsDynamicClientFactory dcf = JaxWsDynamicClientFactory.newInstance();
org.apache.cxf.endpoint.Client client = dcf.createClient("http://localhost:8050/webservice/services/UserService?wsdl");
Object[] objects = client.invoke("getUserInfo", "111");
if (objects[0] != null) {
// 转换实体类
//输出调用结果
User user3 = JSON.parseObject(JSON.toJSONString(objects[0]), User.class);
System.out.println(user3.toString());
}
//输出调用结果
}