SOAP Version 1.2 Part 0: Primer (Second Edition)
SOAP Version 1.2 Part 1: Messaging Framework (Second Edition)
SOAP Version 1.2 Part 2: Adjuncts (Second Edition)
Which style of WSDL should I use?
Changes Between SOAP 1.1 and SOAP 1.2
SOAP Version 1.2 has a number of changes in syntax and provides additional (or clarified) semantics from those described in [SOAP 1.1].
Document structure
- The SOAP 1.2 specifications have been provided in two parts. [SOAP Part1] provides an abstract Infoset-based definition of the SOAP message structure, a processing model and an underlying protocol binding framework, while [SOAP Part2] provides serialization rules for conveying that infoset as well as a particular HTTP binding.
- SOAP 1.2 will not spell out the acronym.
- SOAP 1.2 has been rewritten in terms of XML infosets, and not as serializations of the form <?xml....?> required by SOAP 1.1.
Additional or changed syntax
- SOAP 1.2 does not permit any element after the body. The SOAP 1.1 schema definition allowed for such a possibility, but the textual description is silent about it.
- SOAP 1.2 does not allow the
env:encodingStyle
attribute to appear on the SOAPenv:Envelope
, whereas SOAP 1.1 allows it to appear on any element. SOAP 1.2 specifies specific elements where this attribute may be used. - SOAP 1.2 defines the new
env:NotUnderstood
header element for conveying information on a mandatory header block which could not be processed, as indicated by the presence of anenv:MustUnderstand
fault code. SOAP 1.1 provided the fault code, but no details on its use. - In the SOAP 1.2 infoset-based description, the
env:mustUnderstand
attribute in header elements takes the (logical) value "true" or "false", whereas in SOAP 1.1 they are the literal value "1" or "0" respectively. - SOAP 1.2 provides a new fault code
DataEncodingUnknown
. - The various namespaces defined by the two protocols are of course different.
- SOAP 1.2 replaces the attribute
env:actor
withenv:role
but with essentially the same semantics. - SOAP 1.2 defines a new attribute,
env:relay
, for header blocks to indicate if unprocessed header blocks should be forwarded. - SOAP 1.2 defines two new roles, "none" and "ultimateReceiver", together with a more detailed processing model on how these behave.
- SOAP 1.2 has removed the "dot" notation for fault codes, which are now simply an XML Qualified Name, where the namespace prefix is the SOAP envelope namespace.
- SOAP 1.2 replaces "client" and "server" fault codes with "Sender" and "Receiver".
- SOAP 1.2 uses the element names
env:Code
andenv:Reason
, respectively, for what used to be calledfaultcode
andfaultstring
in SOAP 1.1. SOAP 1.2 also allows multipleenv:Text
child elements ofenv:Reason
qualified byxml:lang
to allow multiple language versions of the fault reason. - SOAP 1.2 provides a hierarchical structure for the mandatory SOAP
env:Code
sub-element in theenv:Fault
element, and introduces two new optional subelements,env:Node
andenv:Role
. - SOAP 1.2 removes the distinction that was present in SOAP 1.1 between header and body faults as indicated by the presence of the
env:Details
element inenv:Fault
. In SOAP 1.2, the presence of theenv:Details
element has no significance as to which part of the fault SOAP message was processed. - SOAP 1.2 uses XML Base [XML Base] for determining a base URI for relative URI references whereas SOAP 1.1 is silent about the matter.
SOAP HTTP binding
- In the SOAP 1.2 HTTP binding, the
SOAPAction
HTTP header defined in SOAP 1.1 has been removed, and a new HTTP status code 427 has been sought from IANA for indicating (at the discretion of the HTTP origin server) that its presence is required by the server application. The contents of the formerSOAPAction
HTTP header are now expressed as a value of an (optional) "action" parameter of the "application/soap+xml" media type that is signaled in the HTTP binding. - In the SOAP 1.2 HTTP binding, the Content-type header should be "application/soap+xml" instead of "text/xml" as in SOAP 1.1. The IETF registration for this new media type is [RFC 3902].
- SOAP 1.2 provides a finer grained description of use of the various 2xx, 3xx, 4xx HTTP status codes.
- Support of the HTTP extensions framework has been removed from SOAP 1.2.
- SOAP 1.2 provides an additional message exchange pattern which may be used as a part of the HTTP binding that allows the use of HTTP GET for safe and idempotent information retrievals.
RPC
- SOAP 1.2 provides a
rpc:result
element accessor for RPCs. - SOAP 1.2 provides several additional fault codes in the RPC namespace.
- SOAP 1.2 offers guidance on a Web-friendly approach to defining RPCs where the procedure's purpose is purely "safe" informational retrieval.
SOAP encodings
- An abstract data model based on a directed edge labeled graph has been formulated for SOAP 1.2. The SOAP 1.2 encodings are dependent on this data model. The SOAP RPC conventions are dependent on this data model, but have no dependencies on the SOAP encoding. Support of the SOAP 1.2 encodings and SOAP 1.2 RPC conventions are optional.
- The syntax for the serialization of an array has been changed in SOAP 1.2 from that in SOAP 1.1.
- The support provided in SOAP 1.1 for partially transmitted and sparse arrays is not available in SOAP 1.2.
- SOAP 1.2 allows the inline (embedded) serialization of multiref values.
- The
href
attribute in SOAP 1.1 (of typexs:anyURI
) is calledenc:ref
in SOAP 1.2 and is of typeIDREF
. - In SOAP 1.2, omitted accessors of compound types are made equal to NILs.
- SOAP 1.2 provides several fault sub-codes for indicating encoding errors.
- Types on nodes are made optional in SOAP 1.2.
- SOAP 1.2 has removed generic compound values from the SOAP Data Model.
- SOAP 1.2 has added an optional attribute
enc:nodeType
to elements encoded using SOAP encoding that identifies its structure (i.e., a simple value, a struct or an array).
Enable SOAP 1.2 binding on an endpoint
Specify the binding through @BindingType
annotation in the implementation class to use SOAP 1.2 binding.