webService(一):WSDL
1、准备知识
- XML命名空间
XML命名空间为防止xml元素命名冲突提供了解决方案。
- 命名冲突
对于一个XML文件,它的元素名称是由开发者定义的。当合并不同应用的XML文档时经常会导致命名冲突。
下面的XML代码一段HTML表格信息:
<tr>
<td>Apples</td>
<td>Bananas</td>
</tr>
</table>
下面的XML表示一张桌子的信息:
<name>African Coffee Table</name>
<width>80</width>
<length>120</length>
</table>
如果把这两段XML合并起来,就会发生命名冲突。都含有一个<table>元素,但是格子的内容和含义不同。
XML解析器不知道如何处理这些差异。
- 使用前缀解决命名冲突
使用名称前缀可以很容易的避免命名冲突。
下面的XML表示一个HTML表格和一个家具的信息:
<h:tr>
<h:td>Apples</h:td>
<h:td>Bananas</h:td>
</h:tr>
</h:table>
<f:table>
<f:name>African Coffee Table</f:name>
<f:width>80</f:width>
<f:length>120</f:length>
</f:table>
上面的例子中不存在冲突,因为两个<table>元素有不同的名字。
- XML命名空间-xmlns属性
在XML中使用前缀时时,必需定义命名空间。
通过在元素的开头放置xmlns属性来定义命名空间。
定义命名空间的语法:xmlns:prefix="URI"。
<h:table xmlns:h="http://www.w3.org/TR/html4/">
<h:tr>
<h:td>Apples</h:td>
<h:td>Bananas</h:td>
</h:tr>
</h:table>
<f:table xmlns:f="http://www.w3schools.com/furniture">
<f:name>African Coffee Table</f:name>
<f:width>80</f:width>
<f:length>120</f:length>
</f:table>
</root>
上面的例子中,<table>标签中的xmlns属性赋予前缀h:和f:一个命名空间。
当一个元素定义了命名空间之后,所有具有相同前缀的子元素都和相同的命名空间关联。
命名空间可以在XML根元素处定义。
xmlns:f="http://www.w3schools.com/furniture">
<h:table>
<h:tr>
<h:td>Apples</h:td>
<h:td>Bananas</h:td>
</h:tr>
</h:table>
<f:table>
<f:name>African Coffee Table</f:name>
<f:width>80</f:width>
<f:length>120</f:length>
</f:table>
</root>
Note: 解析器在查找信息的时候不会使用命名空间的URI。作用只是给命名空间一个独特的名字。
- 默认命名空间
为元素定义一个默认的命名空间,可以应用到所有的子元素上。语法如下:
下面的XML表示一个HMTL表格信息:
<tr>
<td>Apples</td>
<td>Bananas</td>
</tr>
</table>
下面的XML表示家具信息:
<name>African Coffee Table</name>
<width>80</width>
<length>120</length>
</table>
- 命名空间的实际应用
XSLT是一种XML语言,它可以把XML文档翻译成其他的格式,比如HTML。
在下面的XSLT标签中,你会发现大部分标签都是HTML标签。
不是HMTL的标签都有xsl前缀,通过命名空间xmlns:xsl="http://www.w3.org/1999/XSL/Transform"标识:
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<html>
<body>
<h2>My CD Collection</h2>
<table border="1">
<tr>
<th style="text-align:left">Title</th>
<th style="text-align:left">Artist</th>
</tr>
<xsl:for-each select="catalog/cd">
<tr>
<td><xsl:value-of select="title"/></td>
<td><xsl:value-of select="artist"/></td>
</tr>
</xsl:for-each>
</table>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
2、WSDL
WSDL是一个基于XML的语言,它用来描述Web Service以及如何访问这些Web Service。
WSDL的作用
- WSDL 全称是Web Services Description Language
- WSDL 是用XML写的
- WSDL 是一个XML文档
- WSDL 用来描述Web Service
- WSDL 也用来定位Web Servcie
- WSDL 是W3C 推荐使用
WSDL文档结构
WSDL文档使用下面几个主要的元素来描述Web Service:
Element | Description |
---|---|
<types> | A container for data type definitions used by the web service |
<message> | A typed definition of the data being communicated |
<portType> | A set of operations supported by one or more endpoints |
<binding> | A protocol and data format specification for a particular port type |
WSDL文档的主要结构:
<types>
data type definitions........
</types>
<message>
definition of the data being communicated....
</message>
<portType>
set of operations......
</portType>
<binding>
protocol and data format specification....
</binding>
</definitions>
WSDL文档可以包含其他元素,比如扩展元素、以及服务元素(集合几个Web Service定义在一个WSDL文档中)。
WSDL Ports
<protType>是WSDL中最重要的元素。它可以比喻成传统编程语言中的一个函数库(或者一个模块,一个类)。<protType>元素用来一个一个Web Service、可以执行的操作,以及包含的message.
WSDL Messages
<message>元素定义了一个操作的数据。每个message可以包含一个或者多个parts。parts可以比如成传统编程语言中的函数形参。
WSDL Types
<types>元素定义了Web Service使用的数据类型。为了最大的平台无关性,WSDL使用XML Schema语法定义数据类型。
WSDL Bindings
<binding>元素为每个port type定义了message格式和协议。
一个请求-响应操作:
<part name="term" type="xs:string"/>
</message>
<message name="getTermResponse">
<part name="value" type="xs:string"/>
</message>
<portType name="glossaryTerms">
<operation name="getTerm">
<input message="getTermRequest"/>
<output message="getTermResponse"/>
</operation>
</portType>
<binding type="glossaryTerms" name="b1">
<soap:binding style="document"
transport="http://schemas.xmlsoap.org/soap/http" />
<operation>
<soap:operation soapAction="http://example.com/getTerm"/>
<input><soap:body use="literal"/></input>
<output><soap:body use="literal"/></output>
</operation>
</binding>
binding 有两个属性 - name和type。
name属性(可以任意起名)定义binding的名字,type属性指定绑定的端口(端口的概念在这里就是一个web service)。
soap:binding 有两个属性 - style和transport。
style属性可以是”rpc"或者“document”;transport属性定义了使用的SOAP协议,例子中我们使用HTTP。
operation 元素定义了protType暴露的每个操作。SOAP action定义的每个操作,必需指定如何加密input和output。例子中我们使用“literal”。
WSDL Example
下面是一个简单的WSDL文档片段:
<part name="term" type="xs:string"/>
</message>
<message name="getTermResponse">
<part name="value" type="xs:string"/>
</message>
<portType name="glossaryTerms">
<operation name="getTerm">
<input message="getTermRequest"/>
<output message="getTermResponse"/>
</operation>
</portType>
上例中, <portType>元素定义了"glossaryTeams"作为一个port的名字,并且定义了"getTerm"作为一个operation的名字。"getTerm" operation包含一个叫”getTermRequest"的input message和一个叫“getTermResponse"的output message。
<message>元素定义定义了每个消息的parts,以及关联的数据类型。
和传统编程相比,glossaryTerms是一个函数库,”getTerm"是一个函数(getTermRequest作为输入参数,getTermResponse作为输出参数)。
webService(一):WSDL相关推荐
- 浅淡Webservice、WSDL三种服务访问的方式(附案例)
Webservice Webservice是使应用程序以与平台和编程语言无关的方式进行相互通信技术. eg:站点提供访问的数据接口:新浪微博.淘宝. 官方解释:它是一种构建应用程序的普遍模型,可以在任 ...
- [Java] webservice soap,wsdl 例子
java 调用webservice的各种方法总结 现在webservice加xml技术已经逐渐成熟,但要真正要用起来还需时日!! 由于毕业设计缘故,我看了很多关于webservice方面的知识,今天和 ...
- CXF发布服务,WebService缺少wsdl:types/wsdl:message/标签
发布CXF时遇到一个问题,发布的服务,wsdl文件中没有<wsdl:types/><wsdl:message/>标签,wsdl文件如下: <?xml version=&q ...
- php的webservice的wsdl的XML无法显示
php的webservice的因为wsdl有中文所以xml无法显示 可以用Nopepad++ 转码即可 以UTF-8无BOM编码
- webservice、WSDL简介
Webservice是跨平台.跨语言的远程调用技术 通信机制的本质是xml数据交换 采用soap协议进行通信 而WSDL 指网络服务描述语言 (Web Services Description Lan ...
- 彻底理解webservice SOAP WSDL
WebServices简介 先给出一个概念 SOA ,即Service Oriented Architecture ,中文一般理解为面向服务的架构, 既然说是一种架构的话,所以一般认为 SOA 是包含 ...
- 学习 WebService 第五步:在Local创建测试用WebService(WSDL)
[准备] Eclipse+Tomcat7(Tomcat端口修改为不冲突的值) axis2 1.7.7 jar包(没有来这里下载:http://www.apache.org/dyn/closer.lua ...
- 提供一些网上webservice的WSDL地址
腾讯QQ在线状态WEB服务 Endpoint:http://www.webxml.com.cn/webservices/qqOnlineWebService.asmx Disco:http://www ...
- webService接口wsdl以byte[]方式上传附件
服务端声明 @WebService(serviceName = "CreateKnwlFileService") public class CreateKnwlFile {/* 接 ...
- 【WebService】wsdl配置详解以及使用注解修改wsdl配置
本文转自: https://blog.csdn.net/eson_15/article/details/52051801 (倪升武的博客) 对大佬的膜拜! 前面分析了一下关于ws的基本知识,我们知 ...
最新文章
- 抽象工厂模式java_Java之抽象工厂模式(Abstract Factory)
- 【pwnable.tw】 death_note
- 第三十期:BAT 为什么都看上了重庆?
- eclipse弃坑记第一篇之在idea上配置Tomcat环境并创建Javaweb项目的详细步骤原创
- python标准库对象导入语句_Python标准库之Sys模块使用详解
- 为什么调用thread.Abort(),线程不会马上停止
- SOA应用难逃出的五座大山
- CSS实现字体镂空效果、阴影效果、字体阴影效果
- linux定时器使用指南及实例
- 虚拟交换系统 (VSS)
- Python笔记:集合的概念和使用
- MATLAB角度转换
- PLM( 产品生命周期管理)的简单介绍
- 根据2点经纬度,计算方位角,以及计算2条线的夹角
- error C2039: ‘tr1‘: is not a member of ‘std‘
- (3/300)分部积分法
- Windows + XMAPP + TestLink 初探
- SQL Server CDC数据增量抽取
- 百丽三十而立:“鞋王”DTC之路的阵痛与重生
- 学完这些图像处理,我拿去给女友修了图...
热门文章
- Linux内核Thermal框架详解十三、Thermal Governor(3)
- PDFBox解析PDF文档
- 组合数学笔记之二——“二项式系数”
- 基于FPGA的ICG-20330陀螺仪设计
- 一个极品MM的日记!很嘲很有道理!
- caffe 训练手写字体HWDB1.1trn_gnt.zip HWDB1.1tst_gnt.zip并测试完整超详尽攻略
- [zz]百度发布深度学习可视化平台 Visual DL
- 手把手教你配置机器学习服务器(二)服务器组装
- XUST组于2004年10月14日成立!
- python语言头像_Python个性化头像