当前位置: 代码迷 >> Web前端 >> WebServie中wsdl资料的定义
  详细解决方案

WebServie中wsdl资料的定义

热度:106   发布时间:2012-12-23 11:28:15.0
WebServie中wsdl文件的定义

WSDL(Web Services Description Language)即WEB服务描述语言,我们可以通过XML的格式定义了Java中方法的调用和SOAPMessage的对应关系,一般在开发中,我们都必须定义WSDL文件,作为规范,以便客户端和服务器达成一致,更加方便调用。

?

在WSDL文件中定义的几个重要元素分别是:

types(用来定义message的类型)

Message(定义Message的内容),

PortType(指定对应的接口),

binding(定义每个方法对于的Message),

service(定义服务类),

?

下面看下一个完整的WSDL文件的定义:

<?xml version="1.0" encoding="UTF-8" ?>
<wsdl:definitions name="VoteImplService"
	targetNamespace="http://service.lyl.com/" xmlns:ns1="http://schemas.xmlsoap.org/soap/http"
	xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:tns="http://service.lyl.com/"
	xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:xsd="http://www.w3.org/2001/XMLSchema">


	<!-- 定义消息类型 -->
	<wsdl:types>
	
		<xsd:schema targetNamespace="http://service.lyl.com/">
		
			<xsd:element name="vote" type="tns:vote"></xsd:element>
			<xsd:element name="voteResponse" type="tns:voteResponse"></xsd:element>
			<xsd:complexType name="vote">
				<xsd:sequence>
					<xsd:element name="uname" type="xsd:string"></xsd:element>
					<xsd:element name="point" type="xsd:string"></xsd:element>
				</xsd:sequence>
			</xsd:complexType>
			
			<xsd:complexType name="voteResponse">
				<xsd:sequence>
					<xsd:element name="voteResult" type="xsd:string"></xsd:element>
				</xsd:sequence>
			</xsd:complexType>
			
		<!-- 
		当我的定义的类型多个时候,可以单独把类型在一个schema文件中定义好然后引入进来 
		具体实现有两种方式:import 引入或者include引入(在schema中加入 targetNamespace="http://service.lyl.com/")
		-->
	   	<!-- <xsd:import  namespace="http://service.lyl.com/" schemaLocation="example.xsd"></xsd:import> -->
		<!--<xsd:include schemaLocation="example.xsd"></xsd:include>  -->
		
		</xsd:schema>
			
	</wsdl:types>

	<!-- 
		定义消息,每一个方法对于两个消息:一个输入(请求)消息,一个输出(响应)消息
		在part元素中引入前面定义的元素,name总是parameters
	 -->
	 
	<wsdl:message name="voteResponse">
		<wsdl:part element="tns:voteResponse" name="parameters" />
	</wsdl:message>

	<wsdl:message name="vote">
		<wsdl:part element="tns:vote" name="parameters" />
	</wsdl:message>

	<wsdl:portType name="IVote">

		<wsdl:operation name="vote">
			<wsdl:input message="tns:vote" name="vote" />
			<wsdl:output message="tns:voteResponse" name="voteResponse" />
		</wsdl:operation>
	</wsdl:portType>

	<!-- 定义绑定 方法的传播方式,基于soapMessage方式-->
	<wsdl:binding name="VoteImplPortBinding" type="tns:IVote">
		<soap:binding style="document"
			transport="http://schemas.xmlsoap.org/soap/http" />
			
		<wsdl:operation name="vote">
			<soap:operation soapAction="" style="document" />
			
			<wsdl:input name="vote">
				<soap:body use="literal" />
			</wsdl:input>
		
			<wsdl:output name="voteResponse">
				<soap:body use="literal" />
			</wsdl:output>
		</wsdl:operation>
	</wsdl:binding>
	
	
	<!-- 定义服务的名字和前面指定的名字一致-->
	<wsdl:service name="VoteImplService">
		<wsdl:port binding="tns:VoteImplPortBinding" name="VoteImplPort">
			<soap:address location="http://localhost:8080/TestCXF/services/Vote" />
		</wsdl:port>
	</wsdl:service>
</wsdl:definitions>

?

?

外部引入的example.xsd文件:

?

<?xml version="1.0" encoding="UTF-8"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
		targetNamespace="http://service.lyl.com/" 
		xmlns:tns="http://service.lyl.com/" 
		elementFormDefault="qualified">
		<xsd:element name="vote" type="tns:vote"></xsd:element>
			<xsd:element name="voteResponse" type="tns:voteResponse"></xsd:element>
			<xsd:complexType name="vote">
				<xsd:sequence>
					<xsd:element name="uname" type="xsd:string"></xsd:element>
					<xsd:element name="point" type="xsd:string"></xsd:element>
				</xsd:sequence>
			</xsd:complexType>
			
			<xsd:complexType name="voteResponse">
				<xsd:sequence>
					<xsd:element name="voteResult" type="xsd:string"></xsd:element>
				</xsd:sequence>
			</xsd:complexType>
</xsd:schema>

?

  相关解决方案