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.
<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>
The following are mutually exclusive elements: