# Description: Detailed analysis of SOAP and WSDL versions with supported clients # Author: Karunakar Bayyapu # Email: karun@cbs.dtu.dk # Version: 1.2 ws1 # Date: 2012-04-23 ###Document Starts here ### Thhis analysis made, decribed, tested and analyzed with SignalP service however ### this should be same for all services at CBS, DTU We make endpoint with SOAP 1.1, and a WSDL 1.1, with SOAP 1.1 defined versions since some clients support only SOAP1.1(XML::Compile/Mono C#) and some are SOAP 1.2 version, for the detailed analysis please go through it. SOAP: ----- SOAP is a simple XML-based protocol to let applications exchange information over HTTP i.e access a Web Service to remotely make method calls upon classes and objects that exist on a remote server. SOAP deals with platform independent data format(XML) to request and receive data from the server. A SOAP message is an ordinary XML document containing the following elements: An Envelope element that identifies the XML document as a SOAP message A Header element that contains header information A Body element that contains call and response information A Fault element containing errors and status information SOAP 1.2 is an extended version of SOAP 1.1, it does everything that SOAP 1.1 offers. SOAP 1.2 provides clear processing model and it is based on XML infoset. It has no dependency on the underlying transport protocol. E.g. we can the specification of a binding to an underlying protocol to determine which XML serialization is used in the underlying protocol data units. The HTTP binding framework specifies the transport protocols, thus SOAP 1.2 is protocol independent. It also integrates well with HTTP protocol e.g. both HTTP GET and POST operations, this enables SOAP 1.2 can take the benefits of the existing web infrastructure. It has better support for web standard such as XML infoset, XML Base, XML schema 1.0 as well as internationalization. Examples of SOAP request's/response's Action and content-type header in different versions SOAP11/SOAP1.1: --------------- Request soapAction="http://www.cbs.dtu.dk/ws/WSSignalP_3_1_wss#runService" ...... Response HTTP/1.1 200 OK Content-Type: text/xml; ...... SOAP12/SOAP1.2 -------------- Request Content-Type: application/soap+xml; action="http://www.cbs.dtu.dk/ws/WSSignalP_3_1_wss#runService" ...... Response HTTP/1.1 200 OK Content-Type: application/soap+xml; ...... WSDL 1.1: --------- WSDL is extensible to allow description of endpoints and their messages regardless of what message formats or network protocols are used to communicate. The WSDL 1.1 bindings support SOAP 1.1, however we can upgrade to support SOAP1.2. WSDL 1.1 with SOAP1.1 and SOAP1.2: ---------------------------------- Structurally, we can add support of SOAP 1.2 in WSDL1.1 document in abstract WSDL part define types, messages and portTypes. To support SOAP1.2, need to update SOAP1.2 compliant 'bindings' and 'service definitionsin' in existing wsdl file then the clients will have to make the choice to use SOAP1.1 or SOAP1.2. We can use common endpoint for SOAP1.1 and SOAP1.2 and here is the common wsdl 1.1 end point section. Here: soapenv="http://schemas.xmlsoap.org/wsdl/soap/" soap12="http://schemas.xmlsoap.org/wsdl/soap12/" WSDL 2.0: --------- WSDL 1.2 was renamed WSDL 2.0 because of its substantial differences from WSDL 1.1. Some of these changes include: * The definitions element is renamed to description. * The portType element is renamed to interface. * The port element is renamed to endpoint. * Message constructs are removed. The developed clients at CBS are tested with following SOAP and WSDL versions. List of Web services frameworks: --------------------------------------------------------------------------------------- Library Name Platform SOAP 1.1 SOAP 1.2 WSDL 1.1 WSDL 2.0 WSDL1.1(SOAP1.1&SOAP1.2) --------------------------------------------------------------------------------------- SOAP::Lite Perl yes yes yes yes yes XML::Compile Perl yes yes yes yes no suds Python yes no yes no yes NuSOAP PHP yes yes yes yes no C# Mono yes no yes yes no Apche Axis Javabeans yes no yes no no gSOAP C++ yes? yes? yes? yes? - --------------------------------------------------------------------------------------- Therefore we conclude that we should make an endpoint with SOAP 1.1, and a WSDL 1.1, with SOAP 1.1 defined. We will detect SOAP protocol in the endpoint, but reject 1.2 requests (for now). SOAP 1.1 Envelop formats at CBS: -------------------------------- We are using these following SOAP envelops(Request/Response/Fault) formats at CBS. SOAP Envelope Request: ---------------------- Note: The method prefix could be anything(eg: tns:runService). The prefixes change according to the client request. For example SOAPUI client sends method prefix as 'wss' and in response we can see 'wss' as method prefix. In request if there is no prefix then we can get 'nss'(defined by us) in the response euk EGFR_HUMAN MRPSGTAGAALLALLAALCPASRALEEKKVCQGTSNKLTQLGTFEDHFLSLQRMFNNCEV VLGNLEITYVQRNYDLSFLKTIQEVAGYVLIALNTVERIPLENLQIIRGNMYYENSYALA VLSNYDANKTGLKELPMRNLQEILHGAVRFSNNPALCNVESIQWRDIVSSDFLSNMSMDF SOAP Envelope Response: ----------------------- 529B6464-264A-11E1-8E1E-FE6B84FDE965 Wed Dec 14 12:54:05 2011 PENDING SOAP Envelope Fault message: ---------------------------- SOAP::SERVER::LOADING PROBLEM Unable to process method Quasi::service::www.cbs.dtu.dk::ws::WSSignalP_3_1_wss : Can't locate object method "new" via package "Quasi::service::www.cbs.dtu.dk::ws::WSSignalP_3_1_wss" (perhaps you forgot to load "Quasi::service::www.cbs.dtu.dk::ws::WSSignalP_3_1_wss"?) at /usr/opt/quasi2/lib/perl/Quasi.pm line 217. Error Identified as: Unable to load a file/module/package for http://www.cbs.dtu.dk/ws/WSSignalP_3_1_wss service 500 Internal Server Error ###Document ends here