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>
?