This document is also available in these non-normative formats: PDF, PostScript, XML, and plain text.
Copyright © 2007 W3C® (MIT, ERCIM, Keio), All Rights Reserved. W3C liability, trademark and document use rules apply.
WSDL 2.0 is the Web Services Description Language, an XML language for describing Web services. This document, "Web Services Description Language (WSDL) Version 2.0 Part 2: Adjuncts", specifies predefined extensions for use in WSDL 2.0:
Message exchange patterns
Operation safety
Operation styles
This specification depends on WSDL Version 2.0 [WSDL 2.0 Core Language].Binding extensions for SOAP and HTTP
This section describes the status of this document at the time of its publication. Other documents may supersede this document. A list of current W3C publications and the latest revision of this technical report can be found in the W3C technical reports index at http://www.w3.org/TR/.
This is a W3C Last Call Working of Web Services Description Language (WSDL) Version 2.0 Part 2: Adjuncts for review by W3C Members and other interested parties. It has been produced by the Web Services Description Working Group, which is part of the W3C Web Services Activity. The publication of this document signifies a call for implementations of this specification. The Candidate Recommendation period specified in the previous draft (15 March 2006) has passed. The Working Group does not anticipate garnering enough implementation experience to fulfill its Candidate Recommendation exit criteria until at least 1 July 2006.. This document is published to give an opportunity to the community to review the new namespace for WSDL 2.0. The Working Group plans to request to move to W3C Proposed Recommendation shortly after the end of the Last Call period.
This version addresses the modest number of comments received to date on the Candidate Recommendation of Web Services Description Language (WSDL) Version 2.0 Part 2: Adjuncts, and primarily differs from the previous version in the inclusion of marked test assertions to help implementers, as well as the loosening of the IRI style to allow repetition of query parameters and the removal of the {http version} property which was judged unneeded. The detailed disposition of the comments received can be found in the Candidate Recommendation issues list. A diff-marked version against the previous version of this document is available. For a detailed list of changes since the last publication of this document, please refer to appendix C. Part 2 Change Log.As a result of implementer and community feedback the Working Group made a number of changes since the Candidate Recommendation publication. These changes include:
The namespace of the language specified in the document, and identifiers within it, have changed to a shorter, undated form.
Numerous consistency and editorial improvements.
Improved the granularity and orthogonality of test assertions within the document, and between the assertions and the normative schema, by variously adding, removing and factoring assertion markup.
Factored MEPs not supported by the SOAP or HTTP bindings to a separate specification.
Renamed the boolean-valued {safety} property to {safe}.
Added {http query parameter separator}, {http query parameter separator default}, and {http location ignore uncited} properties to the SOAP binding.
Specified mapping of in-only and robust-in-only MEPs to the SOAP 1.2 request-response MEP as clarified in the PER.
Clarified when properties from the HTTP binding appear, and have meaning, in the SOAP Binding.
Allowed #none as an input content model when using the SOAP Response MEP.
Added an explicit dependency from the HTTP Binding to the wsdlx:safe annotation.
The HTTP method defaults to POST if is is not set explicitly, or by the wsdlx:safe annotation.
Clarified the relationship of {http location} and {address} as a relative URI and a base URI.
Renamed whttp:authenticationType to whttp:authenticationScheme.
Added explicit rules about encoding data when populating an HTTP location template.
Added syntax for suppressing any encoding when populating an HTTP location template.
Added BNF to clarify parsing rules for HTTP location templates.
Replaced {http transfer coding} with {http content encoding} and described its effects more precisely.
Constrained the values allowed in {http query parameter separator} and {http query parameter separator default} properties.
Individuals are invited to send feedback on this document to the public public-ws-desc-comments@w3.org mailing list (public archive) through 15 April 2007.
The Working Group releases a test suite along with an implementation report.
Issues about this document are recorded in the issues list maintained by the Working Group. A diff-marked version against the previous version of this document is available.
Publication as a Working Draft does not imply endorsement by the W3C Membership. This is a draft document and may be updated, replaced or obsoleted by other documents at any time. It is inappropriate to cite this document as other than work in progress.
This document is governed by the 24 January 2002 CPP as amended by the W3C Patent Policy Transition Procedure. W3C maintains a public list of any patent disclosures made in connection with the deliverables of the group; that page also includes instructions for disclosing a patent. An individual who has actual knowledge of a patent which the individual believes contains Essential Claim(s) must disclose the information in accordance with section 6 of the W3C Patent Policy.
1. Introduction
1.1 Notational
Conventions
1.2 Assertions
2. Predefined Message Exchange Patterns
2.1 Template for
Message Exchange Patterns
2.1.1 Pattern Name
2.2 Fault
Propagation Rules
2.2.1 Fault Replaces Message
propagation rule
2.2.2 Message Triggers Fault
propagation rule
2.2.3 No Faults propagation rule
2.3 Message Exchange
Patterns
2.3.1 In-Only message exchange
pattern
2.3.2 Robust In-Only message exchange
pattern
2.3.3 In-Out message exchange
pattern
2.3.4
In-Optional-Out2.3.5 Out-Only2.3.6
Robust Out-Only2.3.7 Out-In2.3.8
Out-Optional-In2.4 Security Considerations
3. Predefined Extensions
3.1 Operation
safety
3.1.1 Relationship to WSDL Component
Model
3.1.2 XML Representation
3.1.3 Mapping from XML Representation to Component
Properties
4. Predefined Operation Styles
4.1 RPC Style
4.1.1 wrpc:signature
Extension
4.1.2 XML Representation of
the wrpc:signature Extension
4.1.3 wrpc:signature
Extension Mapping To Properties of an Interface Operation
component
4.2 IRI
Style
4.3 Multipart style
5. WSDL SOAP Binding Extension
5.1 SOAP Syntax Summary (Non-Normative)
5.2 Identifying the use of the SOAP
Binding
5.3 SOAP Binding
Rules
5.4 Specifying the
SOAP Version
5.4.1 Description
5.4.2 Relationship to WSDL Component
Model
5.4.3 XML Representation
5.4.4 Mapping from XML Representation to
Component properties
5.5 Specifying the
SOAP Underlying Protocol
5.5.1 Description
5.5.2 Relationship to WSDL Component
Model
5.5.3 XML Representation
5.5.4 Mapping from XML Representation to
Component Properties
5.6 Binding
Faults
5.6.1 Description
5.6.2 Relationship to WSDL Component
Model
5.6.3 XML Representation
5.6.4 Mapping XML Representation to Component
Properties
5.7 Binding
Operations
5.7.1 Description
5.7.2 Relationship to WSDL Component
Model
5.7.3 XML Representation
5.7.4 Mapping from XML Representation to
Component Properties
5.8 Declaring
SOAP Modules
5.8.1 Description
5.8.2 Relationship to WSDL Component
Model
5.8.3 SOAP Module component
5.8.4 XML Representation
5.8.5 Mapping from XML Representation to
Component Properties
5.8.6 IRI Identification Of A SOAP Module
component
5.9 Declaring
SOAP Header Blocks
5.9.1 Description
5.9.2 Relationship to WSDL Component
Model
5.9.3 SOAP Header Block component
5.9.4 XML Representation
5.9.5 Mapping XML Representation to
Component Properties
5.9.6 IRI Identification Of A SOAP Header
Block component
5.10 WSDL SOAP
1.2 Binding
5.10.1 Identifying a WSDL SOAP 1.2
Binding
5.10.2 Description
5.10.3 SOAP 1.2 Binding Rules
5.10.4 Binding WSDL 2.0 MEPs to SOAP 1.2
MEPs
5.10.4.1
WSDL In-Out to SOAP
Request-Response
5.10.4.1.1
The Client
5.10.4.1.2
The Service
5.10.4.2
WSDL In-Out to SOAP
SOAP-Response
5.10.4.2.1
The Client
5.10.4.2.2
The Service
5.10.4.3
WSDL In-Only to SOAP
Request-Response
5.10.4.3.1
The
Client
5.10.4.3.2
The
Service
5.10.4.4
WSDL
Robust-In-Only to SOAP Request-Response
5.10.4.4.1
The
Client
5.10.4.4.2
The
Service
5.11 Conformance
6. WSDL HTTP Binding Extension
6.1 Identifying
the use of the HTTP Binding
6.2 HTTP Syntax
Summary (Non-Normative)
6.3 Supported
Extensions
6.4 HTTP Binding Rules
6.4.1 HTTP Method
Selection
6.4.2 HTTP Content
Encoding Selection
6.4.3 Payload Construction And
Serialization Format
6.4.3.1
Serialization rules for XML
messages
6.4.4 Default input and output
serialization format
6.4.5 HTTP
Header Construction
6.4.6 HTTP Request IRI
6.5 Binding Operations
6.5.1 Description
6.5.2 Relationship to WSDL Component
Model
6.5.3 Specification of
serialization rules allowed
6.5.4 XML
Representation
6.5.5 Mapping from XML Representation to
Component Properties
6.6 Declaring HTTP Headers
6.6.1 Description
6.6.2 Relationship to WSDL Component
Model
6.6.3 HTTP
Header component
6.6.4 XML
Representation
6.6.5 Mapping from XML Representation to
Component Properties
6.6.6 IRI Identification Of An HTTP Header component
6.7 Specifying HTTP Error Code for Faults
6.7.1 Description
6.7.2 Relationship to WSDL Component
Model
6.7.3 XML
Representation
6.7.4 Mapping
from XML Representation to Component Properties
6.8 Serialization Format of Instance
Data
6.8.1 Serialization of the instance data in
parts of the HTTP request IRI
6.8.1.1
Construction of the
request IRI using the {http location} property
6.8.2 Serialization as
application/x-www-form-urlencoded
6.8.2.1
Case of elements
cited in the {http location} property
6.8.2.2
Serialization of
content of the instance data not cited in the {http location}
property
6.8.2.2.1
Construction of
the query string
6.8.2.2.2
Controlling the serialization of
the query string in the request IRI
6.8.2.2.3
Serialization in
the request IRI
6.8.2.2.4
Serialization in
the message body
6.8.3 Serialization as
application/xml
6.8.4 Serialization as
multipart/form-data
6.8
Specifying the Transfer
Coding6.8.1 Description6.8.2
Relationship to WSDL Component
Model6.8.3 XML Representation6.8.4 Mapping from XML
Representation to Component Properties6.9 Specifying the
Content Encoding
6.9.1 Description
6.9.2 Relationship to WSDL Component
Model
6.9.3 XML Representation
6.9.4 Mapping from XML
Representation to Component Properties
6.10 Specifying the Use of HTTP Cookies
6.10.1 Description
6.10.2 Relationship to WSDL Component
Model
6.10.3 XML Representation
6.10.4 Mapping from XML Representation to
Component Properties
6.11 Specifying HTTP Access Authentication
6.11.1 Description
6.11.2 Relationship to WSDL Component Model
6.11.3 XML Representation
6.11.4 Mapping from XML Representation to Component
Properties
6.12 Conformance
7. References
7.1 Normative References
7.2 Informative References
A. Acknowledgements
(Non-Normative)
B. Component Summary
(Non-Normative)
C. Assertion
Summary(Non-Normative)
D. Part 2 Change
Log (Non-Normative)
D.1 WSDL 2.0 Extensions Change Log
D.2 WSDL 2.0 Bindings Change Log
The Web Services Description Language Version 2.0 (WSDL 2.0) [WSDL 2.0 Core Language] provides a model and an XML format for describing Web services. WSDL 2.0 enables one to separate the description of the abstract functionality offered by a service from concrete details of a service description such as "how" and "where" that functionality is offered.
This document, "Web Services Description Language (WSDL) Version 2.0 Part 2: Adjuncts", specifies predefined extensions for use in WSDL 2.0:
Message exchange patterns: 2. Predefined Message Exchange Patterns
Operation safety declaration: 3. Predefined Extensions
Operation styles: 4. Predefined Operation Styles
Binding extensions:
A SOAP 1.2 [SOAP 1.2 Part 1: Messaging Framework (Second Edition)] binding extension: 5. WSDL SOAP Binding Extension
An HTTP/1.1 [IETF RFC 2616] binding extension: 6. WSDL HTTP Binding Extension
WSDL 2.0 Primer [WSDL 2.0 Primer] is a non-normative document intended to provide an easily understandable tutorial on the features of the WSDL Version 2.0 specifications.The Core Language [This document depends on WSDL Version 2.0 [WSDL 2.0 Core Language].
The keywords "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this document are to be interpreted as described in RFC2119 [IETF RFC 2119].
This specification uses a number of namespace prefixes throughout; they are listed in Table 1-1. Note that the choice of any namespace prefix is arbitrary and not semantically significant (see [XML Information Set]).
| Prefix | Namespace | Notes |
|---|---|---|
| wsdl | "http://www.w3.org/ns/wsdl" | This namespace is defined in [WSDL 2.0 Core Language]. A normative XML Schema [XML Schema Structures], [XML Schema Datatypes] document for the "http://www.w3.org/ns/wsdl" namespace can be found at http://www.w3.org/ns/wsdl. This namespace is used as the default namespace throughout this specification. |
| wsdlx | "http://www.w3.org/ns/wsdl-extensions" | This specification extends in section 3. Predefined Extensions the "http://www.w3.org/ns/wsdl-extensions" namespace defined in [WSDL 2.0 Core Language]. A normative XML Schema [XML Schema Structures], [XML Schema Datatypes] document for the "http://www.w3.org/ns/wsdl-extensions" namespace can be found at http://www.w3.org/ns/wsdl-extensions. |
| wsoap | "http://www.w3.org/ns/wsdl/soap" | Defined by this specification. A normative XML Schema [XML Schema Structures], [XML Schema Datatypes] document for the "http://www.w3.org/ns/wsdl/soap" namespace can be found at http://www.w3.org/ns/wsdl/soap. |
| whttp | "http://www.w3.org/ns/wsdl/http" | Defined by this specification. A normative XML Schema [XML Schema Structures], [XML Schema Datatypes] document for the "http://www.w3.org/ns/wsdl/http" namespace can be found at http://www.w3.org/ns/wsdl/http. |
| wrpc | "http://www.w3.org/ns/wsdl/rpc" | Defined by this specification. A normative XML Schema [XML Schema Structures], [XML Schema Datatypes] document for the "http://www.w3.org/ns/wsdl/rpc" namespace can be found at http://www.w3.org/ns/wsdl/rpc. |
| xs | "http://www.w3.org/2001/XMLSchema" | Defined in the W3C XML Schema specification [XML Schema Structures], [XML Schema Datatypes]. |
Namespace names of the general form "http://example.org/..." and "http://example.com/..." represent application or context-dependent URIs [IETF RFC 3986].
All parts of this specification are normative, with the EXCEPTION of pseudo-schemas, examples, and sections explicitly marked as "Non-Normative". Pseudo-schemas are provided for each component, before the description of this component. They provide visual help for the XML [XML 1.0] serialization. The syntax of BNF pseudo-schemas is the same as the one used in [WSDL 2.0 Core Language].
Assertions about WSDL 2.0 documents and components that are not enforced by the normative XML schema for WSDL 2.0 are marked by a dagger symbol (†) at the end of a sentence. Each assertion has been assigned a unique identifier that consists of a descriptive textual prefix and a unique numeric suffix. The numeric suffixes are assigned sequentially and never reused so there may be gaps in the sequence. The assertion identifiers MAY be used by implementations of this specification for any purpose, e.g. error reporting.
The assertions and their identifiers are summarized in section C. Assertion Summary.
Web Services Description Language (WSDL) message exchange patterns (hereafter simply 'patterns') define the sequence and cardinality of abstract messages listed in an operation. Message exchange patterns also define which other nodes send messages to, and receive messages from, the service implementing the operation.
A node is an agent (section 2.3.2.2 Agent of the Web Services Architecture [Web Services Architecture]) that can transmit and/or receive message(s) described in WSDL description(s) and process them.
Note:
A node MAY be accessible via more than one physical address or transport.†
WSDL message exchange patterns describe the interaction at the abstract (interface) level, which may be distinct from the pattern used by the underlying protocol binding (e.g. SOAP Message Exchange Patterns; section 5.10.3 SOAP 1.2 Binding Rules contains the binding rules for the selection of a SOAP 1.2 message exchange pattern, based on the WSDL message exchange pattern in use for the SOAP binding extension defined in section 5. WSDL SOAP Binding Extension).
By design, WSDL message exchange patterns abstract out specific message types. Patterns identify placeholders for messages, and placeholders are associated with specific message types by the operation using the pattern.
Unless explicitly stated otherwise, WSDL message exchange patterns also abstract out binding-specific information such as timing between messages, whether the pattern is synchronous or asynchronous, and whether the messages are sent over a single or multiple channels.
Like interfaces and operations, WSDL message exchange patterns do not exhaustively describe the set of messages exchanged between a service and other nodes; by some prior agreement, another node and/or the service MAY send messages (to each other or to other nodes) that are not described by the pattern.†For instance, even though a pattern can define a single message sent from a service to one other node, the Web service can in practice multicast that message to other nodes.
To maximize reuse, WSDL message exchange patterns identify a minimal contract between other parties and Web services, and contain only information that is relevant to both the Web service and another party.
This specification defines several message exchange patterns for use with WSDL Version 2.0 Part 1: Core Language [WSDL 2.0 Core Language]. Additional, non-normative patterns are available in [WSDL 2.0 Additional MEPs].
New message exchange patterns may be defined by any organization able and willing to do so. It is recommended that the patterns use the general template provided in 2.1.1 Pattern Name, after examination of existing predefined patterns.
This pattern consists of [number] message[s, in order] as follows:
[enumeration, specifying, for each message] A[n optional] message:
indicated by an Interface Message Reference component whose {message label} is "[label]" and {direction} is "[direction]"
[received from|sent to] ['some' if first mention] node [node identifier]
This pattern uses the rule [fault ruleset reference].
An Interface Operation using this message exchange pattern has a {message exchange pattern} property with the value "[pattern IRI]".
Note: In the template, the bracketed items indicate a replacement operation. Substitute the correct terms for each bracketed item.
Note: the "received from" and "sent to" are always from the point of view of the service, and participating nodes other than the service are implicitly identified as the originators of or destinations for messages in the exchange.
WSDL patterns specify their fault propagation model using standard rulesets to indicate where faults can occur. The most common patterns for fault propagation are defined in the following subsections, and referenced by the patterns in 2.3 Message Exchange Patterns. "Propagation" is defined as a best-effort attempt to transmit the fault message to its designated recipient.
WSDL patterns specify propagation of faults, not their generation. Nodes that generate faults MUST attempt to propagate the faults in accordance with the governing ruleset, but it is understood that any delivery of a network message is best effort, not guaranteed.†The rulesets establish the direction of the fault message and the fault recipient; they do not provide reliability or other delivery guarantees. When a fault is generated, the generating node MUST attempt to propagate the fault, and MUST do so in the direction and to the recipient specified by the ruleset.† However, extensions or binding extensions MAY modify these rulesets.† For example, WS-Addressing [WSA 1.0 Core] defines a "FaultTo" address for messages, which is used in lieu of the recipient nominated by the ruleset.
Generation of a fault, regardless of ruleset, terminates the exchange.†
Binding extensions, features, or extension specifications can override the semantics of a fault propagation ruleset, but this practice is strongly discouraged.
When the Fault Replaces Message propagation rule is in effect, any message after the first in the pattern MAY be replaced with a fault message, which MUST have identical direction. † The fault message MUST be delivered to the same target node as the message it replaces, unless otherwise specified by an extension or binding extension. If there is no path to this node, the fault MUST be discarded.†
The Fault Replaces Message propagation
rule is identified by the following URI: http://www.w3.org/ns/wsdl/fault-replaces-message
When the Message Triggers Fault propagation rule is in effect, any message, including the first in the pattern, MAY trigger a fault message, which MUST have opposite direction. † The fault message MUST be delivered to the originator of the triggering message, unless otherwise specified by an extension or binding extension. Any node MAY propagate a fault message, and MUST NOT do so more than once for each triggering message. If there is no path to the originator, the fault MUST be discarded.†
The Message Triggers Fault propagation
rule is identified by the following URI: http://www.w3.org/ns/wsdl/message-triggers-fault
When the No Faults propagation rule is in effect, faults MUST NOT be propagated. †
The No Faults propagation rule is
identified by the following URI: http://www.w3.org/ns/wsdl/no-faults
WSDL patterns are described in terms of the WSDL component model, specifically the Interface Message Reference and Interface Fault Reference components.
The in-only message exchange
pattern consists of exactly one message as
follows:†
A message:
indicated by a Interface Message Reference component whose {message label} is "In" and {direction} is "in"
received from some node N
The in-only message exchange
pattern uses the rule 2.2.3 No Faults propagation rule.†
An operation using this message exchange pattern has a {message exchange pattern} property with the value "http://www.w3.org/ns/wsdl/in-only".
The robust-in-only message
exchange pattern consists of exactly one message as
follows:†
A message:
indicated by a Interface Message Reference component whose {message label} is "In" and {direction} is "in"
received from some node N
The robust in-only message
exchange pattern uses the rule 2.2.2 Message Triggers Fault
propagation rule.†
An operation using this message exchange pattern has a {message exchange pattern} property with the value "http://www.w3.org/ns/wsdl/robust-in-only".
The in-out message exchange
pattern consists of exactly two messages, in order, as
follows:†
A message:
indicated by a Interface Message Reference component whose {message label} is "In" and {direction} is "in"
received from some node N
A message:
indicated by a Interface Message Reference component whose {message label} is "Out" and {direction} is "out"
sent to node N
The in-out message exchange
pattern uses the rule 2.2.1 Fault Replaces Message propagation
rule.†
An operation using this message exchange pattern has a {message exchange pattern} property with the value "http://www.w3.org/ns/wsdl/in-out".
Note that many of the message exchange patterns defined above describe responses to an initial message (either a normal response message or a fault.)
Such responses can be used in attempts to disrupt, attack, or map a network, host, or services. When such responses are directed to an address other than that originating the initial message, the source of an attack can be obscured, or blame laid on a third party, or denial-of-service attacks can be enabled or exacerbated.
Security mechanisms addressing such attacks can prevent the delivery of response messages to the receiving node. Conformance to the message exchange pattern is measured prior to the application of these security mechanisms.
This section defines an extension to WSDL 2.0 [WSDL 2.0 Core Language] that allows marking an operation as a safe interaction, as defined in section 3.4. Safe Interactions of [Web Architecture].
This extension MAY be used for setting defaults in bindings, such as in the HTTP binding (see 6.5.5 Mapping from XML Representation to Component Properties).
The safety extension adds the following property to the Interface Operation component model (defined in [WSDL 2.0 Core Language]):
{safe} REQUIRED. An xs:boolean indicating whether the operation is asserted to be safe for users to invoke. If this property is "false", then no assertion has been made about the safety of the operation, thus the operation MAY or MAY NOT be safe. However, an operation SHOULD be marked safe if it meets the criteria for a safe interaction defined in Section 3.4 of [Web Architecture].†
<description>
<interface>
<operation name="xs:NCName" pattern="xs:anyURI"
wsdlx:safe="xs:boolean"? >
</operation>
</interface>
</description>
The XML representation for the safety extension is an attribute information item with the following Infoset properties:
An
OPTIONAL safe attribute information item with
the following Infoset properties:†
A [local name] of safe
A [namespace name] of "http://www.w3.org/ns/wsdl-extensions"
A type of xs:boolean
This section defines operation styles that can be used to place constraints on Interface Operation components, in particular with respect to the format of the messages they refer to. The serialization formats defined in section 6.8 Serialization Format of Instance Data require bound Interface Operation components to have one or more of the styles defined in this section.
The RPC style is selected by assigning to an Interface Operation component's {The RPC style is selected by including the value "http://www.w3.org/ns/wsdl/style/rpc" in the {style} property of an Interface Operation component.
An
Interface Operation component conforming
to the RPC style MUST obey the constraints listed further below.
Furthermore, if the wrpc:signature extension is engaged simulatenously, the
corresponding attribute information item MUST be
valid according to the schema for the extension and additionally
MUST obey the constraints listed in 4.1.1
wrpc:signature Extension and 4.1.2 XML
Representation of the wrpc:signature Extension.
If the RPC style is used by an Interface Operation component then its {message exchange pattern} property MUST have the value either "http://www.w3.org/ns/wsdl/in-only" or "http://www.w3.org/ns/wsdl/in-out".†
The RPC style places restrictions for Remote Procedure Call-types of interactions. When this value is used, the associated messages MUST conform to the rules below, described using XML Schema [XML Schema Structures]. Note that operations containing messages described by other type systems may also indicate use of the RPC style, as long as they are constructed in such a way as to follow these rules.
If the Interface Operation component uses a {message exchange pattern} for which there is no output element, i.e. "http://www.w3.org/ns/wsdl/in-only", then the conditions stated below that refer to output elements MUST be considered to be implicitly satisfied.
The value of the {message content model} property for the Interface Message Reference components of the {interface message references} property MUST be "#element".†
The content model of input and output {element declaration} elements MUST be defined using a complex type that contains a sequence from XML Schema.†
The input
sequence MUST only contain elements and element
wildcards.†
It MUST NOT contain other structures such
as xs:choice. The input sequence MUST NOT contain more than
one element wildcard.†
The element
wildcard, if present, MUST appear after any elements.†
The output
sequence MUST only contain elements.†
It MUST NOT contain other structures such
as xs:choice.
Both the input and output sequences MUST contain only
local element children.†
Note that these child elements MAY contain
the following attributes: nillable,
minOccurs and maxOccurs.
The local name of input element's QName MUST be the same as the Interface Operation component's name.†
Input and output elements MUST both be in the same namespace.†
The complex type that defines the body of an input or an output element MUST NOT contain any local attributes.† Extension attributes are allowed for purposes of managing the message infrastructure (e.g. adding identifiers to facilitate digitally signing the contents of the message). They must not be considered as part of the application data that is conveyed by the message. Therefore, they are never included in an RPC signature (see 4.1.1 wrpc:signature Extension).
If elements with the same qualified name appear as children of both the input and output elements, then they MUST both be declared using the same named type.†
The input or output sequence MUST NOT contain multiple children elements declared with the same name.†
wrpc:signature ExtensionThe wrpc:signature extension attribute
information item MAY be used in conjunction with the RPC style
to describe the exact signature of the function represented by an
operation that uses the RPC style.
When present, the wrpc:signature extension
contributes the following property to the
Interface Operation component it is applied to:
{rpc signature} OPTIONAL, but MUST be present when the style is RPC†. A list of pairs (q, t) whose first component is of type xs:QName and whose second component is of type xs:token. Values for the second component MUST be chosen among the following four: "#in", "#out", "#inout" "#return".†
The value of the {rpc signature} property MUST satisfy the following conditions:
The value of the first component of each pair (q, t) MUST be unique within the list.†
For each child element of the input and output messages of the operation, a pair (q, t), whose first component q is equal to the qualified name of that element, MUST be present in the list, with the caveat that elements that appear with cardinality greater than one MUST be treated as a single element.†
For each pair (q, #in), there MUST be a child element of the input element with a name of q. There MUST NOT be a child element of the output element with the name of q.†
For each pair (q, #out), there MUST be a child element of the output element with a name of q. There MUST NOT be a child element of the input element with the name of q.†
For each pair (q, #inout), there MUST be a child element of the input element with a name of q. There MUST also be a child element of the output element with the name of q.†
For each pair (q, #return), there MUST be a child element of the output element with a name of q. There MUST NOT be a child element of the input element with the name of q.†
The function signature defined by a wrpc:signature
extension is determined as follows:
Start with the value of the {rpc signature} property, a (possibly empty) list of pairs of this form:
[(q0, t0), (q1, t1), ...]
Filter the elements of this list into two lists, the first one (L1) comprising pairs whose t component is one of {#in, #out, #inout}, the second (L2) pairs whose t component is #return. During the composition of L1 and L2, the relative order of members in the original list MUST be preserved.
For ease of visualization, let's denote the two lists as:
(L1) [(a0, u0), (a1, u1), ...]
and
(L2) [(r0, #return), (r1, #return), ...]
respectively.
Then, if the input sequence ends with an element wildcard, the formal signature of the function is:
f([d0] a0, [d1] a1, ..., rest) => (r0, r1, ...)
where rest is a formal parameter representing the elements in the input message matched by the element wildcard.
Otherwise the formal signature of the function is:
f([d0] a0, [d1] a1, ...) => (r0, r1, ...)
i.e.:
the list of formal arguments to the function is [a0, a1, ...];
the direction d of each formal argument a is one of [in], [out], [inout], determined according to the value of its corresponding u token;
the list of formal return parameters of the function is [r0, r1, ...];
each formal argument and formal return parameter is typed according to the type of the child element identified by it (unique per the conditions given above).
Note:
The wrpc:signature extension
allows the specification of multiple return values for an
operation. Several popular programming languages support multiple
return values for a function. Moreover, for languages which do not,
the burden on implementers should be small, as typically multiple
return values will be mapped to a single return value of a
structure type (or its closest language-specific
equivalent).
wrpc:signature ExtensionThe XML representation for the RPC signature extension is an attribute information item with the following Infoset properties:
A [local name] of signature
A [namespace name] of "http://www.w3.org/ns/wsdl/rpc"
The type of the name attribute information
item is a list type whose item type is the union of the
xs:QName type and the subtype of the xs:token
type restricted to the following four values: "#in", "#out",
"#inout", "#return". See Example
4-1 for an excerpt from the normative schema definition of this
type.
Additionally, each even-numbered item (0, 2, 4, ...) in the list MUST be of type xs:QName and each odd-numbered item (1, 3, 5, ...) in the list MUST be of the subtype of xs:token described in the previous paragraph.†
Example 4-1. Definition of the wrpc:signature extension
<xs:attribute name="signature" type="wrpc:signatureType"/>
<xs:simpleType name="signatureType">
<xs:list itemType="wrpc:signatureItemType"/>
</xs:simpleType>
<xs:simpleType name="signatureItemType">
<xs:union memberTypes="xs:QName wrpc:directionToken"/>
</xs:simpleType>
<xs:simpleType name="directionToken">
<xs:restriction base="xs:token">
<xs:enumeration value="#in"/>
<xs:enumeration value="#out"/>
<xs:enumeration value="#inout"/>
<xs:enumeration value="#return"/>
</xs:restriction>
</xs:simpleType>
wrpc:signature Extension Mapping To Properties of an
Interface Operation componentA wrpc:signature extension attribute
information item is mapped to the following property of the
Interface Operation component defined by its [owner].
| Property | Value |
|---|---|
| {rpc signature} | A list of (xs:QName, xs:token)
pairs formed by grouping the items present in the actual value of
the wrpc:signature attribute information item
in the order in which they appear there. |
The IRI style is selected by assigning the Interface Operation component's {The IRI style is selected by including the value "http://www.w3.org/ns/wsdl/style/iri" in the {style} property of an Interface Operation component.
When using this style, the value of the {message content model} property of the Interface Message Reference component corresponding to the initial message of the message exchange pattern MUST be "#element".†
Use of this value indicates that XML Schema [XML Schema Structures] was used to define the schema of the {element declaration} property of the Interface Message Reference component of the Interface Operation component corresponding to the initial message of the message exchange pattern. This schema MUST adhere to the rules below:
The content model of this element is defined using a complex type that contains a sequence from XML Schema.
The sequence
MUST only contain elements.†It
MUST NOT contain other structures such as xs:choice. There are no
occurence constraints on the sequence.
The sequence MUST contain only local element
children.† Note these
child elements can contain the nillable
attribute.
The localPart of the element's QName MUST be the same as the Interface Operation component's {name}.†
The complex type that defines the body of the element or its children elements MUST NOT contain any attributes.†
The children elements of the sequence MUST derive
from xs:simpleType, and MUST NOT be of the type
or derive from xs:QName, xs:NOTATION,
xs:hexBinary or
xs:base64Binary.†
The Multipart style is selected by assigning the Interface Operation component's {The Multipart style is selected by including the value "http://www.w3.org/ns/wsdl/style/multipart" in the {style} property of an Interface Operation component.
When using this style, the value of the {message content model} property of the Interface Message Reference component corresponding to the initial message of the message exchange pattern MUST be "#element".†
Use of this value indicates that XML Schema [XML Schema Structures] was used to define the schema of the {element declaration} property of the Interface Message Reference component of the Interface Operation component corresponding to the initial message of the message exchange pattern. This schema MUST adhere to the rules below:
The content model of this element is defined using a complex type that contains a sequence from XML Schema.
The
sequence MUST only contain elements.†It
MUST NOT contain other structures such as xs:choice.
The sequence MUST
contain only local element children.† The attributes
minOccurs and maxOccurs for these child elements MUST have a value
1.†Note
these child elements can contain the nillableattribute.
The localPart of the element's QName MUST be the same as the Interface Operation component's {name}.†
The complex type that defines the body of the element or its children elements MUST NOT contain any attributes.†
The sequence MUST NOT contain multiple children element declared with the same local name.†
The SOAP binding extension described in this section is an extension for [WSDL 2.0 Core Language] to enable Web services applications to use SOAP. This binding extension is SOAP version independent ("1.2" as well as other versions) and extends WSDL 2.0 by adding properties to the Bindingcomponent, and its related components, as defined in [WSDL 2.0 Core Language]. In addition, an XML Infoset representation for these additional properties is provided, along with a mapping from that representation to the various component properties.
As allowed in [WSDL 2.0 Core Language], a Bindingcomponent can exist without indicating a specific Interfacecomponent that it applies to. In this case, no Binding Operation or Binding Fault component can be present in the Binding component.
The SOAP binding extension is designed with the objective of minimizing what needs to be explicitly declared for common cases. This is achieved by defining a set of default rules that affect all Interface Operation components of an Interfacecomponent to which the SOAP binding extension is applied, unless specifically overridden by a Binding Operation component. Thus, if a given Interface Operation component is not referred to specifically by a Binding Operation component, then all the default rules apply to that Interface Operation component. As a result, in accordance with the requirements of [WSDL 2.0 Core Language], all operations of an Interfacecomponent will be bound by this binding extension.
Note: As in other parts of this specification, one could have done away with "default" properties at the component model level, and have set the value for the corresponding non-default properties in the XML mapping section. However, default properties are required for interface-less binding. Indeed, an interface-less binding has no means to set the non-default version of the property at the operation-level, since there is precisely no operation (there is not even an interface). Hence the mapping needs to be done elsewhere.
A subset of the HTTP properties specified in the HTTP binding extension defined in section 6. WSDL HTTP Binding Extension are present in a SOAP binding when the SOAP binding uses HTTP as the underlying protocol, for example, when the value of the {soap underlying protocol} property of the Bindingcomponent is "http://www.w3.org/2003/05/soap/bindings/HTTP/". These properties MUST NOT be used unless the underlying protocol is HTTP.†The allowed properties are the ones that describe the underlying protocol (HTTP):
{http location} and {http location ignore uncited} on Binding Operation components, as defined in 6.5 Binding Operations and 6.8.2.2.2 Controlling the serialization of the query string in the request IRI, respectively.
{http headers} on Binding Message Reference and Binding Fault components, as defined in 6.6 Declaring HTTP Headers
{http query parameter separator default} on Bindingcomponents, {http query parameter separator} on Binding Operation components, as defined in 6.5.2 Relationship to WSDL Component Model
{http content encoding default} on Binding and Binding Operation components, {http content encoding} on Binding Message Reference and Binding Fault components, as defined in 6.9 Specifying the Content Encoding
{http cookies} on Binding components, as defined in 6.10 Specifying the Use of HTTP Cookies.
{http authentication scheme} and {http authentication realm} on Endpoint components, as defined in 6.11 Specifying HTTP Access Authentication
<description>
<binding name="xs:NCName" interface="xs:QName"?
type="http://www.w3.org/ns/wsdl/soap"
whttp:queryParameterSeparatorDefault="xs:string"??
whttp:contentEncodingDefault="xs:string"??
whttp:cookies="xs:boolean"?
wsoap:version="xs:string"?
wsoap:protocol="xs:anyURI"
wsoap:mepDefault="xs:anyURI"? >
<documentation />*
<wsoap:module ref="xs:anyURI" required="xs:boolean"? >
<documentation />*
</wsoap:module>*
<fault ref="xs:QName"
wsoap:code="union of xs:QName, xs:token"?
wsoap:subcodes="union of (list of xs:QName), xs:token"?
whttp:contentEncoding="xs:string"?? >
<documentation />*
<wsoap:module ... />*
<wsoap:header element="xs:QName" mustUnderstand="xs:boolean"?
required="xs:boolean"? >
<documentation />*
</wsoap:header>*
<whttp:header ... />*??
[ <feature /> | <property /> ]*
</fault>*
<operation ref=">*
<whttp:header ... />*??
</fault>*
<operation ref="xs:QName"
whttp:location="xs:anyURI"??
whttp:contentEncodingDefault="xs:string"??
whttp:queryParameterSeparator="xs:string"??
whttp:ignoreUncited="xs:boolean"??
wsoap:mep="xs:anyURI"?
wsoap:action="xs:anyURI"? >
<documentation />*
<wsoap:module ... />*
<input messageLabel="xs:NCName"?
whttp:contentEncoding="xs:string"?? >
<documentation />*
<wsoap:module ... />*
<wsoap:header ... />*
<whttp:header ... />*??
</input>*
<output messageLabel="xs:NCName"?
whttp:contentEncoding="xs:string"?? >
<documentation />*
<wsoap:module ... />*
<wsoap:header ... />*
<whttp:header ... />*??
</output>*
<infault ref="xs:QName"
messageLabel="xs:NCName"?>
<documentation />*
<wsoap:module ... />*
</infault>*
<outfault ref="xs:QName"
messageLabel="xs:NCName"?>
<documentation />*
<wsoap:module ... />*
</outfault>*
</operation>*
</binding>
<service>
<endpoint name="xs:NCName" binding="xs:QName" address="xs:anyURI"?
whttp:authenticationScheme="xs:token"??
whttp:authenticationRealm="xs:string"?? >
<documentation />*
</endpoint>
</service>
</description>
Note:
The double question marks ("??") after the
attributes in the whttp namespace indicates that those
optional attributes only make sense when the SOAP binding uses HTTP
as the underlying protocol, for example, when the value of the
wsoap:protocol attribute is
"http://www.w3.org/2003/05/soap/bindings/HTTP/".
A Binding component (defined in [WSDL 2.0 Core Language]) is identified as a SOAP binding by assigning the value "http://www.w3.org/ns/wsdl/soap" to the {type} property of the Binding component.
Payload Construction. When formulating the SOAP envelope to be transmitted, the contents of the payload (i.e., the contents of the SOAP Body element information item of the SOAP envelope) MUST be what is defined by the corresponding Interface Message Reference component.†This is further subject to optimization by a feature in use which affects serialization, such as MTOM [SOAP Message Transmission Optimization Mechanism]. The following binding rules MUST be adhered to:
If the value of the {message content model} property of the Interface Message Reference component is "#any", then the payload MAY be any one XML element.
If the value is "#none", then the payload MUST be empty.†
If the value is "#element", then the payload MUST be the element information item identified by the {element declaration} property of the Interface Message Reference component.†
If the Interface Message Reference component is declared using a non-XML type system (as considered in the Types section of [WSDL 2.0 Core Language]), then additional binding rules MUST be defined to indicate how to map those components into the SOAP envelope.†
Note:
This SOAP binding extension only allows one single element in the SOAP body.
SOAP Header Construction. If the {soap headers} property as defined in section 5.9 Declaring SOAP Header Blocks exists and is not empty in a Binding Message Reference or Binding Fault component, then an element information item conforming to the element declaration of a SOAP Header Block component's {element declaration} property, in the {soap headers} property, MAY be turned into a SOAP header block for the corresponding message.
If the value of the SOAP Header Block component's {required} property is "true", the inclusion of this SOAP header block is REQUIRED, otherwise it is OPTIONAL.
And, if the SOAP Header
Block component's {mustUnderstand}
property is present and its value is "true", that particular SOAP
header block MUST be marked with a
mustUnderstand attribute information item
with a value of "true" or "1" as per the SOAP specification.
SOAP header blocks other than the ones declared in the {soap headers} property may be present at run-time, such as the SOAP header blocks resulting from SOAP modules declared as explained in section 5.8 Declaring SOAP Modules.
Every SOAP binding MUST indicate what version of SOAP is in use for the operations of the interface that this binding applies to.†
By default, SOAP 1.2 [SOAP 1.2 Part 1: Messaging Framework (Second Edition)] is used.
The SOAP protocol specification adds the following property to the WSDL component model (as defined in [WSDL 2.0 Core Language]):
{soap version} REQUIRED. A xs:string, to the Binding component.
<description>
<binding name="xs:NCName" interface="xs:QName"? type="xs:anyURI"
wsoap:version="xs:string"? >
...
</binding>
</description>
The XML representation for specifying the SOAP version is an optional attribute information item with the following Infoset properties:
A [local name] of version
A [namespace name] of "http://www.w3.org/ns/wsdl/soap"
A type of xs:string
See Table 5-1.
| Property | Value |
|---|---|
| {soap version} | The actual value of the
wsoap:version attribute information
item, if present; otherwise
"1.2". |
Every SOAP binding MUST indicate what underlying protocol is in use.†
The SOAP protocol specification adds the following property to the WSDL component model (as defined in [WSDL 2.0 Core Language]):
{soap underlying protocol} REQUIRED. A xs:anyURI, which is an absolute IRI as defined by [IETF RFC 3987], to the Binding component. This IRI refers to an appropriate SOAP underlying protocol binding (see SOAP Protocol Binding Framework in [SOAP 1.2 Part 1: Messaging Framework (Second Edition)]), which is to be used for any of the SOAP interactions described by this binding.
<description>
<binding name="xs:NCName" interface="xs:QName"? type="xs:anyURI"
wsoap:protocol="xs:anyURI" >
...
</binding>
</description>
The XML representation for specifying the SOAP protocol is a REQUIRED attribute information item with the following Infoset properties:
A [local name] of protocol
A [namespace name] of "http://www.w3.org/ns/wsdl/soap"
A type of xs:anyURI
See Table 5-2.
| Property | Value |
|---|---|
| {soap underlying protocol} | The actual value of the
wsoap:protocol attribute information
item. |
For every Interface Fault component contained in an Interface component, a mapping to a SOAP Fault MUST be described.† This binding extension specification allows the user to indicate the SOAP fault code and subcodes that are transmitted for a given Interface Fault component.
The SOAP Fault binding extension adds the following properties to the WSDL component model (as defined in [WSDL 2.0 Core Language]):
{soap fault code} REQUIRED. A union of xs:QName and xs:token, to the Binding Fault component, where:
when the value of the {soap version} is "1.2", the allowed QNames MUST be the ones defined by [SOAP 1.2 Part 1: Messaging Framework (Second Edition)], section 5.4.6†;
the allowed token value is "#any".
The value of this property identifies a possible SOAP fault for the operations in scope. If the value of this property is "#any", no assertion is made about the possible value of the SOAP fault code.
{soap fault subcodes} REQUIRED. A union of list of xs:QName, and xs:token where the allowed token value is "#any", to the Binding Fault component. The value of this property identifies one or more subcodes for this SOAP fault. The list of subcodes is the nested sequence of subcodes. An empty list represents a fault code without subcodes.
<description>
<binding >
<fault ref="xs:QName"
wsoap:code="union of xs:QName, xs:token"?
wsoap:subcodes="union of (list of xs:QName), xs:token"? >
<documentation />*
</fault>*
</binding>
</description>
The XML representation for binding a SOAP Fault are two attribute information items with the following Infoset properties:
wsoap:code OPTIONAL attribute information item
A [local name] of code
A [namespace name] of "http://www.w3.org/ns/wsdl/soap"
A type of union of xs:QName and xs:token where the allowed token value is "#any"<