[转]一个简单的WSDL文档(上)
现在,简单解释一下《使用Axis发布简单的Web服务》中发布的Web服务所对应WSDL文档的内容和结构。请注意,同样的Java类在不同的Web服务开发包中得到的WSDL文档不一定完全相同,这里还是以使用Axis的情况作为例子。
虽然比较长,但为了方便起见还是把完整的WSDL贴在下面,然后进行说明。由于我对Web服务的认识还很不够,所以几乎可以肯定会存在一些误解,仅作参考。
- xml version="1.0" encoding="UTF-8"?>
- <wsdl:definitions targetNamespace="http://localhost:8080/bookstore/services/BookSvc"
- xmlns="http://schemas.xmlsoap.org/wsdl/"
- xmlns:apachesoap="http://xml.apache.org/xml-soap"
- xmlns:impl="http://localhost:8080/bookstore/services/BookSvc"
- xmlns:intf="http://localhost:8080/bookstore/services/BookSvc"
- xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/"
- xmlns:tns1="http://model.bookstore.com"
- xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
- xmlns:wsdlsoap="http://schemas.xmlsoap.org/wsdl/soap/"
- xmlns:xsd="http://www.w3.org/2001/XMLSchema">
- <wsdl:types>
- <schema targetNamespace="http://model.bookstore.com" xmlns="http://www.w3.org/2001/XMLSchema">
- <import namespace="http://schemas.xmlsoap.org/soap/encoding/"/>
- <complexType name="Book">
- <sequence>
- <element name="ISDN" nillable="true" type="xsd:string"/>
- <element name="name" nillable="true" type="xsd:string"/>
- <element name="page" type="xsd:int"/>
- sequence>
- complexType>
- Schema>
- wsdl:types>
- <wsdl:message name="addBookResponse">
- wsdl:message>
- <wsdl:message name="addBookRequest">
- <wsdl:part name="book" type="tns1:Book"/>
- wsdl:message>
- <wsdl:portType name="BookSvc">
- <wsdl:operation name="addBook" parameterOrder="book">
- <wsdl:input message="intf:addBookRequest" name="addBookRequest"/>
- <wsdl:output message="intf:addBookResponse" name="addBookResponse"/>
- wsdl:operation>
- wsdl:portType>
- <wsdl:binding name="BookSvcSoapBinding" type="intf:BookSvc">
- <wsdlsoap:binding style="rpc" transport="http://schemas.xmlsoap.org/soap/http"/>
- <wsdl:operation name="addBook">
- <wsdlsoap:operation soapAction=""/>
- <wsdl:input name="addBookRequest">
- <wsdlsoap:body encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" namespace="http://bookstore.com" use="encoded"/>
- wsdl:input>
- <wsdl:output name="addBookResponse">
- <wsdlsoap:body encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" namespace="http://localhost:8080/bookstore/services/BookSvc" use="encoded"/>
- wsdl:output>
- wsdl:operation>
- wsdl:binding>
- <wsdl:service name="BookSvcService">
- <wsdl:port binding="intf:BookSvcSoapBinding" name="BookSvc">
- <wsdlsoap:address location="http://localhost:8080/bookstore/services/BookSvc"/>
- wsdl:port>
- wsdl:service>
- wsdl:definitions>
每个WSDL的根元素都是
我们都知道,WSDL应该是格式正确的XML文档。进一步,还应该把它看作一个Schema,因此,
xmlns表示缺省的名称空间,请注意在上面的文档中,这个缺省名称空间的值和xmlns:wsdl的值是相同的(都是http://schemas.xmlsoap.org/wsdl/)。因此,在这个WSDL中的很多
名称空间xmlns:apachesoap在文档中并没有使用到,这个应该是Axis为某些情况预留的名称空间,或者是为了兼容以前的版本使用,因为Axis的前身是Apache Soap项目。
名称空间xmlns:intf和xmlns:impl分别代表接口(interface)和实现(implement),可以看出它们的值也是相同的,并且和
名称空间xmlns:soapenc在这个文档里也没有用到,所以先不解释了。
名称空间xmlns:tns1,在很多WSDL里这个名字都叫tns的,没有后面的数字1,不知道Axis为什么起这样的名字。不过没有关系,名称空间的名字本来就没有实际的意义,只是一个代号而已。tns是This NameSpace的缩写,用来对当前WSDL进行引用。由于一个WSDL映射一个包(package),所以Axis为我们生成的WSDL里,tns1的值(http://model.bookstore.com)包含java包(com.bookstore.model)的信息就是顺理成章的了。请注意,tns1的值和
名称空间xmlns:wsdlsoap是在与soap绑定时使用的,例如
名称空间xmlns:xsd是对XML Schema中各种数据类型的引用,例如string、boolean等等。想知道XML Schema中一共都定义了哪些数据类型,只要查看该名称空间的值(http://www.w3.org/2000/10/XMLSchema)即可。
没想到只是名称空间就写了这么多,而WSDL的结构还有不少内容,所以还是分为两部分吧,下一篇说说这个WSDL中的各个元素的作用。
- 23:16
- 浏览 (412)
- 评论 (0)
- 分类: Web Service
- 相关推荐
发表评论
- 浏览: 63531 次
- 性别:

- 来自: Da Lian

- 详细资料
搜索本博客
最新评论
-
Oracle的rownum原理和使用
照这么看来,rownum 就是一个游标,而且只能前进,不能后退的游标啦```~~ ...
-- by lovinchan -
游戏,平时彻底地放弃
深有同感 ,一起勉励自己吧
-- by hyj1254 -
避免在Java中使用Checked ...
的确是这样,在某些情况下,我的确觉得checked Exception用起来很麻 ...
-- by ivonxiao -
Documentum notes accumul ...
最近也在搞Documentum,觉得这个内容管理器的功能确实比较强大,但是界面也 ...
-- by woshifeng9th -
Oracle的rownum原理和使用
order by name 如果name是pk或有index ,查询出来的row ...
-- by seasar






评论排行榜