这里主要是对昨天的简单的WS示例生成的wsdl进行简单的分析。
很多节点的意思都是自己的理解,也有简单的参考外面的文档,可能名称描述不是很合理或者意思理解有误,
也有部分不明白的地方,也希望有看到的朋友指明不足的地方和我描述的疑问。感激不尽。
WebService学习之路一: http://trylin.iteye.com/blog/1906819
二、理解WSDL
wsdl中有类似java对象的引用关系,通过wsdl我们可以知道此服务对外的地址,方法,以及方法的输入输出参数类型等。
访问我们发布的WS http://localhost:8888/WS?wsdl
Wsdl的元素根节点是 definitions,从单词的意思可以看出是对整个wsdl文件的解释。
xmlns:tns=http://impl.service.ws.trylin.com/ xml命名空间
targetNamespace="http://impl.service.ws.trylin.com/".//表示下面的节点都是指向的这个命名空间
name="TestImplService" //整个wsdl 的一个命名 这里默认是服务名
definitions下有
<import namespace="http://service.ws.trylin.com/" location="http://localhost:8888/WS?wsdl=1"/>
这个理解为xml导入并给定命名空间,location为xml地址,下面会对这个导入的xml简单理解。
definitions子元素的定义主要包含两部分
<!--[if !supportLists]-->1、 <!--[endif]-->具体定义
<!--[if !supportLists]-->2、 <!--[endif]-->抽象定义
参考:http://www.blogjava.net/baoyaer/articles/116413.html
1、具体定义
通过具体定义,可以简单的看到服务对外的服务名称和服务方法。
1.1、binding
xmlns:ns1=” http://service.ws.trylin.com/” 相当与引用一个命名空间下的xml元素
type="ns1:ITest" type类型 ns1对应上面的空间名,表示这个ITest是属于ns1指向的空间中定义的类型
soap:binding声明将把 SOAP 作为绑定和传输服务使用 style属性可选 rpc/ document
operation 表示服务发布的几个方法
input /output分别指的是方法的输入输入 其中soap:body use="literal" use的取值也是可选的 literal/ encoded
关于 soap:binding中的style属性 和 soap:body中的use属性的区别,我没能理解,希望有人看懂后,指点一下
参考的链接:http://www.ibm.com/developerworks/cn/webservices/ws-whichwsdl/
1.2、service
这个节点主要是对发布服务的描述 name属性 表示对外发布的服务名称
Port 服务端口声明 binding="tns:TestImplPortBinding" 这里是指向我们之前看到的binding对象。soap:address 服务对外的地址。
2、抽象定义
通过抽象定义,可以具体的了解到服务对外的一些具体信息,比如包含的那些类型的数据,方法的参数,返回值等等。
找到<import namespace="http://service.ws.trylin.com/" location="http://localhost:8888/WS?wsdl=1"/>
在浏览器中输入 http://localhost:8888/WS?wsdl=1 回车
2.1、Types
Types表示的是类型,从xsd:import 可以看出 这里又是一个引用的一个schema
浏览器中输入schemaLocation中的 http://localhost:8888/WS?xsd=1
<xs:element name="add" type="tns:add"/>
<xs:element name="addResponse" type="tns:addResponse"/>
这里表示的是服务对外的方法的 输入输出对象,找到引用的 tns:add tns:addResponse
<xs:complexType name="add">
<xs:sequence>
<!—arg表示输入对象的参数 0表示顺序 arg0不便于理解,后面会介绍怎么改变参数的名称
参数类型是 type int-->
<xs:element name="arg0" type="xs:int"/>
<xs:element name="arg1" type="xs:int"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="addResponse">
<xs:sequence>
<!—return表示返回 返回类型是int -->
<xs:element name="return" type="xs:int"/>
</xs:sequence>
</xs:complexType>
这里对输入输出对象的简单描述
2.2、Message
Message是对服务对外方法的描述,每一个方法分输入和输出两部分
<message name="add">
<part name="parameters" element="tns:add"/>
</message>
<message name="addResponse">
<part name="parameters" element="tns:addResponse"/>
</message>
Element=”tns:add”这里把具体的描述指向了 Types中的元素。
3、portType
PortType 服务类的具体定义 name定义的类型名称
operation name="add" 定义的方法
<input message="tns:add"/>
<output message="tns:addResponse"/>
Input方法的输入类型
output 方法的输入类型
大概的描述,自己整理起来也有点混乱的感觉
尤其是 关于 soap:binding中的style属性 和 soap:body中的use属性的区别(各位知道的话,请不要吝啬哦,打几个字,在回复中告诉我,谢谢。呵呵。。。)
关于这里,我想以后还得回过头查下相关的资料,先把全部的视频看完,在把自己的一些疑问一个个解决,
不求一次性全部理解,囫囵吞枣的过一遍,然后在仔细的再看一遍,这可能也是一种好的学习方法。