# 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