之前翻译过wsdl的简介,接下来做个深入的了解。以下内容基本取自w3cschool
wsdl是使用标准化语言描述web service的文件。
wsdl的主要结构是类似这样的:
<definitions>
<types>
definition of types........
</types>
<message>
definition of a message....
</message>
<portType>
definition of a port.......
</portType>
<binding>
definition of a binding....
</binding>
</definitions>
portType:
<portType>定义了服务的操作,类似于程序中某个模块或者类。是一系列operation的集合。
下面是一个简单的wsdl实例:
<message name="getTermRequest">
<part name="term" type="xs:string"/>
</message>
<message name="getTermResponse">
<part name="value" type="xs:string"/>
</message>
<portType name="glossaryTerms">
<operation name="getTerm">
<input message="getTermRequest"/>
<output message="getTermResponse"/>
</operation>
</portType>
这个wsdl里面定义了一个端口glossaryTerms,端口有个操作是getTerm,输入信息getTermRequest和输出消息getTermResponse。message标签定义了信息的格式。
binding:
<binding>为端口定义消息格式和协议
<message name="getTermRequest">
<part name="term" type="xs:string" />
</message>
<message name="getTermResponse">
<part name="value" type="xs:string" />
</message>
<portType name="glossaryTerms">
<operation name="getTerm">
<input message="getTermRequest" />
<output message="getTermResponse" />
</operation>
</portType>
<binding type="glossaryTerms" name="b1">
<soap:binding style="document"
transport="http://schemas.xmlsoap.org/soap/http" />
<operation>
<soap:operation
soapAction="http://example.com/getTerm" />
<input>
<soap:body use="literal" />
</input>
<output>
<soap:body use="literal" />
</output>
</operation>
</binding>
binding包含两个属性:name 和 type
name是binding的名称,type指定绑定的端口。上例中binding指向的是glossaryTerms端口。
soap:binding中有两个属性:style和transport。
style可能出现的值:rcp或者document。
transport指定使用的协议,这里是http。
soap:operation
wsdl中定义的每个操作,都需要相应的soap定义。
对输入和输出,需要定义编码格式。
service和port的例子:
<wsdl:service name="HelloWorldImplService">
<wsdl:port binding="tns:HelloWorldImplServiceSoapBinding" name="HelloWorldImplPort">
<soap:address location="http://localhost:8080/helloWorld" />
</wsdl:port>
</wsdl:service>
service:
port的集合。name属性定义了service的名称
port:
指定使用哪个绑定。为endpoint指定访问点。
上例可解释为:在这个叫做HelloWorldImplService的服务中,提供一个访问入口,地址是http://localhost:8080/helloWorld。使用的消息模式是前面binding的HelloWorldImplServiceSoapBinding所定义的。
types:
数据类型的定义。
wsdl基本概念介绍完,再说studio中对service的创建和操作。
studio中的service,基本是围绕一个wsdl文件,建立实现服务的job。studio的一个功能就是create and edit wsdl file graphically。
components的手册上有一句:The Jobs, which are built upon the components under the ESB/Web Services family, act as the implementations of web services。ESB/Web service包下的组件构成的job是service的实现。
具体操作可以看在线教程:http://www.talendforge.org/tutorials/tutorial.php?language=english&idTuto=100
教你怎么用studio建service,还有provider/Consumer Job. 原来我不明白这俩job是干什么的,现在懂了,他俩之间,还有和wsdl的关系如下图所示:
provider job里面”包裹“着对service的调用。这就是为什么只有启动了provider job之后,consumer job才能发起请求。