Uploaded image for project: 'Axis-C++'
  1. Axis-C++
  2. AXISCPP-336

Incorrect use of SoapAction for handlers

    XMLWordPrintableJSON

Details

    • Bug
    • Status: Open
    • Major
    • Resolution: Unresolved
    • current (nightly), 1.4 Final
    • None
    • WSDD Processing
    • None

    Description

      When using Handlers, the name is taken from the SOAP Action, rather than the service name (as used to be the case). However, this is not good practice as SOAP Action is optional.

      I've taken a look at what the SOAP (v1.1) and WSDL (v1.1) specs have to say about SOAPAction (see snippets below).
      Based on my interpretation of these, I do not believe it is correct for us to build a SOAPAction, when none (or blank) is specified in the WSDL.
      If the WSDL specifies a SOAPAction, then we should use that. If the application developer has additional information to the WSDL, they can set the SOAP action programmatically, via the Stub API.

      Obviously, this still leaves the problem with handlers. I suggest we base handlers off the WSDL service names.

      As an aside, there has been mention that .NET servers require SOAP Action be set. It is my belief that this is merely a requirement that WSDLs to .NET servers include the SOAP action rather than our client having to generate a SOAP Action "on the fly".

      Extract from SOAP (v1.1) spec
      6.1.1 The SOAPAction HTTP Header Field
      The SOAPAction HTTP request header field can be used to indicate the
      intent of the SOAP HTTP request. The value is a URI identifying the
      intent. SOAP places no restrictions on the format or specificity of the
      URI or that it is resolvable. An HTTP client MUST use this header field
      when issuing a SOAP HTTP Request.

      soapaction = "SOAPAction" ":" [ <"> URI-reference <"> ]
      URI-reference = <as defined in RFC 2396 [4]>
      (from RFC2396, 4. URI References [absoluteURI | relativeURI ] [ "#"
      fragment ] )

      The presence and content of the SOAPAction header field can be used by
      servers such as firewalls to appropriately filter SOAP request messages
      in HTTP. The header field value of empty string ("") means the intent
      of the SOAP is provided by the HTTP Request-URI. No value means that
      there is no indication of the intent of the message.

      Examples:_____________________________________________
      SOAPAction: "http://electrocommerce.org/abc#MyMessage"
      SOAPAction: "myapp.sdl"
      SOAPAction: ""
      SOAPAction:

      Extract from WSDL (v1.1) spec
      3.4 soap:operation
      <definitions .....>
      <binding ....>
      <operation ....>
      <soap:operation soapAction="uri"? style="rpc|document"?>?
      </operation>
      </binding>
      </definitions>
      ...
      The soapAction attribute specifies the value of the SOAPAction header
      for this operation. This URI value should be used directly as the
      values for the SOAP-Action header; no attempt should be made to make a
      relative URI value absolute whan making the request. For the HTTP
      protocol binding of SOAP, this is value required (it has no default).
      For other SOAP protocol bindings, it MUST NOT be specified, and the
      soap:operation element MAY be omitted.

      Attachments

        Activity

          People

            Unassigned Unassigned
            dicka Adrian Dick
            Votes:
            0 Vote for this issue
            Watchers:
            0 Start watching this issue

            Dates

              Created:
              Updated: