W3C home > Mailing lists > Public > xml-dist-app@w3.org > October 2001

Re: SOAP concerns

From: Roger L. Costello <costello@mitre.org>
Date: Fri, 12 Oct 2001 08:06:28 -0400
Message-ID: <3BC6DCC4.32860895@mitre.org>
To: "'xml-dist-app@w3.org'" <xml-dist-app@w3.org>
CC: Marwan Sabbouh <ms@mitre.org>, "Denning,Paul B." <pauld@mitre.org>
Hi Folks,

I have a couple of questions/concerns:

1. My observation is that SOAP is following the same model as HTTP
messages, that is, a header followed by a payload:

The general form of an HTTP message is:

   HTTP Headers
   HTTP Payload 

The general form of a SOAP message is:

   SOAP Headers
   SOAP Body (Payload)

When SOAP is nested within an HTTP message we have:

   HTTP Headers
   <soap:Envelope>
      SOAP Headers
      SOAP Body
   </soap:Envelope>

However, unlike HTTP, which clearly defines what can go in an HTTP
Header and the semantics of the headers, SOAP leaves its header section
undefined.  Right?

I like to imagine a SOAP message nested within an HTTP message to be
like an onion: an application which understands the HTTP protocol (such
as a Web server) examines the HTTP headers to determine where the
message should be routed, the size of the payload, the MIME type of the
message, etc.  The HTTP-protocol-aware application then strips off the
HTTP header and routes the payload to the appropriate program. [The
outermost layer of the onion has been stripped off.]  Let's suppose that
the HTTP Header specifies that the payload should be routed to a SOAP
server (i.e., a SOAP-protocol-aware application).  Continuing in an
analogous fashion, I would imagine the SOAP server would examine the
SOAP header to glean information, such as what application should be
used to process the SOAP payload, the size of the SOAP payload, etc. 
But no, this is not the case.  In fact, the SOAP spec doesn't define
anything for the SOAP header.  Rather, SOAP mandates the contents of the
<Body> element be in a particular form:

   <Body>
       <methodName>
           <param>value</param>
           <param>value</param>
       </methodName>
   </Body>

The SOAP server uses the name of the Body element's first child as the
name of a method to be invoked.  I fail to see how this would work if
the Body were to contain an XML document, rather than a "subroutine
call" [i.e., document-centric rather than API-centric].

Comments:

- to be consistent with the HTTP model it seems sensible to clearly
define what elements can go in the SOAP header section.  Then, an
HTTP-protocol-aware application can "peal off" the HTTP header, followed
by a SOAP-protocol-aware application which can "peal off the SOAP
header.
- Can you please explain why SOAP leaves the header section open and
undefined?

2. I would like to now get out of the "weeds" and try to get the "big
picture" of SOAP.  Based upon Marwan's comments it appears that the idea
of SOAP is this:

Suppose that I have an application which understands a namespace (let's
call it namespace X).  SOAP provides a vehicle by which a message
(containing elements from namespace X) can be transported to the
namespace-X-aware application.

  -------------------
  |                 |
  |  SOAP Envelope  |          ---------------------
  | --------------- |          |                   |
  | |             | |          | namespace-X-aware |
  | |  X-message  | | -------> |    application    |
  | |             | |          |                   |
  | --------------- |          ---------------------
  |                 |
  -------------------  

Does this describe correctly the intent of SOAP - to transport a message
in a namespace to an application which can process elements from that
namespace?

Let's consider an example. Suppose that my namespace is:

  http://www.w3.org/1999/XSL/Transform

That is, my namespace is XSLT.  Suppose that my application is an XSLT
Processor. [I wish to set up an XML-transformation Web service.] 
Suppose that the message that I want transported (via SOAP) to the XSLT
Processor is an XSLT stylesheet.  I contend that it cannot be done.
Why?  Look at the SOAP document:

<soap:Envelope>
   <soap:Body>
      <xsl:stylesheet> 
          ...
      </xsl:stylesheet>
   </soap:Body>
</soap:Envelope>

It does not conform to the "method name followed by params" mandate. 
So, how would a SOAP server know what application it should dispatch the
stylesheet to?  Again, it seems to me that the information about what
application to send the stylesheet to would be in the SOAP header
section.  But, alas, the SOAP header section is void of anything.

Any clarification on these points would be much appreciated.  Thanks! 
/Roger
Received on Friday, 12 October 2001 08:07:06 GMT

This archive was generated by hypermail 2.2.0+W3C-0.50 : Monday, 7 December 2009 10:59:04 GMT