Concept: MessageType (SoaML)
The specification of information exchanged between service consumers and providers.
Relationships
Main Description

Usage:  "MessageType" stereotypes UML DataType, Class

A MessageType is a kind of value object that represents information exchanged between participant requests and services. This information consists of data passed into and/or returned from the invocation of an operation or event signal defined in a service interface. A MessageType is in the domain or service-specific content and does not include header or other implementation or protocol-specific information.

MessageTypes are used to aggregate inputs, outputs, and exceptions to service operations as in WSDL. MessageTypes represent "pure data" that is communicated between parties - it is then up to the parties, based on the SOA specification, to interpret this data and act accordingly. As "pure data", message types can not have dependencies on the environment, location, or information system of either party.  This restriction rules out many common implementation techniques such as "memory pointers," that might be found inside an application. Good design practices suggest that the content and structure of messages provide for rich interaction of the parties without unnecessarily coupling or restricting their behavior or internal concerns.

The terms Data Transfer Object (DTO), Service Data Object (SDO), or value objects used in some technologies are similar in concept, though they tend to imply certain implementation techniques. A DTO represents data that can be freely exchanged between address spaces, and does not rely on specific location information to relate parts of the data. An SDO is a standard implementation of a DTO. A Value Object is a Class without identity and where equality is defined by value not reference. Also in the business world (or areas of business where EDI is commonplace) the term Document is frequently used. All these concepts can be represented by a MessageType. 

MessageType generally should be applied only to DataType, because it is intended to have no identity. However, it is recognized that many existing models do not clearly distinguish identity, either mixing Class and DataType, or only using Class. Recognizing this, SoaML allows MessageType to be applied to Class as well as DataType. In this case, the identity implied by the Class is not considered in the MessageType. The Class is treated as if it were a DataType. 

Semantics

MessageTypes represent service data exchanged between service consumers and providers. Service data is often a view (projections and selections) on information or domain class models representing the (often persistent) entity data used to implement service participants. MessageType encapsulates the inputs, outputs, and exceptions of service operations into a type based on direction. A MessageType can contain attributes with isID set to true.  This indicates the MessageType contains information that can be used to distinguish instances of the message payload. This information can be used to correlate long running conversations between service consumers and providers.

A service Operation is any Operation of an Interface provided or required by a ServicePoint or RequestPoint. Service Operations can use two different parameter styles, document centered (or message centered), or RPC (Remote Procedure Call) centered. Document centered parameter style uses MessageType for ownedParameter types, and the Operation can have at most one in, one out, and one exception parameter (an out parameter with isException set to true). All parameters of such an operation must be typed by a MessageType. For RPC style operations, a service Operation can have any number of in, inout, and out parameters and can have a return parameter as in UML2. In this case, the parameter types are restricted to PrimitiveType or DataType. This ensures no service Operation makes any assumptions about the identity or location of any of its parameters. All service Operations use call-by-value semantics in which the ownedParameters are value objects or data transfer objects. 
 

More Information