WSDL文档中的节点与java类的联系
2014-01-02 16:42
141 查看
WSDL:是web service description language的首字母缩写。意思是web服务描述语言。
那么他到底描述了什么东西呢?
根据我这几天在网上的各种信息收录。它主要描述了三方面的内容 即 what, how, where
what:描述了web service能够做什么
how:描述我们应该如何访问web service
where:描述我们的服务在哪里
为了讲解WSDL文件的结构以及java类的关系,我们必然要先看看WSDL文档长得如何。
我们利用myeclipse创建一个wsdl文件 步骤如图:
![](http://dl2.iteye.com/upload/attachment/0085/3001/fd718fa0-6c7a-36f6-9aaa-eadbc0cc999f.png)
![](http://dl2.iteye.com/upload/attachment/0085/2993/b0e38664-7cdf-3dac-9002-f69e4ff11963.png)
![](http://yimengzhu.iteye.com/blog/dl2.iteye.com/upload/attachment/0085/2997/405a9679-1f11-352c-8eda-4404ef026e4d.png)
![](http://dl2.iteye.com/upload/attachment/0085/2995/ef5b6ca5-5f91-3b28-b978-d12a70f8b781.png)
创建后的文件内容如下:
Java代码
![](http://yimengzhu.iteye.com/images/icon_star.png)
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<wsdl:definitions xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:tns="http://www.example.org/NewWSDLFile/" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" name="NewWSDLFile" targetNamespace="http://www.example.org/NewWSDLFile/">
<wsdl:types>
<xsd:schema targetNamespace="http://www.example.org/NewWSDLFile/">
<xsd:element name="NewOperation">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="in" type="xsd:string"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:element name="NewOperationResponse">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="out" type="xsd:string"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
</xsd:schema>
</wsdl:types>
<wsdl:message name="NewOperationRequest">
<wsdl:part element="tns:NewOperation" name="parameters"/>
</wsdl:message>
<wsdl:message name="NewOperationResponse">
<wsdl:part element="tns:NewOperationResponse" name="parameters"/>
</wsdl:message>
<wsdl:portType name="NewWSDLFile">
<wsdl:operation name="NewOperation">
<wsdl:input message="tns:NewOperationRequest"/>
<wsdl:output message="tns:NewOperationResponse"/>
</wsdl:operation>
</wsdl:portType>
<wsdl:binding name="NewWSDLFileSOAP" type="tns:NewWSDLFile">
<soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/>
<wsdl:operation name="NewOperation">
<soap:operation soapAction="http://www.example.org/NewWSDLFile/NewOperation"/>
<wsdl:input>
<soap:body use="literal"/>
</wsdl:input>
<wsdl:output>
<soap:body use="literal"/>
</wsdl:output>
</wsdl:operation>
</wsdl:binding>
<wsdl:service name="NewWSDLFile">
<wsdl:port binding="tns:NewWSDLFileSOAP" name="NewWSDLFileSOAP">
<soap:address location="http://www.example.org/"/>
</wsdl:port>
</wsdl:service>
</wsdl:definitions>
通过myeclipse帮我们创建的wsdl文档,我们观察它的结构发现:
一份WSDL文档definitions基本上有以下部分:
types,message,portType,binding,service。
知道包含了这些元素,我们先解释这些元素都是干嘛的,然后在说与java类的对应关系,那时候你会惊叹——“哦,原来是这样”。 好吧,不扯了。
types:定义了文档中要用的类型,由于web service跟编程语言是没有关系的,那么我们这里的类型必然是公用的,而XML是独立于平台的语言。所以,这里使用的是XML Schema的类型,在我们刚刚创建的文档中,他包含了两个元素,分别是newOperation和newOperationResponse,这两个元素都是复杂类型的,如果你对xml的schema还不怎么了解,可以到网上找找。必要的情况下,我也会写成简单的博客了。
message:通信消息数据结构的抽象类型化定义。(好吧,这个确实很抽象)
portType:对于某个访问入口点类型所支持操作的抽象集合
binding:包含了如何将抽象接口的元素(portType)转变为具体表示的细节,具体表示也就是指特定的数据格式和协议的结合;特定端口类型的具体协议和数据格式规范的绑定。
service:这是一个粗糙命名的元素,代表端口的集合;相关服务点的集合。
看完上面的定义,貌似很复杂,确实很不好理解。但是把他对应到java类的关系会好理解很多。下面的讲解都跟上面的文档关联起来讲的。
types这个跟xml的schema有关的。在schema定义里面的element是代表可以在xml文档中写的元素。牵强一点说,类似于我们java中的变量。
message,上面说的是数据结构的抽象化定义,其实就是参数的定义。在而参数的具体信息则由part表示,我们在上面的文档中已然看到在message元素的子元素中有part元素。而part元素就是我们的参数定义。不管输入参数还是输出参数,我们都是用一个part表示一个参数。好比我们的java类中。有一个方法有四个参数,那么我们就需要定义四个part来表示这四个参数,然后将这是个part定义在一个message中,而这个message则表示这个java方法的输入参数。 但是,我们在契约优先的开发模式中,有一种是基于封装的模式,也就是说,把所有的输入参数都当成一个复杂类型,而这个复杂类型用一个element表示。然后在将这个element作为part的属性。
这种方式也是可行的。甚至是推荐的。
portType:简单的说就是接口的定义。我们在java中,每一个接口可能会声明多个方法,对应的,在portType我们也可以声明多个方法,而方法的在WSDL中是用<operation>来表示的、
Java代码
![](http://yimengzhu.iteye.com/images/icon_star.png)
<wsdl:operation name="NewOperation">
<wsdl:input message="tns:NewOperationRequest"/>
<wsdl:output message="tns:NewOperationResponse"/>
</wsdl:operation>
operation可以包含input,output,fault。在我们创建的文档中包含了input和output分别代表输入参数和输出参数(即我们的返回值)。input的message属性就指向我们所定义的输入参数同理,output指的就是我们的返回值(引申义就是我们的代表返回值得message应该只有一个part)
参考:http://www.w3.org/TR/wsdl.html
那么他到底描述了什么东西呢?
根据我这几天在网上的各种信息收录。它主要描述了三方面的内容 即 what, how, where
what:描述了web service能够做什么
how:描述我们应该如何访问web service
where:描述我们的服务在哪里
为了讲解WSDL文件的结构以及java类的关系,我们必然要先看看WSDL文档长得如何。
我们利用myeclipse创建一个wsdl文件 步骤如图:
![](http://dl2.iteye.com/upload/attachment/0085/3001/fd718fa0-6c7a-36f6-9aaa-eadbc0cc999f.png)
![](http://dl2.iteye.com/upload/attachment/0085/2993/b0e38664-7cdf-3dac-9002-f69e4ff11963.png)
![](http://yimengzhu.iteye.com/blog/dl2.iteye.com/upload/attachment/0085/2997/405a9679-1f11-352c-8eda-4404ef026e4d.png)
![](http://dl2.iteye.com/upload/attachment/0085/2995/ef5b6ca5-5f91-3b28-b978-d12a70f8b781.png)
创建后的文件内容如下:
Java代码
![](http://yimengzhu.iteye.com/images/icon_star.png)
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<wsdl:definitions xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:tns="http://www.example.org/NewWSDLFile/" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" name="NewWSDLFile" targetNamespace="http://www.example.org/NewWSDLFile/">
<wsdl:types>
<xsd:schema targetNamespace="http://www.example.org/NewWSDLFile/">
<xsd:element name="NewOperation">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="in" type="xsd:string"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:element name="NewOperationResponse">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="out" type="xsd:string"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
</xsd:schema>
</wsdl:types>
<wsdl:message name="NewOperationRequest">
<wsdl:part element="tns:NewOperation" name="parameters"/>
</wsdl:message>
<wsdl:message name="NewOperationResponse">
<wsdl:part element="tns:NewOperationResponse" name="parameters"/>
</wsdl:message>
<wsdl:portType name="NewWSDLFile">
<wsdl:operation name="NewOperation">
<wsdl:input message="tns:NewOperationRequest"/>
<wsdl:output message="tns:NewOperationResponse"/>
</wsdl:operation>
</wsdl:portType>
<wsdl:binding name="NewWSDLFileSOAP" type="tns:NewWSDLFile">
<soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/>
<wsdl:operation name="NewOperation">
<soap:operation soapAction="http://www.example.org/NewWSDLFile/NewOperation"/>
<wsdl:input>
<soap:body use="literal"/>
</wsdl:input>
<wsdl:output>
<soap:body use="literal"/>
</wsdl:output>
</wsdl:operation>
</wsdl:binding>
<wsdl:service name="NewWSDLFile">
<wsdl:port binding="tns:NewWSDLFileSOAP" name="NewWSDLFileSOAP">
<soap:address location="http://www.example.org/"/>
</wsdl:port>
</wsdl:service>
</wsdl:definitions>
通过myeclipse帮我们创建的wsdl文档,我们观察它的结构发现:
一份WSDL文档definitions基本上有以下部分:
types,message,portType,binding,service。
知道包含了这些元素,我们先解释这些元素都是干嘛的,然后在说与java类的对应关系,那时候你会惊叹——“哦,原来是这样”。 好吧,不扯了。
types:定义了文档中要用的类型,由于web service跟编程语言是没有关系的,那么我们这里的类型必然是公用的,而XML是独立于平台的语言。所以,这里使用的是XML Schema的类型,在我们刚刚创建的文档中,他包含了两个元素,分别是newOperation和newOperationResponse,这两个元素都是复杂类型的,如果你对xml的schema还不怎么了解,可以到网上找找。必要的情况下,我也会写成简单的博客了。
message:通信消息数据结构的抽象类型化定义。(好吧,这个确实很抽象)
portType:对于某个访问入口点类型所支持操作的抽象集合
binding:包含了如何将抽象接口的元素(portType)转变为具体表示的细节,具体表示也就是指特定的数据格式和协议的结合;特定端口类型的具体协议和数据格式规范的绑定。
service:这是一个粗糙命名的元素,代表端口的集合;相关服务点的集合。
看完上面的定义,貌似很复杂,确实很不好理解。但是把他对应到java类的关系会好理解很多。下面的讲解都跟上面的文档关联起来讲的。
types这个跟xml的schema有关的。在schema定义里面的element是代表可以在xml文档中写的元素。牵强一点说,类似于我们java中的变量。
message,上面说的是数据结构的抽象化定义,其实就是参数的定义。在而参数的具体信息则由part表示,我们在上面的文档中已然看到在message元素的子元素中有part元素。而part元素就是我们的参数定义。不管输入参数还是输出参数,我们都是用一个part表示一个参数。好比我们的java类中。有一个方法有四个参数,那么我们就需要定义四个part来表示这四个参数,然后将这是个part定义在一个message中,而这个message则表示这个java方法的输入参数。 但是,我们在契约优先的开发模式中,有一种是基于封装的模式,也就是说,把所有的输入参数都当成一个复杂类型,而这个复杂类型用一个element表示。然后在将这个element作为part的属性。
这种方式也是可行的。甚至是推荐的。
portType:简单的说就是接口的定义。我们在java中,每一个接口可能会声明多个方法,对应的,在portType我们也可以声明多个方法,而方法的在WSDL中是用<operation>来表示的、
Java代码
![](http://yimengzhu.iteye.com/images/icon_star.png)
<wsdl:operation name="NewOperation">
<wsdl:input message="tns:NewOperationRequest"/>
<wsdl:output message="tns:NewOperationResponse"/>
</wsdl:operation>
operation可以包含input,output,fault。在我们创建的文档中包含了input和output分别代表输入参数和输出参数(即我们的返回值)。input的message属性就指向我们所定义的输入参数同理,output指的就是我们的返回值(引申义就是我们的代表返回值得message应该只有一个part)
参考:http://www.w3.org/TR/wsdl.html
相关文章推荐
- javaWebSerivice学习篇3-WSDL文档分析
- Web Service学习小结——WSDL文档中的节点与java类的联系
- java中XML操作:xml与string互转、读取XML文档节点及对XML节点增删改查
- 配置axis2环境变量,wsdl2ava命令自动生成JAVA代码,学会查看wsdl文档
- xStream完美转换XML、JSON xStream框架 xStream可以轻易的将Java对象和xml文档相互转换,而且可以修改某个特定的属性和节点名称,而且也支持json的转换; 前面有介
- Java获取XML节点总结之读取XML文档节点的方法
- 传智播客-web service(6)-即时发布与定制发布、wsdl文档与java对象
- 已有WSDL和XSD文档,利用JAVA来实现SOAP的客户端的调用
- java学习笔记之webservice(二)--WSDL文档及用myeclipse测试webservice
- javaWebSerivice学习篇4-WSDL文档结构图
- Java中如何对多节点的xml文档进行dom解析
- java解析wsdl文档获取方法与参数
- web service(6)-即时发布与定制发布、wsdl文档与java对象
- spark与java的联系
- 通过wsdl2java工具生成客户端段代码(wsdl2java -p cn.com.css.misps.graph.webservice.impl -d F:\src -all http://10.)
- java生成复杂word文档的完美解决方案
- Java-POI替换Word模板文档中的变量,生成Word文档
- Java读取word文档
- 一个很简单的Java调用WSDL示例
- [收藏转帖]JAVA对XML文档的四种解析方式