WebService服务端和客户端
1.WebService简介
Web服务(Web Service)是在Web中使用的一种技术,它是一种平台独立、语言无关、网络传输可靠且基于服务的软件组件,可通过互联网使用。Web服务使用标准化的XML消息格式,实现应用程序之间的通信,它们可以按照客户端-服务器的形式工作,也可以真正地使用基于对等的面向服务的架构来处理分布式计算问题。Web服务的主要目的是促进各种应用程序之间的互操作,并推动基于Web的软件、网站和系统的互联互通。Web服务通常由三个主要组件构成:WSDL(Web服务描述语言)、SOAP(简单对象访问协议)和XML编码规则(XML文档)
2.相关依赖
<dependency>
<groupId>org.apache.cxf</groupId>
<artifactId>cxf-core</artifactId>
<version>3.1.11</version>
</dependency>
<dependency>
<groupId>org.apache.cxf</groupId>
<artifactId>cxf-rt-frontend-jaxws</artifactId>
<version>3.1.11</version>
</dependency>
<dependency>
<groupId>org.apache.cxf</groupId>
<artifactId>cxf-rt-transports-http</artifactId>
<version>3.1.11</version>
</dependency>
<!-- 加入cxf-restful依赖包 -->
<dependency>
<groupId>org.apache.cxf</groupId>
<artifactId>cxf-rt-frontend-jaxrs</artifactId>
<version>3.1.11</version>
</dependency>
<!-- cxf:serve client -->
<dependency>
<groupId>org.apache.cxf</groupId>
<artifactId>cxf-spring-boot-starter-jaxws</artifactId>
<version>3.1.12</version>
</dependency>
3.服务端接口定义
@WebService(name = "TestService",targetNamespace = "http://地址倒序")
public interface WebService {
@WebMethod
String getInfo(@WebParam(name = "name") String name);
}
@WebService:标注webService服务 name:暴露出来的webServiec名称 targetNamespace:命名空间
@WebMethod:webService方法 @WebParam:参数名称
4.服务端方法实现
@WebService(name = "TestService",targetNamespace = "http://命名空间")
@Component
public class WebServiceImpl implements WebService {
@Override
public String getInfo(String name) {
EntitylVo vo = JSONObject.parseObject(vo, EntitylVo.class);
System.out.println(vo.getId());
System.out.println(vo.getDictLabel());
return resultParam;
}
}
@WebService 标识是webService服务的实现类 name:暴露出来的服务名称 targetNamespace:命名空间
5.配置服务端webServiec服务发布
@Configuration
public class cxfConfig {
@Bean
public ServletRegistrationBean disServlet() {
ServletRegistrationBean servletRegistrationBean = new ServletRegistrationBean(new CXFServlet(), "/webService/*");
return servletRegistrationBean;
}
@Bean(name = Bus.DEFAULT_BUS_ID)
public SpringBus springBus() {
return new SpringBus();
}
@Bean
public Endpoint endpoint() {
EndpointImpl endpoint = new EndpointImpl(springBus(), new WebServiceImpl());
endpoint.publish("/TestService");
return endpoint;
}
}
6.查看webService服务接口
通过拼接 本地ip + 端口 + 发布时的配置信息,进行拼接查看wsdl接口文档
如:http://localhost:8082/webService
7.客户端调用工具类
public class ClientUtil {
public static Object callWebSV(String wsdUrl, String operationName, String... params) throws Exception {
JaxWsDynamicClientFactory dcf = JaxWsDynamicClientFactory.newInstance();
Client client = dcf.createClient(wsdUrl);
Object[] objects;
objects = client.invoke(operationName, params);
if (objects != null && objects.length > 0) {
return objects[0];
}
return null;
}
}
8.客户端调用服务端接口
@Test
public void test() throws Exception {
ClassLoader classLoader = Thread.currentThread().getContextClassLoader();
Thread.currentThread().setContextClassLoader(classLoader);
String url = "http://localhost:8082/oak/webService/TestService?wsdl";
String methodName = "getInfo";
HashMap<String, Object> map = new HashMap<String, Object>();
map.put("id",1L);
map.put("dictLabel","参数");
Object o = ClientUtil.callWebSV(url, methodName, JSON.toJSONString(map));
if (o != null) {
Map returnMap = JSONObject.parseObject(JSON.toJSONString(o), Map.class);
if (returnMap.get("code").equals(200)) {
System.out.println("调用成功");
}else {
System.out.println("调用失败");
}
}
}