Tibco soap rpc模式

在tibco 中就有soap 的例子

文件是: \tibco\bw\5.6\examples\activities\soap\ 

一般如果Style 是 Document 模式, 如果是RPC 模式呢? 并且还包含Header 呢? 

最近就遇到了这样一个接口是这种模式的, 最蛋疼的是WSDL 报文完全无法直接使用, 查了很多资料和尝试了很多次, 终于搞出了符合的WSDL 文档!!!!

关于命名空间的一些细节就不说明了!!


<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:tbi="http://www.xxx.com.cn/">
   <soapenv:Header>
     <security>
       <username>aaa</username>
       <password>bbb</password>
     </security>

   </soapenv:Header>
   <soapenv:Body>
      <tbi:exec>
         <receiveServiceRequest>
             <aliasName>String</aliasName>
             <comment>String</comment>
             <description>资料不完整!</description>
         </receiveServiceRequest>

      </tbi:exec>
   </soapenv:Body>
</soapenv:Envelope>

这个是在soapUI 可以测试通过的请求报文!

-----------------------------------------------------华丽的分割线----------------------------------------------------------

   <soapenv:Header>
     <security>
       <username>aaa</username>
       <password>bbb</password>
     </security>

   </soapenv:Header>

tibco 控件里面的input :

Tibco soap rpc模式_第1张图片


WSDL 资源:

     <xsd:schema xmlns:tbi="http://www.xxx.com.cn/"
      attributeFormDefault="qualified" elementFormDefault="qualified" targetNamespace="http://www.xxx.com.cn/">
            <xsd:element name="security">
                <xsd:complexType>
                    <xsd:sequence>
                        <xsd:element name="username" type="xsd:string"/>
                        <xsd:element name="password" type="xsd:string"/>
                    </xsd:sequence>
                </xsd:complexType>        
            </xsd:element>  
     </xsd:schema>

 <wsdl:message name="requestSOAPHeader">
      <wsdl:part name="security" element="security"/>
   </wsdl:message>

 <soap:operation style="rpc" soapAction=""/>
         <wsdl:input>
            <soap:body use="literal"/>
        <soap:header use="literal" message="tbi:requestSOAPHeader" part="security"/>
         </wsdl:input>

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

注意点: 这里header 用的其实还是Document 模式, 而非rpc 模式!!!!


----------------------------------------------华丽的分割线------------------------------------------------------------------

   <soapenv:Body>
      <tbi:exec>
         <receiveServiceRequest>
             <aliasName>String</aliasName>
             <comment>String</comment>
             <description>资料不完整!</description>
         </receiveServiceRequest>

      </tbi:exec>
   </soapenv:Body>

tibco 控件里面的input:


WSDL 资源:

     <xsd:schema xmlns:tbi="http://www.xxx.com.cn/"
      attributeFormDefault="qualified" elementFormDefault="qualified" targetNamespace="http://www.xxx.com.cn/">    
                <xsd:complexType name="receiveServiceRequest">   <!-- 这里是定义了一个复杂类型,而不是一个element -->
                    <xsd:sequence>                 
                        <xsd:element name="aliasName" type="xsd:string"/>
                        <xsd:element name="comment" type="xsd:string"/>
                        <xsd:element name="description" type="xsd:string"/>
                    </xsd:sequence>
                </xsd:complexType>    
     </xsd:schema>

 <wsdl:message name="execRequest">
      <wsdl:part name="receiveServiceRequest" type="tbi:receiveServiceRequest"/> <!--RPC 是认name 属性的, 而不是element 属性 -->
   </wsdl:message>

 <wsdl:portType name="SOAServicePort">
      <wsdl:operation name="exec">
         <wsdl:input message="tbi:execRequest"/>
         <wsdl:output message="tbi:execResponse"/>
      </wsdl:operation>
   </wsdl:portType>

注意点:

如果是<wsdl:message name="execRequest">
              <wsdl:part name="receiveServiceRequest" element="tbi:receiveServiceRequest"/>
          </wsdl:message>

那么tibco 请求的报文是:

   <soapenv:Body>
      <tbi:exec>
         <receiveServiceRequest>

          <receiveServiceRequest>
             <aliasName>String</aliasName>
             <comment>String</comment>
             <description>资料不完整!</description>

        </receiveServiceRequest>

         </receiveServiceRequest>
      </tbi:exec>
   </soapenv:Body>

多了一层的节点, 这个要特别注意, 如果是Document 模式, 就不会多出这层节点, 这也是PRC 和 Document 模式很大一个区别!!

---------------------------------------------------------------------------------------------------------------------------------------------------------------------

use 属性也是影响WSDL 报文的设置, 该接口的请求或返回报文中的元素是否有"type" 属性, 如<replyCode xsi:type="xsd:string">OK</replyCode>. 有的话, 那么use="encoded", 否则use="literal", 刚好这个接口的返回报文的 use="encoded",

WSDL 资源设置为:

         <wsdl:output>
            <soap:body use="encoded" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"namespace="http://gd.XXX.com" parts="receiveServiceResponse"/>
         </wsdl:output>









你可能感兴趣的:(Tibco soap rpc模式)