zoukankan      html  css  js  c++  java
  • 【WebService】WebService之WSDL文档深入分析(三)

    WSDL概念

      WSDL(网络服务描述语言,Web Services Description Language)是一门基于 XML 的语言,用于描述 Web Services 以及如何对它们进行访问。

    WSDL 文档结构

      首先发布一个简单的WebService(参照:【WebService】使用JDK开发WebService(二)),在发布的WebService地址后面加上'?wsdl',得到wsdl文件地址(http://127.0.0.1:8989/test-webservice/hellows?wsdl),使用浏览器打开。

      重要标签说明:  

        types - 数据类型(标签)定义的容器,里面使用schema定义了一些标签结构供message引用
        message - 通信消息的数据结构的抽象类型化定义。引用types中定义的标签
        operation - 对服务中所支持的操作的抽象描述,一个operation描述了一个访问入口的请求消息与响应消息对。
        portType - 对于某个访问入口点类型所支持的操作的抽象集合,这些操作可以由一个或多个服务访问点来支持。
        binding - 特定端口类型的具体协议和数据格式规范的绑定。
        service- 相关服务访问点的集合
        port - 定义为协议/数据格式绑定与具体Web访问地址组合的单个服务访问点。 

      1、文档结构

     1 <definitions>
     2     <types>
     3         <schema>
     4             <element>
     5     </types>
     6     
     7     <message>
     8         <part>
     9     </message>
    10     
    11     <portType>
    12         <operation>
    13             <input>
    14             <output>
    15     </portType>
    16         
    17     <binding>
    18         <operation>
    19             <input>
    20             <output>
    21     </binding>
    22     
    23     <service>
    24         <port>
    25             <address>
    26     </service>
    27 </definitions>

      2、文档详解

        http://127.0.0.1:8989/test-webservice/hellows?wsdl文件详解

     1 <?xml version="1.0" encoding="UTF-8"?>
     2 <definitions 
     3     xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd" 
     4     xmlns:wsp="http://www.w3.org/ns/ws-policy" 
     5     xmlns:wsp1_2="http://schemas.xmlsoap.org/ws/2004/09/policy" 
     6     xmlns:wsam="http://www.w3.org/2007/05/addressing/metadata" 
     7     xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" 
     8     xmlns:tns="http://ws.test.com/" 
     9     xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
    10     xmlns="http://schemas.xmlsoap.org/wsdl/" 
    11     targetNamespace="http://ws.test.com/" 
    12     name="HelloWSImplService">
    13     <!--
    14         types
    15             schema : 定义了一些标签结构
    16     -->
    17     <types>
    18         <xsd:schema>
    19             <!-- 此处引用的sehemaLocation地址,可以使用浏览器打开,获取schema约束 -->
    20             <xsd:import namespace="http://ws.test.com/" 
    21                 schemaLocation="http://127.0.0.1:8989/test-webservice/hellows?xsd=1"></xsd:import>
    22         </xsd:schema>
    23     </types>
    24 
    25     <!--
    26         message : 用于定义消息的结构 soap消息
    27             part :指定引用types中定义的标签片段
    28     -->
    29     <message name="sayHello">
    30         <part name="parameters" element="tns:sayHello"></part>
    31     </message>
    32     <message name="sayHelloResponse">
    33         <part name="parameters" element="tns:sayHelloResponse"></part>
    34     </message>
    35     
    36     <!--
    37         portType : 用来定义服务器端的SEI
    38             operation : 用来指定SEI中处理请求的方法
    39                 input : 指定客户端应用传过来的数据,会引用上面的定义的<message>
    40                 output : 指定服务器端返回给客户端的数据,会引用上面定义的<message>
    41     -->
    42     <portType name="HelloWSImpl">
    43         <operation name="sayHello">
    44             <input wsam:Action="http://ws.test.com/HelloWSImpl/sayHelloRequest" message="tns:sayHello"></input>
    45             <output wsam:Action="http://ws.test.com/HelloWSImpl/sayHelloResponse" message="tns:sayHelloResponse"></output>
    46         </operation>
    47     </portType>
    48     
    49     <!--
    50         binding : 用于定义SEI的实现类
    51             type属性:引用上面的<portType>
    52             <soap:binding style="document"> :绑定的数据是一个document(xml)
    53             operation : 用来定义实现的方法
    54                 <soap:operation style="document" /> 传输的是document(xml)
    55                 input : 指定客户端引用传过来的数据
    56                     <soap:body use="literal"> :文本数据
    57                 output : 指定服务端返回给客户端的数据
    58                     <soap:body use="literal"> :文本数据
    59     -->
    60     <binding name="HelloWSImplPortBinding" type="tns:HelloWSImpl">
    61         <soap:binding transport="http://schemas.xmlsoap.org/soap/http" style="document"></soap:binding>
    62         <operation name="sayHello">
    63             <soap:operation soapAction=""></soap:operation>
    64             <input>
    65                 <soap:body use="literal"></soap:body>
    66             </input>
    67             <output>
    68                 <soap:body use="literal"></soap:body>
    69             </output>
    70         </operation>
    71     </binding>
    72     
    73     <!--
    74         service : 一个webservice的容器
    75             name属性 : 它用已指定客户端容器类
    76             port : 用来指定一个服务器端处理请求的入口(就是SEI的实现)
    77                 binding属性 : 引用上面定义的<binding>
    78                 address : 当前webservice的请求地址
    79     -->
    80     <service name="HelloWSImplService">
    81         <port name="HelloWSImplPort" binding="tns:HelloWSImplPortBinding">
    82             <soap:address location="http://127.0.0.1:8989/test-webservice/hellows"></soap:address>
    83         </port>
    84     </service>
    85 </definitions>

        引用的http://127.0.0.1:8989/test-webservice/hellows?xsd=1, schema约束如下:

     1 <?xml version="1.0" encoding="UTF-8"?>
     2 <!-- Published by JAX-WS RI at http://jax-ws.dev.java.net. RI's version is JAX-WS RI 2.2.4-b01. -->
     3 <!--
     4     shecma约束
     5     
     6     用于请求:
     7         <sayHello>
     8             <arg0>string</arg0>
     9         </sayHello>
    10     
    11     用于响应:
    12         <sayHelloResponse>
    13             <return>string</return>
    14         </sayHelloResponse>
    15     
    16 -->
    17 <xs:schema xmlns:tns="http://ws.test.com/" 
    18     xmlns:xs="http://www.w3.org/2001/XMLSchema" 
    19     version="1.0" 
    20     targetNamespace="http://ws.test.com/">
    21 
    22     <xs:element name="sayHello" type="tns:sayHello"/>
    23 
    24     <xs:element name="sayHelloResponse" type="tns:sayHelloResponse"/>
    25 
    26     <xs:complexType name="sayHello">
    27         <xs:sequence>
    28             <xs:element name="arg0" type="xs:string" minOccurs="0"/>
    29         </xs:sequence>
    30     </xs:complexType>
    31 
    32     <xs:complexType name="sayHelloResponse">
    33         <xs:sequence>
    34             <xs:element name="return" type="xs:string" minOccurs="0"/>
    35         </xs:sequence>
    36     </xs:complexType>
    37 </xs:schema>

       3、文档图解图
          

          注:可以通过查看webservice的请求消息和响应消息(【WebService】使用JDK开发WebService(二)--》使用JDK开发WebService--》a、开发WebService服务端--》7、查看发送消息和响应消息的具体内容),来与wsdl文件中的message进行相互验证

        

  • 相关阅读:
    sql server中count(*),count(col),count(1)的区别
    oracle 存储过程(1)
    Java线程:概念及原理
    H2 应用实例2
    H2 应用实例1
    H2 database 应用
    H2 database 操作操作内存表
    JDK 环境变量配置
    MySQL CREATE TRIGGER (1)
    MySQL 事务1
  • 原文地址:https://www.cnblogs.com/h--d/p/7262732.html
Copyright © 2011-2022 走看看