How to define Siebel CRM specific service fields (Fault, Header) in .WSDL, generated for a Siebel Inbound Web Service?

An external application, that consumes WSDL file, generated by Siebel CRM for an Inbound Web Service,  may need  to know details (schema) about Siebel CRM standard fields, appearing in SOAP message (request or response).

 
Siebel Web Services Framework use at run-time some standard fields in SOAP Header and SOAP Fault parts of SOAP message. Such definitions are not produced by WSDL Generator of Siebel User Interface (design-time).

This documents provides some usage examples, how scheme for some standard Siebel fields could be explicitly included in .WSDL file, after it has generated.

Solution

SOAP Fault: Siebel Details part


<?xml version="1.0" encoding="UTF-8"?>
<xsd:schema elementFormDefault="qualified" attributeFormDefaul="unqualified"
                      xmlns:xsd        ="http://www.w3.org/2001/XMLSchema"
           xmlns:siebelfault="http://www.siebel.com/ws/fault"
           targetNamespace  ="http://www.siebel.com/ws/fault">
 
   <xsd:element        name="siebdetail" type="siebelfault:siebdetail"/>
   <xsd:complexType    name="siebdetail">
       <xsd:sequence>
          <xsd:element name="logfilename" maxOccurs="1" minOccurs="0" type="xsd:string"/>
          <xsd:element name="errorstack"  maxOccurs="1" minOccurs="0" type="siebelfault:errorstack"/>
       </xsd:sequence>
    </xsd:complexType>

    <xsd:complexType   name="errorstack">
       <xsd:sequence>
          <xsd:element name="error" maxOccurs="unbounded" minOccurs="0" type="siebelfault:error"/>
       </xsd:sequence>
    </xsd:complexType>

    <xsd:complexType   name="error">
       <xsd:sequence>
          <xsd:element name="errorcode"   maxOccurs="1" minOccurs="0" type="xsd:string"/>
          <xsd:element name="errorsymbol" maxOccurs="1" minOccurs="0" type="xsd:string"/>
          <xsd:element name="errormsg"    maxOccurs="1" minOccurs="0" type="xsd:string"/>
       </xsd:sequence>
    </xsd:complexType>
</xsd:schema>

 

SOAP Header: Siebel WS-Security part (Siebel 7.7 onwards)


<?xml version="1.0" encoding="UTF-8"?>
<xsd:schema elementFormDefault="qualified" attributeFormDefault="unqualified"
         xmlns:xsd       ="http://www.w3.org/2001/XMLSchema"
         xmlns:siebelwsse="http://schemas.xmlsoap.org/ws/2002/07/secext"
         targetNamespace ="http://schemas.xmlsoap.org/ws/2002/07/secext">

    <xsd:element       name="Security" type="siebelwsse:Security"/>
    <xsd:complexType   name="Security">
       <xsd:sequence>
          <xsd:element name="UsernameToken" maxOccurs="1" minOccurs="0" type="siebelwsse:UsernameToken"/>
       </xsd:sequence>
    </xsd:complexType>

    <xsd:complexType   name="UsernameToken">
       <xsd:sequence>
          <xsd:element name="Username" maxOccurs="1" minOccurs="0" type="xsd:string"/>
          <xsd:element name="Password" maxOccurs="1" minOccurs="0" type="xsd:string"/>
       </xsd:sequence>
     </xsd:complexType>
</xsd:schema>


SOAP Header: Siebel Web Service Session Management part (Siebel 7.8 onwards)

<?xml version="1.0" encoding="UTF-8"?>
<xsd:schema elementFormDefault="qualified" attributeFormDefault="unqualified"
            xmlns:xsd      ="http://www.w3.org/2001/XMLSchema"
            xmlns:siebelwsh="http://siebel.com/webservices"
            targetNamespace="http://siebel.com/webservices">

    <xsd:element    name = "SessionToken" type="xsd:string" />

    <xsd:element    name = "UsernameToken" type="siebelwsh:SiebelUsernameToken" />
    <xsd:simpleType name = "SiebelUsernameToken">
       <xsd:restriction base="xsd:string"/>
    </xsd:simpleType>

    <xsd:element    name = "PasswordText" type="siebelwsh:SiebelPasswordText" />
    <xsd:simpleType name = "SiebelPasswordText">
       <xsd:restriction base="xsd:string"/>
    </xsd:simpleType>

    <xsd:element    name = "SessionType" type="siebelwsh:SiebelSessionType" />
    <xsd:simpleType name = "SiebelSessionType">
       <xsd:restriction base="xsd:string">
          <xsd:enumeration value="None"/>
          <xsd:enumeration value="Stateless"/>
          <xsd:enumeration value="Statefull"/>
          <!--
             Siebel 8.1.1 onwards:
           --->
          <xsd:enumeration value="ServerDetermine"/>
       </xsd:restriction>
    </xsd:simpleType>

    <!--
         Siebel 8.1.1 onwards (application internal use):
     --->
    <xsd:element name = "LangCode"     type="xsd:string" />
    <xsd:element name = "Locale"       type="xsd:string" />
    <xsd:element name = "CurrencyCode" type="xsd:string" />

</xsd:schema>

Usage example (post-edition of WSDL, generated for a Siebel Inbound Web Service)

It is presumed here, that:
   - the SOAP Fault part is stored in the "SiebelFault.xsd" file, in the same folder as the .WSDL
   - the SOAP Header part for Siebel Web Service Session Management is stored in the "SiebelWSHeader.xsd" file, in the same folder as the .WSDL
    - the Web Service name is: "Svc1"
   - the URI of the Inbound Web Service is: "http://my.site.com/Svc1"
   - the Web Service port name of HTTP Transport is: "Default"
   - the Web Service method(operation) name is: "Execute"
   - the SOAP Binding is: rpc/literal
   - the URL to virtual folder of the EAI Object Manager on Siebel Web Server is: "http://my.site.com/eai_enu"

<?xml version="1.0" encoding="UTF-8"?>
<definitions 
        xmlns                     = "http://schemas.xmlsoap.org/wsdl/"
        xmlns:xsd             = "http://www.w3.org/2001/XMLSchema"
        xmlns:soap          = "http://schemas.xmlsoap.org/wsdl/soap/"
        xmlns:soapenc    ="http://schemas.xmlsoap.org/soap/encoding/"
        xmlns:soapenv    ="http://schemas.xmlsoap.org/soap/envelope/"
        xmlns:siebelwsh   ="http://siebel.com/webservices"
        xmlns:siebelfault ="http://www.siebel.com/ws/fault"
        xmlns:xsdLocal0 ="http://my.site.com/Svc1"
        xmlns:tns              ="http://my.site.com/Svc1"
        targetNamespac  ="http://my.site.com/Svc1">

       <!--
             Import of  Siebel scheme for parts in  SOAP Fault and SOAP Header
       -->
      <import namespace = "http://www.siebel.com/ws/fault" location = "SiebelFault.xsd"/>
       <import namespace = "http://siebel.com/webservices" location = "SiebelWSHeader.xsd"/>

       . . .

       <!--
            Definition of message types for Siebel part  in SOAP Fault and SOAP Header
        -->
       <message name="SiebelFault">
               <part name="siebdetail" element="siebelfault:siebdetail"/>
       </message>


       <message name="SiebelWSHeader">
             <part name="UsernameToken" element="siebelwsh:UsernameToken"/>
             <part name="PasswordText"     element="siebelwsh:PasswordText"/>
             <part name="SessionType"       element="siebelwsh:SessionType"/>
             <part name="SessionToken"    element="siebelwsh:SessionToken"/>
       </message>


        . . .

      <portType name="Default">

              <operation name="Execute">

                  . . .

                 <!--
                      Definition of faut message for Siebel part in SOAP Fault
                   -->
                  <fault message="tns:SiebelFault" name="SiebelFault"/>
             </operation>

              . . .

     </portType>

     . . .

     <binding name="Default" type="tns:Default">
          <soap:binding transport="http://schemas.xmlsoap.org/soap/http" style="rpc"/>

          <operation name="Execute">
                 <soap:operation soapAction="rpc/http://my.site.com/Svc1:Execute"/>

                   <input>
                          <soap:body namespace="http://my.site.com/Svc1" use="literal"/>

                           <!--
                                Declaration of Siebel parts in SOAP Header (request)
                            -->
                           <soap:header namespace="http://siebel.com/webservices"  use="literal" message="tns:SiebelWSHeader" part="UsernameToken"/>
                           <soap:header namespace="http://siebel.com/webservices"  use="literal" message="tns:SiebelWSHeader" part="PasswordText"/>
                           <soap:header namespace="http://siebel.com/webservices" use="literal" message="tns:SiebelWSHeader" part="SessionType"/>
                           <soap:header namespace="http://siebel.com/webservices" use="literal" message="tns:SiebelWSHeader" part="SessionToken"/>


                    </input>

                    <output>
                              <soap:body namespace="http://my.site.com/Svc1" use="literal"/>

                               <!--
                                    Declaration of Siebel parts in SOAP Header (response)
                                -->
                               <soap:header namespace="http://siebel.com/webservices" use="literal" message="tns:SiebelWSHeader" part="SessionToken"/>

                     </output>

                   <!--
                       Declaration of Siebel part in SOAP Fault (fault response)
                    -->
                   <fault name="SiebelFault">
                         <soap:fault namespace="http://www.siebel.com/ws/fault" use="literal" name="SiebelFault"/>
                   </fault>


                   . . .

           </operation>

           . . .

      </binding>

      . . .

    <service name="Svc1">
         <port binding="tns:Default" name="Default">
             <soap:address location="http://my.site.com/eai_enu/start.swe?SWEExtSource=WebService&SWEExtCmd=Execute&WSSOAP=1"/>
         </port>

         . . .

     </service>

     . . .

</definitions>
Tags