WSDL元素解析

 参考链接:http://www.blogjava.net/orangelizq/archive/2008/04/22/194903.html

名词解析:

       有效负载:soap的body内容。

       抽象类型定义(abstract type definitions):即在SOAP schema中已经定义的类型(

xmlns:soapenc

)。

)。

 

1、 <wsdl:definitions>重要元素的定义

     Target namespace :表示该文件定义Node的命名空间。比如:该文件定义的Binding,message,portType,types的名字(以免与其他文件定义的Node name一样的时候,可以区分)。

     Prefix :表示前面的Target namespace在该文档的间写。当引用文档前面定义的Node,用Prefix+":"+nodeName来指代前面定义的Node。

     如何定义wsdl:definitions:在本文中,prefix是tns.

......................

     如何使用prefix

...................................................... .............................................

 

2、<wsdl:service>定义

 

       一个对外提供的服务,如果通过不同的方式被访问,就必须提供共用同一个portType的不同的port.

 

       对于同一个portType(相当于服务的方法),可以通过不同的协议被其他程序(JMS,Soap,http)调用。同一个portType,如果同时用SOAP和JMS方式被调用,必须定义两个不同的binding和port.

 3、<wsdl:port>

      一个port只能定义一个address,而且不能定义其他binding的属性(除了Address)。

 

 

       <wsdl:port>:定义一个binding的endpoint.

                  binding属性引用了一个前面定义的binding.

                  soap:Address节点提供给其他程序调用的一个endpoint.

      注意:假如一个service提供了不同的port(这些port却共用同一个portType),他们的address或binding有可能不一样。

 

      如何声明服务基于HTTP协议

My first service

      如何声明服务基于JMS协议

4、<wsdl:binding>

     定义了以下几个内容:

     (1)定义了operation name

      (2)  通过定义PortType 来定义operation 的input 和output message format.

      (3)  定义了传输消息(SOAP)的文本格式

      (4)  定义了网络传输协议(http,smtp,jms)或消息传输协议(soap,mine),比如可以讲PortType与SOAP/HTTP绑定,也可以将MIME/SMTP绑定。

 

      (1)有两个属性(style,transport)

             style描述了服务调用方式,即rpc||document.rpc和document的差别在于soap消息是否包含了operation name.如果是rpc样式,要执行的方法也是有效负载的根目录。

------------style="document"的soap文本不需要说明operation name-------------------- Emmy ---------------style="rpc"-------------------- Emmy

            transport:指定了soap消息传输的协议(soap/http,soap/smtp,soap/jms)

-----------soap消息传输基于http协议------------------------ -----------soap消息传输基于smtp协议-------------------------

5、

             由于方法的多态性,所以单纯的一个name属性不能完全indentify一个operation,还需要input和output。binding定义的opeation name,input name,output name会和portType相对应的节点唯一对应。

            可以的子节点有,,,等。

            有两个属性:style和soapAction。

              style和wsdl:binding的style属性一样,有rpc||document两种。

              soapAction:如果soap是基于http网络传输的话,就一定要有soapAction这个属性。且这个属性的值会放到request的header里面,且必须与wsdl定义的soapAction值一样。

 

               req.setRequestHeader('SOAPAction','urn:getPrice');

              

         

 (二)SOAP 元素解析

1、

      说明了input,out,fault部分在SOAP BODY的structure.即定义了如何解析message的part部分。Message的part部分是简单抽象类型abstract type definitions(type="........"), or concrete schema definitions抽象具体的schema定义(element="........")

        encodingStyle属性的用法:

        如果Message part是抽象类型定义(type="........"),将根据内部的所定义的encodingStyle的属性来构建和解析SOAP消息类型(即类型将根据一种encoding style所定义的一些规则进行序列化。每一种encodingStyle通过一系列的URIs来指定,比如:每一种encoding style通过一系列的URIs来指定,如SOAP规范http://schemas.xmlsoap.org/soap/encoding/

............... .............................................. //xsd:anyType将根据一种encoding style所定义的一些规则进行序列化。

 

        use属性用法:

        如果use="encoded",Message Part内容是采用标准编码来定义,即是否用XSD定义的原型类型(String,int,boolean等)来定义, 构造soap:body的具体消息

        如果use="literal",Message Part内容将通过Element或type来引用Types中的内部定义的schema定义。

 

 

如果use属性值为encoded,那么每个message part将通过type属性指定一个抽象类型。通过encodingStyle属性所表示的编码规范,这些抽象类型将用于构造一个具体的消息。part names, types a以及 value of the namespace attribute将作为编码的输入,其中的namespace attribute仅仅在内容中被应用,没有被abstract types显式定义。如果所指定的encoding style允许variations(变化)它的格式,那么所有的variations(变化)都将被支持。

如果use属性值为literal,那么每个message part将通过element或者type属性指向一个具体的schema定义。在第一种情况下,part中的element 所指向的内容将直接位于Body元素下(对于document style bindings),或者位于Body元素下的wrapper element元素中(对于rpc style)。在第二种情况下,part中的type所指向的内容将作为其所对应元素的schema类型。  

 

        一个use="encoded"  ,encodingStyle="....."的WSDL文档。

 

SOAP的发送消息:jsx1:getAttemptHistory 的命名空间和的namespace是一样的。

 

2558956

 

SOAP的接收消息

Raymone Jeremy Emmy

你可能感兴趣的:(WSDL元素解析)