概念

WebService是一种跨编程语言、跨操作系统平台的远程调用技术。

运行方式

基础的 Web Services 平台是 XML + HTTP。XML 提供了一种可用于不同的平台和编程语言之间的语言。HTTP 协议是最常用的因特网协议。

Web Services 拥有三种基本的元素:SOAP、WSDL 以及 UDDI。

soap协议

概念

简单访问协议,是基于XML的简易协议,可使用应用程序在HTTP之上进行信息交换

SOAP 消息必须用 XML 来编码

SOAP 消息必须使用 SOAP Envelope 命名空间

SOAP 消息必须使用 SOAP Encoding 命名空间

SOAP 消息不能包含 DTD 引用

SOAP 消息不能包含 XML 处理指令

语法

<?xml version="1.0"?>
<soap:Envelope
xmlns:soap="http://www.w3.org/2001/12/soap-envelope"
soap:encodingStyle="http://www.w3.org/2001/12/soap-encoding">
<!--必须的 Envelope 元素是 SOAP 消息的根元素。它可把 XML 文档定义为 SOAP 消息。-->
<soap:Header>
    ...
    <!--可选的 Header 元素可包含有关 SOAP 消息的应用程序专用信息(比如认证、支付等) -->
</soap:Header>
<soap:Body>
    ...
    <!--必需的 Body 元素可包含打算传送到消息最终端点的实际 SOAP 消息 -->
  <soap:Fault>
      ...
      <!--可选的 Fault 元素用于指示错误消息 -->
  </soap:Fault>
</soap:Body>
</soap:Envelope>

一次WebService的调用,不是方法的调用而是sopa消息之间的输入输出

WSDL

概念

网络服务描述语言,WSDL 是一种使用 XML 编写的文档。这种文档可描述某个 Web service。它可规定服务的位置,以及此服务提供的操作(或方法)。

 

<definitions>
    根元素,定义WSDL消息
<types>
  ...
  web service 使用的数据类型、方法的请求值和返回值类型、对象包含的属性类型
</types>
<message>
  ...
  每个消息均由一个或多个部件组成,可以把它当做java中一个函数调用的参数
</message>
<portType>
  ...
  方法和方法的输入输出
  类似java中的一个函数库(或一个模块、一个类)
</portType>
<binding>
  ...
  为每个端口定义消息格式和协议细节
</binding>
<service>
    ...
    服务访问路径
</service>
</definitions>

UDDI

概念

UDDI 是一个独立于平台的框架,用于通过使用 Internet 来描述服务,发现企业,并对企业服务进行集成。

UDDI 经由 SOAP 进行通迅,是一种由 WSDL 描述的网络服务接口目录,是一种用于存储有关 Web Services 的信息的目录。

UDDI 就像一个注册中心,通过它可以获得有哪些服务以及服务的地址。

 

IDEA创建WebService项目

 

第一个演示程序,HelloWorld

1、新建项目时选择WebServices,IDEA会自动创建WebServices项目

新版idea2024 创建微服务架构项目_命名空间

自动生成的代码如下,main()方法加上启动成功打印信息

@WebService()
public class HelloWorld {
    @WebMethod
    public String sayHelloWorldFrom(String from) {
        String result = "Hello, world, from " + from;
        System.out.println(result);
        return result;
    }

    public static void main(String[] argv) {
        Object implementor = new HelloWorld();
        String address = "http://localhost:9008/HelloWorld";
        Endpoint.publish(address, implementor);
        System.out.println("WebService 启动成功...路径:" + address);
    }
}

运行成功

新版idea2024 创建微服务架构项目_java_02

2、访问http://localhost:9008/HelloWorld?wsdl

出现以下界面表示发布成功

新版idea2024 创建微服务架构项目_命名空间_03

3、自动生成客户端相关代码

新版idea2024 创建微服务架构项目_命名空间_04

4、url写webservices项目的url加上 ?wsdl

选择生成文件存放的包

新版idea2024 创建微服务架构项目_java_05

5、生成好后如下

新版idea2024 创建微服务架构项目_XML_06

另一种生成方式:打开cmd,在dos命令下输入 wsimport  -s  “src目录”  -p “生成类所在包名”  -keep “wsdl发布地址”

6、编写一个类来调用服务

public class MainTest {
    public static void main(String[] args) {
        HelloWorldService helloWorldService = new HelloWorldService();
        // 通过service获取port
        HelloWorld helloWorldPort = helloWorldService.getHelloWorldPort();
        // 通过port获取服务
        String xx = helloWorldPort.sayHelloWorldFrom("xx");
        System.out.println(xx);
    }
}

7、运行结果如下

新版idea2024 创建微服务架构项目_java_07

 

WebService常用注解

@WebService(              //标识该类是一个webService服务
    serviceName="name" ,       //表示产生的服务的名称
    targetNamespace="http://service.ws.cn")  // WSDL 命名空间名称
  
 @WebMethod(operationName="hello"  , // 表示方法名称
    exclude=true)          // 将指定的public方法排除,用户不能访问

 @WebParam(name="name") // 单个参数至WSDL部件或XML元素的映射,name为名称

@WebResult(name="return")// 返回值至WSDL部件或XML元素的映射,name为名称

小结

WebService是一种跨语言、跨平台的远程调用技术,使用开发协议进行通信,一次WebService的调用,不是方法的调用而是soap消息之间的输入输出。它是独立的并可通过WSDL进行自我描述。WSDL文档就类似RESTful API 接口文档,里面定义了某个WebService提供的接口和相关的参数信息,我们可以根据这个文档来调用WebService接口。WebService可以使用UDDI来发现,UDDI 就像一个注册中心,通过它可以获得有哪些服务以及服务的地址。