WebSphere

SMO structure

The service message object (SMO) structure starts with a root data object called a ServiceMessageObject, which in turn contains other data objects representing header, body, attachment, and context data.

Introduction

There is a schema declaration that specifies the overall structure of the SMO. The schema is generated by the WebSphere® Integration Developer tools.
Note: The root ServiceMessageObject does not appear in XPath expressions: it is represented by a forward slash "/".

SMO schema

<schema xmlns="http://www.w3.org/2001/XMLSchema"
		xmlns:ecore="http://www.eclipse.org/emf/2002/Ecore"
		xmlns:mq="http://www.ibm.com/xmlns/prod/websphere/mq/sca/6.0.0"
		xmlns:sdoXML="commonj.sdo/xml" xmlns:smo="http://www.ibm.com/websphere/sibx/smo/v6.0.1"
		xmlns:wsa="http://schemas.xmlsoap.org/ws/2004/08/addressing"
		xmlns:wsa10="http://www.w3.org/2005/08/addressing"
		xmlns:httpsca="http://www.ibm.com/xmlns/prod/websphere/http/sca/6.1.0"

		targetNamespace="http://www.ibm.com/websphere/sibx/smo/v6.0.1"

		ecore:nsPrefix="ServiceMessageObject"
		ecore:package="com.ibm.ws.sibx.smobo">

    <import namespace="http://www.w3.org/XML/1998/namespace"
			schemaLocation="./xml.xsd"/>

    <import namespace="http://www.ibm.com/xmlns/prod/websphere/mq/sca/6.0.0"
    		schemaLocation="./wmqstructures.xsd"/>

    <import namespace="http://schemas.xmlsoap.org/ws/2004/08/addressing"
    		schemaLocation="./ws-addressing.xsd"/>

    <import namespace="http://www.w3.org/2005/08/addressing"
			schemaLocation="./ws-addr-10.xsd"/>

    <import namespace="http://www.ibm.com/xmlns/prod/websphere/http/sca/6.1.0"
    		schemaLocation="./httpstructures.xsd"/>

	<!-- Global element for SMO -->
	<element name="smo" type="smo:ServiceMessageObject"/>


	<!-- Type definition for SMO -->
	<complexType name="ServiceMessageObject">
		<sequence>
			
			<!-- Top-level folders are always present, but may themselves be empty. -->
			<element name="context" type="smo:ContextType"/>
			<element name="headers" type="smo:HeadersType"/>
			
			<!-- Body may be absent (null as seen through Java/SDO). -->
			<element minOccurs="0" name="body" type="anyType"/>
			
			<!--  List of attachments -->
 			<element name="attachments" type="smo:AttachmentType" minOccurs="0" maxOccurs="unbounded"/>
		</sequence>
	</complexType>


	<!-- ContextType - container for the individual context elements. -->
	<complexType name="ContextType">
		<sequence>
			<element minOccurs="0" name="correlation" type="anyType"/>
			<element minOccurs="0" name="transient" type="anyType"/>
			<element minOccurs="0" name="failInfo" type="smo:FailInfoType"/>
			<element maxOccurs="1" minOccurs="0" name="primitiveContext" type="smo:PrimitiveContextType"/>
			<element minOccurs="0" name="shared" type="anyType"/>
			<element minOccurs="0" name="dynamicProperty" type="smo:DynamicPropertyContextType"/>
			<element minOccurs="0" name="userContext" type="smo:UserContextType"/>
		</sequence>
	</complexType>


	<complexType name="HeadersType">
		<sequence>
			<element minOccurs="0" name="SMOHeader" type="smo:SMOHeaderType"/>
			<element minOccurs="0" name="JMSHeader" type="smo:JMSHeaderType"/>
			<element maxOccurs="unbounded" minOccurs="0" name="SOAPHeader" type="smo:SOAPHeaderType"/>
			<element minOccurs="0" name="SOAPFaultInfo" type="smo:SOAPFaultInfoType"/>
			<element maxOccurs="unbounded" minOccurs="0" name="properties" type="smo:PropertyType"/>
			<element minOccurs="0" name="MQHeader" type="smo:MQHeaderType"/>
			<element minOccurs="0" name="HTTPHeader" type="smo:HTTPHeaderType"/>
			<element minOccurs="0" name="EISHeader" type="smo:EISHeaderType"/>
			<element minOccurs="0" name="WSAHeader" type="smo:WSAHeaderType"/>
		</sequence>
	</complexType>


	<!-- AttachmentType - container for an individual attachment. -->
	<complexType name="AttachmentType">
    	<sequence>
      		<element name="contentID" type="anyURI"/>
      		<element name="contentType" type="token"/>
      		<choice>
        		<element name="data" type="base64Binary"/>
        		<element name="bodyPath" type="string"/>
      		</choice>
    	</sequence>
  	</complexType>	


	<complexType name="SMOHeaderType">
		<sequence>
			<element minOccurs="1" name="MessageUUID" type="string"/>
			<element minOccurs="1" name="Version" type="smo:VersionType"/>
			<element minOccurs="0" name="MessageType" type="string"/>
			<element minOccurs="0" name="Operation" type="string"/>
			<element minOccurs="0" name="Action" type="string"/>
			<element minOccurs="0" name="Target" type="smo:TargetAddressType"/>
			<element maxOccurs="unbounded" minOccurs="0" name="AlternateTarget" type="smo:TargetAddressType"/>
			<element minOccurs="0" name="SourceNode" type="string"/>
			<element minOccurs="0" name="SourceBindingType" type="smo:BindingTypeType"/>
			<element minOccurs="0" name="Interface" type="string"/>
		</sequence>
	</complexType>

	<simpleType name="BindingTypeType">
		<restriction base="string">
			<enumeration value="NotSet"/>
			<enumeration value="JMS"/>
			<enumeration value="MQJMS"/>
			<enumeration value="GenericJMS"/>
			<enumeration value="MQ"/>
			<enumeration value="WebService"/>
			<enumeration value="HTTP"/>
			<enumeration value="SCA"/>
			<enumeration value="EIS"/>
			<enumeration value="SLSB"/>
		</restriction>
	</simpleType>
	

	<complexType name="SOAPFaultInfoType">
		<sequence>
			<element name="faultcode" type="QName"/>
			<element name="faultstring" type="string"/>
			<element minOccurs="0" name="faultactor" type="anyURI"/>
		</sequence>
	</complexType>


	<complexType name="FailInfoType">
		<sequence>
			<element name="failureString" type="string"/>
			<element name="origin" type="string"/>
			<element name="invocationPath">
				<complexType>
					<sequence>
						<element maxOccurs="unbounded" name="primitive" type="smo:PrimitiveType"/>
					</sequence>
				</complexType>
			</element>
			<element minOccurs="0" name="predecessor" type="smo:FailInfoType"/>
		</sequence>
		<attribute ref="xml:lang"/>
	</complexType>


	<complexType name="PrimitiveType">
		<attribute name="inTerminal" type="string" use="required"/>
		<attribute name="name" type="string" use="required"/>
		<attribute name="outTerminal" type="string"/>
	</complexType>


	<complexType name="PropertyType">
		<sequence>
			<element name="name" type="string"/>
			<element name="value" type="anySimpleType"/>
			<element minOccurs="0" name="type" type="string"/>
		</sequence>
	</complexType>


	<complexType name="VersionType">
		<sequence>
			<element name="Version" type="integer"/>
			<element name="Release" type="integer"/>
			<element name="Modification" type="integer"/>
		</sequence>
	</complexType>


	<complexType name="TargetAddressType">
		<sequence>
			<element name="address" type="anyURI"/>
		</sequence>
		<attribute name="import" type="string"/>
		<attribute name="bindingType" type="smo:BindingTypeType"/>
	</complexType>


	<complexType name="JMSHeaderType">
		<sequence>
			<element minOccurs="0" name="JMSDestination" type="anyURI"/>
			<element minOccurs="0" name="JMSDeliveryMode" type="smo:persistenceType"/>
			<element minOccurs="0" name="JMSMessageID" type="string"/>
			<element minOccurs="0" name="JMSTimestamp" type="long"/>
			<element minOccurs="0" name="JMSCorrelationID" type="string"/>
			<element minOccurs="0" name="JMSReplyTo" type="anyURI"/>
			<element minOccurs="0" name="JMSRedelivered" type="boolean"/>
			<element minOccurs="0" name="JMSType" type="string"/>
			<element minOccurs="0" name="JMSExpiration" type="long"/>
			<element minOccurs="0" name="JMSPriority" type="smo:priorityType"/>
		</sequence>
	</complexType>


	<!-- SOAPHeader - the container for the individual SOAP headers -->
	<complexType name="SOAPHeaderType">
		<sequence>
			<element name="nameSpace" type="anyURI"/>
			<element name="name" type="NCName"/>
			<element minOccurs="0" name="prefix" type="NCName"/>
			<element name="value" type="anyType"/>
		</sequence>
	</complexType>


	<!-- Types used in headers. -->
	<simpleType name="priorityType">
		<restriction base="integer">
			<minInclusive value="0"/>
			<maxInclusive value="9"/>
		</restriction>
	</simpleType>


	<simpleType name="persistenceType">
		<restriction base="string">
			<enumeration value="NonPersistent"/>
			<enumeration value="Persistent"/>
		</restriction>
	</simpleType>


	<!-- MQ Header Type -->
	<complexType name="MQHeaderType">
		<sequence>
			<element minOccurs="0" name="md" type="mq:MQMD"/>
			<element minOccurs="0" name="control" type="mq:MQControl"/>
			<element maxOccurs="unbounded" minOccurs="0" name="header" type="smo:MQChainedHeaderType"/>
		</sequence>
	</complexType>


	<!-- MQ Chained Header Type -->
	<complexType name="MQChainedHeaderType">
		<complexContent>
			<extension base="mq:MQControl">
				<sequence>
					<choice> <!-- This choice should be extended when other header types become supported. -->
						<element name="value" type="anyType"/>
						<element name="opaque" type="mq:MQOpaqueHeader"/>
						<element name="rfh" type="mq:MQRFH"/>
						<element name="rfh2" type="mq:MQRFH2"/>
					</choice>
				</sequence>
			</extension>
		</complexContent>
	</complexType>

	<!-- UserContextType -->
	<complexType name="UserContextType">
		<sequence>
			<element maxOccurs="unbounded" minOccurs="0" name="entries" type="smo:ComplexPropertyType"/>
		</sequence>
	</complexType>
	
	<complexType name="ComplexPropertyType">
		<sequence>
			<element name="name" type="string"/>
			<element name="value" type="anyType"/>
			<element minOccurs="0" name="type" type="string"/>
		</sequence>
	</complexType>


	<!-- PrimitiveContextType -->
	<complexType name="PrimitiveContextType">
		<sequence>
			<element maxOccurs="unbounded" minOccurs="0" name="EndpointLookupContext" type="smo:EndpointLookupContextType"/>
	  		<element maxOccurs="1" minOccurs="0" name="FanOutContext" type="smo:FanOutContextType"/>
		</sequence>
	</complexType>


	<!-- Start of DynamicPropertyContext and related types -->
	
	<complexType name="DynamicPropertyContextType">
		<sequence>
			<element maxOccurs="unbounded" minOccurs="0" name="propertySets" type="smo:DynamicPropertySetType"/>
		</sequence>
		<attribute name="isPropagated" type="boolean" />
	</complexType>
	
	<!-- A dynamic property set holds dynamic properties. -->
	<complexType name="DynamicPropertySetType">
		<sequence>
			<element minOccurs="1" name="group" type="string" />
			<element maxOccurs="unbounded" minOccurs="0" name="properties" type="smo:PropertyType"/>
		</sequence>
	</complexType>

	<!-- End of DynamicPropertyContext and related types -->
	
	<!-- start of EndpointLookupContextType and related types -->
	
	<complexType name="EndpointLookupContextType">
		<sequence>
			<element maxOccurs="1" minOccurs="1" name="endpointReference" type="wsa:EndpointReferenceType"/>
			<element maxOccurs="1" minOccurs="0" name="registryAnnotations" type="smo:RegistryAnnotationsType"/>
		</sequence>
	</complexType>
	
	<complexType name="RegistryAnnotationsType">
		<sequence>
			<element maxOccurs="unbounded" minOccurs="0" name="property" type="smo:RegistryPropertyType"/>
			<element maxOccurs="unbounded" minOccurs="0" name="classification" type="anyURI"/>
			<element maxOccurs="unbounded" minOccurs="0" name="relationship" type="smo:RegistryRelationshipType"/>
		</sequence>
	</complexType>
	
	<complexType name="RegistryPropertyType">
		<sequence>
			<element maxOccurs="1" minOccurs="1" name="name" type="string"/>
			<element maxOccurs="1" minOccurs="0" name="value" type="string"/>
		</sequence>
	</complexType>
	
	<complexType name="RegistryRelationshipType">
		<sequence>
			<element maxOccurs="1" minOccurs="1" name="relationshipName" type="string"/>
			<element maxOccurs="1" minOccurs="0" name="targetName" type="string"/>
			<element maxOccurs="1" minOccurs="0" name="targetNamespace" type="anyURI"/>
			<element maxOccurs="1" minOccurs="0" name="targetVersion" type="string"/>
		</sequence>
	</complexType>
	
	<!-- end of EndpointLookupContextType and related types -->
	
	<!-- start of FanOutContextType -->
	
	<complexType name="FanOutContextType">
		<sequence>
			<element maxOccurs="1" minOccurs="0" name="iteration" type="integer"/>
			<element maxOccurs="1" minOccurs="0" name="occurrence" type="anyType"/>
		</sequence>
	</complexType>

	<!-- end of FanOutContextType -->

	<!-- start of HTTPHeaderType -->

	<complexType name="HTTPHeaderType">
		<sequence>
			<element name="control" minOccurs="0" type="httpsca:HTTPControl"/>
			<element name="header" minOccurs="0" maxOccurs="unbounded" type="httpsca:HTTPHeader"/>
	  </sequence>
	</complexType>

	<!-- end of HTTPHeaderType -->


  <!-- start of EISHeaderType -->

	<complexType name="EISHeaderType">
		<sequence>
			<element minOccurs="0" name="EISInteractionSpec" type="anyType"/>
			<element minOccurs="0" name="EISConnectionSpec" type="anyType"/>
		</sequence>
	</complexType>

  <!-- end of EISHeaderType -->

  <!-- start of WSAHeaderType -->

	<complexType name="WSAHeaderType">
		<sequence>
			<element minOccurs="0" ref="wsa10:To"></element>
			<element minOccurs="0" name="ReferenceParameters" type="wsa10:ReferenceParametersType"/>
			<element minOccurs="0" ref="wsa10:From"></element>
			<element minOccurs="0" ref="wsa10:ReplyTo"></element>
			<element minOccurs="0" ref="wsa10:FaultTo"></element>
			<element minOccurs="0" ref="wsa10:Action"></element>
			<element minOccurs="0" ref="wsa10:MessageID"></element>
			<element minOccurs="0" maxOccurs="unbounded" ref="wsa10:RelatesTo"/>
		</sequence>
		<attribute name="version" type="smo:WSASchemaType" use="optional"/>
	</complexType>

	<simpleType name="WSASchemaType">
		<restriction base="string">
			<enumeration value="http://www.w3.org/2005/08/addressing"/>
			<enumeration value="http://schemas.xmlsoap.org/ws/2004/08/addressing"/>
		</restriction>
	</simpleType>

  <!-- end of WSAHeaderType -->


</schema>
Note:
  • In an instance of an SMO, the anyType field acts as a place where a more complex structure can be substituted.
  • In an instance of an SMO, the value in an anySimpleType field can be any of the Java™ simple types. For example, short, int, long, double, String or boolean.
  • In an instance of an SMO, the FailInfoType contains an attribute whose value is a language code.

Schema field descriptions

ServiceMessageObject
Root data object.
context
Contextual information that can be shared between mediation primitives, but is not directly derived from the message payload or headers.
correlation
Allows data that is not part of the message payload to be passed between mediation primitives. The correlation context can link a specific request message with its response.
transient
Allows data that is not part of the message payload to be passed between mediation primitives. The transient context is restricted to a single message flow, and cannot link requests and responses.
failInfo
Represents exception information, for use when a fail terminal is wired.
failureString
Indicates the cause of the failure.
origin
The name of the failing mediation primitive
invocationPath
A list of PrimitiveTypes.
inTerminal
The name of an input terminal.
name
The name of a mediation primitive.
outTerminal
The name of an output terminal. The failing mediation primitive does not name an output terminal because failures occur before using the output terminal.
predecessor
Another instance of a FailInfoType.
primitiveContext
Used to store context information about the primitive.
EndpointLookupContext
Used to store the result of a WebSphere Service Registry and Repository query.
endpointReference
Conveys the information needed to address the Web service endpoint.
registryAnnotations
Used to store user-defined metadata.
property
A user-defined property.
name
The name of the user-defined property.
value
The value assigned to the user-defined property.
classification
A user-defined classification.
relationship
A user-defined relationship.
relationshipName
The name of the relationship.
targetName
The name of the object that is the target of the relationship.
targetNameSpace
The name space in which the name of the target object occurs.
targetVersion
The version of the target object.
FanOutContext
Used by the Fan Out mediation primitive when in iterate mode.
iteration
The number of the iteration.
occurrence
Holds one occurrence of a repeating message element.
shared
Allows data that is not part of the message payload to be passed between mediation primitives. The shared context is a global storage area for data aggregation. The content of the shared context does not persist across a request and response flow, through callout invocation.
dynamicProperty
After mediation policy information has been retrieved from the registry, it is stored in the dynamicProperty context. You can use a mediation policy to override mediation primitive properties, if the properties are promoted. Each property you override belongs to a group, and has a name and value.
propertySets
Used to store sets of properties.
group
The group to which the properties belong.
properties
The mediation primitive properties to override.
name
The alias name of the mediation primitive property.
value
The value assigned to the mediation primitive property.
type
The type of the mediation primitive property.
isPropagated
If true, the dynamicProperty information is propagated to the response flow. This field can be set using the Policy Resolution mediation primitive property: Propagate to response flow.
userContext
Allows data that is not part of the message payload to be passed between SCA components in the same module.
entries
The data to pass between SCA components. The entries are populated using the context service API. They can be accessed using the context service API, or accessed from the SMO.
name
The name of a property. This is user-defined.
value
The value assigned to the property. The value can be a simple type or a complex type (BO).
type
The type of the property.
headers
Header information associated with the message.
SMOHeader
Models generic header fields.
MessageUUID
The Universally Unique IDentifier (UUID) of the message. The UUID is a message tag that enables a specific message to be referred to unambiguously.
Version
Version information relating to this message.
Version
The version number.
Release
The release number.
Modification
The modification number.
MessageType
The type of message. For example, a request or response.
Operation
The operation.
Action
The action.
Target
Used to store the dynamic endpoint. The Target element is used by the run time if the Use dynamic endpoint if set in the message header property is set, and there is a valid endpoint or import specified in the element.
bindingType
The bindingType of the import. Has a limited number of values, listed in the BindingTypeType element of the schema.
import
The import name to invoke.
address
The address (URI) of the target.
AlternateTarget
Can contain a list of alternate service addresses.
bindingType
The bindingType of the import. Has a limited number of values, listed in the BindingTypeType element of the schema.
import
The import name to invoke.
address
A list of alternate service addresses.
SourceNode
For a request flow, the name of the export that received the message. For a response flow, the name of the import that received the response.
SourceBindingType
For a request flow, the binding type of the export. For a response flow, the binding type of the import. Has a limited number of values, listed in the BindingTypeType element of the schema.
Interface
The name of the interface, on the export or import.
JMSHeader
Models JMS header fields.
JMSDestination
The JMSDestination.
JMSDeliveryMode
The JMSDeliveryMode. The delivery mode can be persistent or not.
JMSMessageID
The JMSMessageID.
JMSTimestamp
The JMSTimestamp.
JMSCorrelationID
The JMSCorrelationID is used for linking one message with another.
JMSReplyTo
The JMSReplyTo information indicates where a reply, to this message, should be sent.
JMSRedelivered
The JMSRedelivered information.
JMSType
The JMSType.
JMSExpiration
The JMSExpiration.
JMSPriority
The JMSPriority.
SOAPHeader
Models SOAP header fields.
nameSpace
The name space.
name
The name.
prefix
The prefix.
value
The value.
SOAPFaultInfo
Models SOAP fault information.
faultcode
The SOAP fault code. Intended for use by software.
faultstring
The SOAP fault string. A human-readable explanation of the fault.
faultactor
The SOAP fault actor. Information about which SOAP node caused the fault.
properties
Models a list of properties whose names are not fixed from one message instance to the next.
name
The name of the property.
value
The value of the property.
type
The type of the property.
MQHeader
Models WebSphere MQ message header information.
md
MQ message descriptor (MQMD), excluding message format information. For more information, see: MQ header information in the SMO. For full details, refer to WebSphere MQ documentation.
Report
MsgType
Expiry
Feedback
Priority
Persistence
MsgId
CorrelId
BackoutCount
ReplyToQ
ReplyToQMgr
UserIdentifier
AccountingToken
ApplIdentityData
PutApplType
PutApplName
PutDate
PutTime
ApplOriginData
GroupId
MsgSeqNumber
Offset
MsgFlags
OriginalLength
control
Format and encoding information describing the message body.
Encoding
CodedCharSetId
Control field that describes the character set identifier of character data in the message.
Format
header
WebSphere MQ message header.
Encoding
Control field that describes the encoding of the header.
CodedCharSetId
Control field that describes the character set identifier of character data in the header.
Format
Control field that describes the format.
One of the following four mutually exclusive elements:
value
Contains an arbitrary DataObject representing the message header, usually requiring a user-provided MQ header data binding.
opaque
Represents an MQ header, of the standard structure, as opaque binary data.
StrucId
Version
Flags
data
rfh
Represents an MQ RFH (version 1) header.
Flags
property
name
value
rfh2
Represents an MQ RFH (version 2) header.
Flags
NameValueCCSID
An MQLONG limited to the values: 1200, 1208, 13488, or 17584.
folder
Represents a folder in an MQRFH version 2.
name
group
Represents a group.
property
A name-type-value triplet.
name
type
A string, limited to the values: string, boolean, bin.hex, i1, i2, i4, i8, int, r4, or r8.
value
HTTPHeader
Models HTTP header fields.
Note: One of the HTTP header fields is reused in the context of the service gateway.
For more information, see: SMO: HTTP schema.
control
Models HTTP header fields that are widely used in the context of service mediation. Most of these header fields are defined in the HTTP 1.1 specification.
header
Models any other HTTP header fields that are defined in the HTTP 1.1 specification.
EISHeader
Models enterprise information systems (EIS) header fields.
WSAHeader
Models Web Services Addressing (WS-Addressing) header fields. The WSAHeader holds WS-Addressing header information from a received message (for use by the mediation flow); the values are not used when sending messages.
body
The body of the message.
attachments
The unreferenced attachments of a SOAP message. Unreferenced attachments are MIME parts included in a SOAP/HTTP message, and are not defined in the WSDL portType.
Note: You can only send or receive SOAP attachments if the module binding is one of the following types: Web service binding SOAP 1.1/HTTP using JAX-WS, Web service binding SOAP 1.2/HTTP using JAX-WS, or SCA binding.
contentID
Used to uniquely identify the attachment in the message. Contains the value of the Content-ID header, of the MIME part.
contentType
Defines the type of data held by the attachment, for example, text/xml or image/gif. Contains the value of the Content-Type header, of the MIME part.

The following are mutually exclusive elements:

data
The attachment data.
bodyPath
Currently, unused.

reference Reference topic

Terms of use | Feedback


Timestamp icon Last updated: 20 June 2010 00:40:00 BST (DRAFT)


http://publib.boulder.ibm.com/infocenter/dmndhelp/v6r2mx/topic//com.ibm.wbit.help.medprim620.doc/ref/rwesb_SMOStructure.html
Copyright IBM Corporation 2005, 2010. All Rights Reserved.
This information center is powered by Eclipse technology (http://www.eclipse.org).
iDoc on