什么是 Web Services 呢?
`
Web Services实际上是一种平台,提供了一套标准的类型系统,用于沟通不同平台、编程语言和组件模型中的不同类`型系统。
Web Services 拥有三种基本的元素:
它们是:SOAP、WSDL 以及 UDDI。
什么是 SOAP?(SOAP教程)
基本的 Web services 平台是 XML + HTTP。
SOAP 指简易对象访问协议
SOAP 是一种通信协议
SOAP 用于应用程序之间的通信
SOAP 是一种用于发送消息的格式
SOAP 被设计用来通过因特网进行通信
SOAP 独立于平台
SOAP 独立于语言
SOAP 基于 XML
SOAP 很简单并可扩展
SOAP 允许您绕过防火墙
SOAP 将作为 W3C 标准来发展
什么是 WSDL?(WSDL教程)
WSDL 是基于 XML 的用于描述 Web Services 以及如何访问 Web Services 的语言。
WSDL 指网络服务描述语言
WSDL 使用 XML 编写
WSDL 是一种 XML 文档
WSDL 用于描述网络服务
WSDL也可用于定位网络服务
WSDL 还不是 W3C 标准
什么是UDDI?
UDDI 是一种目录服务,通过它,企业可注册并搜索 Web services。
UDDI 指通用的描述、发现以及整合(Universal Description, Discovery and Integration)。
UDDI 是一种用于存储有关 web services 的信息的目录。
UDDI 是一种由 WSDL 描述的网络服务接口目录。
UDDI 经由 SOAP 进行通迅。
UDDI 被构建于 Microsoft .NET 平台之中。
Web Services能干什么
目的:解决跨系统、跨平台、跨服务器之间的通信问题。
实例1:腾讯QQ界面每天展示天气的状态接口。毫无疑问。这是腾讯通过跨系统跨服务器又可能跨平台调取气象台数据的接口。
实例2: 京东物流 ,显示中通,圆通顺丰快递快递员的名字电话。实时监控商品信息。实际上也是调用第三方物流的接口。
那么如何创建及使用WebService?
1:搭建web services服务端,发布服务,实现接口 ;
在这里,我采用的是IDEA2018.03.04版本。
首先,搭建springboot项目。file -----》new-----》project
一直next,至此,springboot项目创建完毕。
<?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 https://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.2.1.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.example</groupId>
<artifactId>web-cxf</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>web-cxf</name>
<description>Demo project for Spring Boot</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.apache.cxf</groupId>
<artifactId>cxf-rt-frontend-jaxws</artifactId>
<version>3.2.0</version>
</dependency>
<dependency>
<groupId>org.apache.cxf</groupId>
<artifactId>cxf-rt-transports-http</artifactId>
<version>3.2.0</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
<exclusions>
<exclusion>
<groupId>org.junit.vintage</groupId>
<artifactId>junit-vintage-engine</artifactId>
</exclusion>
</exclusions>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
整合所需依赖关键:
<dependency>
<groupId>org.apache.cxf</groupId>
<artifactId>cxf-rt-frontend-jaxws</artifactId>
<version>3.2.0</version>
</dependency>
<dependency>
<groupId>org.apache.cxf</groupId>
<artifactId>cxf-rt-transports-http</artifactId>
<version>3.2.0</version>
</dependency>
3,接下来。写接口-》发布接口-》测试。
3.1
package com.example.webcxf.service;
import javax.jws.WebParam;
import javax.jws.WebService;
@WebService
public interface UserService {
String sayHello(@WebParam(name = "userId") String userId ,@WebParam(name = "userName") String userName);
}
这个接口,类似于普通接口,只是接口上方使用的是webservice注解。参数标记由:@param变为@WebParam注解。
3.2 实现类。
package com.example.webcxf.service.impl;
import com.example.webcxf.service.UserService;
import org.springframework.stereotype.Component;
import javax.jws.WebService;
@Component
@WebService(targetNamespace="http://service.webcxf.example.com/",endpointInterface = "com.example.webcxf.service.UserService")
public class UserServiceImpl implements UserService {
@Override
public String sayHello(String userId, String userName) {
return "say hello || userId = "+ userId + "|| userName = "+ userName;
}
}
targetNamespace:目标命名控件,一般由接口所在包路径命名,不过是由里往外写:比如:我接口所在路径为:com.example.webcxf.service.
写为:http://service.webcxf.example.com/
3.3. 创建webservice配置类,使其在项目启动的时候,就发布接口。
package com.example.webcxf.service.config;
import com.example.webcxf.service.UserService;
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 javax.xml.ws.Endpoint;
@Configuration
public class StartClas {
@Bean(name = Bus.DEFAULT_BUS_ID)
public SpringBus springBus() {
return new SpringBus();
}
@Bean(name = "wbsBean")
public ServletRegistrationBean dispatcherServlet() {
ServletRegistrationBean wbsServlet = new ServletRegistrationBean(new CXFServlet(), "/wbs/*");
return wbsServlet;
}
@Bean
public Endpoint endpointPurchase(SpringBus springBus, UserService userService) {
EndpointImpl endpoint = new EndpointImpl(springBus, userService);
endpoint.publish("/user-server");
System.out.println("服务发布成功!地址为:http://localhost:8080/wbs/user-server");
return endpoint;
}
}
启动项目,浏览器地址栏里面输入:http://localhost:8080/wbs/user-server?wsdl 即可看到接口发布成功。
自此 。服务端创建完毕。
四:创建客户端。即服务调用端。
调用端就比较简单了。就一句话:
@RequestMapping("/receive")
@ResponseBody
public void getView(){
JaxWsDynamicClientFactory proxyFactoryBean = JaxWsDynamicClientFactory.newInstance();
Client client = proxyFactoryBean.createClient("http://localhost:8080/wbs/user-server?wsdl");
// 需要密码的情况需要加上用户名和密码
// client.getOutInterceptors().add(new ClientLoginInterceptor(USER_NAME,PASS_WORD));
Object[] objects = new Object[0];
try {
// invoke("方法名",参数1,参数2,参数3....);
objects = client.invoke("sayHello", "1001","张三");
System.out.println("返回数据:" + objects);
} catch (java.lang.Exception e) {
e.printStackTrace();
}
}
对于查询出来的数据封装成对象,以及数据库的一些操作,我就不多说了。因为我有理由相信,你能用到webservice对于那些应该不成问题。