`
ootabc
  • 浏览: 108247 次
  • 性别: Icon_minigender_1
  • 来自: 湖南
社区版块
存档分类
最新评论

CXF详解五

阅读更多

CXFWSDL

WSDL 是一种XML Application,他将Web服务描述定义为一组服务访问点,客户端可以通过这些服务访问点对包含面向文档信息或面向过程调用的服务进行访问(类似 远程过程调用)WSDL首先对访问的操作和访问时使用的请求/响应消息进行抽象描述,然后将其绑定到具体的传输协议和消息格式上以最终定义具体部署的服 务访问点。相关的具体部署的服务访问点通过组合就成为抽象的Web服务。

WSDL 文档将Web服务定义为服务访问点或端口的集合。在 WSDL 中,由于服务访问点和消息的抽象定义已从具体的服务部署或数据格式绑定中分离出来,因此可以对抽象定义进行再次使用:消息,指对交换数据的抽象描述;而端口类型,指操作的抽象集合。用于特定端口类型的具体协议和数据格式规范构成了可以再次使用的绑定。将Web访问地址与可再次使用的绑定相关联,可以定义一个端口,而端口的集合则定义为服务。因此,WSDL 文档在Web服务的定义中使用下列元素:

l  Types - 数据类型定义的容器,它使用某种类型系统(一般地使用XML Schema中的类型系统)

l  Message - 通信消息的数据结构的抽象类型化定义。使用Types所定义的类型来定义整个消息的数据结构。

l  Operation - 对服务中所支持的操作的抽象描述,一般单个Operation描述了一个访问入口的请求/响应消息对。

l  PortType - 对于某个访问入口点类型所支持的操作的抽象集合,这些操作可以由一个或多个服务访问点来支持。

l  Binding - 特定端口类型的具体协议和数据格式规范的绑定。

l  Port - 定义为协议/数据格式绑定与具体Web访问地址组合的单个服务访问点。

l  Service - 相关服务访问点的集合。

ü  WSDL描述

<!--这里的name是发布的service类名 + "Service", targetNamespace 是取决于发布类所在的包 --> 
<wsdl:definitions name="HelloService" targetNamespace="http://service/">
  <!--types 的作用是定义输入输出参数都是什么样子的(类型) -->
<wsdl:types>
	<!-- targetNamespace 是取决于发布类所在的包 --> 
<xs:schema elementFormDefault="unqualified" targetNamespace=http://service/ version="1.0">
<!--输入参数名字为‘sayHello’,类型是复杂类型‘sayHello’,在下面定义 -->
<xs:element name="sayHello" type="tns:sayHello"/>
   		 <!--输出参数名字为‘sayHelloResponse’,类型是复杂型sayHelloResponse, 在下面定义-->  
<xs:element name="sayHelloResponse" type="tns:sayHelloResponse"/>
<xs:element name="user" type="tns:user"/>
<!--输入参数类型的具体定义:包含一个element,名字为arg0,类型为user-->
<xs:complexType name="sayHello">
<xs:sequence>
<xs:element minOccurs="0" name="arg0" type="tns:user"/>
</xs:sequence>
</xs:complexType>
	<!-- 这里的name 是自动生成的。当然,也可以在代码中指定名字。
	Public @WebResult(name="sayHelloResult") User sayHello(@WebParam(name="name") User user)
	       --> 
<xs:complexType name="user">
<xs:sequence>
<xs:element minOccurs="0" name="name" type="xs:string"/>
<xs:element minOccurs="0" name="age" type="xs:string"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="sayHelloResponse">
<xs:sequence>
<xs:element minOccurs="0" name="return" type="tns:user"/>
</xs:sequence>
</xs:complexType>
</xs:schema>
</wsdl:types>
<!--这个message代表输入信息。这个输入信息的类型是sayHello,在<types>中定义过  -->
<wsdl:message name="sayHelloResponse">
<wsdl:part element="tns:sayHelloResponse" name="parameters">
   </wsdl:part>
</wsdl:message>
<!--这个message代表输出信息。这个输出信息的类型是sayHelloResponse,在<types>中定义过 --> 
<wsdl:message name="sayHello">
<wsdl:part element="tns:sayHello" name="parameters">
   </wsdl:part>
</wsdl:message>
<!--portType 就是我们定义的接口。一个接口对应一个port -->
<wsdl:portType name="Hello">
<wsdl:operation name="sayHello">
<wsdl:input message="tns:sayHello" name="sayHello"> </wsdl:input>
<wsdl:output message="tns:sayHelloResponse" name="sayHelloResponse"> </wsdl:output>
</wsdl:operation>
</wsdl:portType>
  <!--把接口进行 soap 绑定-->
<wsdl:binding name="HelloServiceSoapBinding" type="tns:Hello">
<!-- 这里指明绑定的协议为 http,style为document--> 
<soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/>
<wsdl:operation name="sayHello">
<!-- 具体方法的绑定类型定义-->
<soap:operation soapAction="" style="document"/>

<wsdl:input name="sayHello">
    <!--literal文本  -->
<soap:body use="literal"/>
</wsdl:input>

<wsdl:output name="sayHelloResponse">
    <!--literal文本  -->
<soap:body use="literal"/>
</wsdl:output>
</wsdl:operation>
</wsdl:binding>
<!--把n个接口放到一起,总称为一个service --> 
<wsdl:service name="HelloService">
   <!--这里一个port就是一个接口。对应的绑定刚刚定义过  -->
<wsdl:port binding="tns:HelloServiceSoapBinding" name="HelloPort">
        <!--这个接口的地址  -->
<soap:address location="http://localhost:8080/testcxf/ws/hello"/>
</wsdl:port>
</wsdl:service>
</wsdl:definitions>

 

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics