将 XML 模式定义映射到 SDO 类型系统
将每个 XML 模式类型映射到 SDO 类型。使用此映射可帮助您开发代码,从而浏览程序调解的消息的数据图。
调解所支持的服务数据对象 (SDO) 版本是 V1。
可以将 XML 模式嵌入到描述消息部件和 SOAP 头的 WSDL 部分中。但是 SOAP 头描述更可能用作单独模式,在此情况下,您应该将其加载到 SDO 存储库中(在此存储库中,可在运行时使用该描述符处理具有匹配头的任何消息)。
Java 类匹配的模式
每个 XML 模式复杂类型会映射到 SDO 类型。这表示具有复杂类型的元素可由 SDO 数据对象的实例表示。此类型具有模式类型定义中包含的每个元素、属性或通配符的属性。
此实例包含已设置的每个属性的值。如果从模式复杂类型映射此属性,那么值为另一个 SDO 数据对象。如果从模式简单类型映射该属性,那么值为 Java™ 类的实例,如下表中所示。
模式类型 | Java 类 | 注释 |
---|---|---|
anyURI | java.lang.String | |
base64Binary | byte[] | 请参阅注释 2 |
boolean | java.lang.Boolean/ boolean | 请参阅注释 1 |
byte | java.lang.Byte / byte | 请参阅注释 1 |
date | java.lang.String | |
dateTime | java.lang.String | |
decimal | java.math.BigDecimal | |
双精度 | java.lang.Double / double | 请参阅注释 1 |
duration | java.lang.String | |
ENTITIES | java.util.List | |
ENTITY | java.lang.String | |
float | ava.lang.Float / float | 请参阅注释 1 |
gDay | java.lang.String | |
gMonth | java.lang.String | |
gMonthDay | java.lang.String | |
gYear | java.lang.String | |
gYearMonth | java.lang.String | |
hexBinary | byte[] | 请参阅注释 2 |
ID | java.lang.String | |
IDREF | java.lang.String | |
IDREFS | java.util.List | |
int | java.lang.Integer / int | 请参阅注释 1 |
integer | java.math.BigInteger | |
language | java.lang.String | |
long | java.lang.Long / long | 请参阅注释 1 |
Name | java.lang.String | |
NCName | java.lang.String | |
negativeInteger | java.math.BigInteger | |
NKTOKENS | java.util.List | |
NMTOKEN | java.lang.String | |
nonNegativeInteger | java.math.BigInteger | |
nonPositiveInteger | java.math.BigInteger | |
normalisedString | java.lang.String | |
NOTATION | javax.xml.namespace.QName | |
positiveInteger | java.math.BigInteger | |
QName | javax.xml.namespace.QName | |
short | java.lang.Short / short | 请参阅注释 1 |
string | java.lang.String | |
time | java.lang.String | |
token | java.lang.String | |
unsignedByte | java.lang.Short / short | 请参阅注释 1 |
unsignedInt | java.lang.Long / long | 请参阅注释 1 |
unsignedLong | java.math.BigInteger | |
unsignedShort | java.lang.Integer / int | 请参阅注释 1 |
Notes:
- 根据需要,SDO 自动将原语(int、long 等)转换为对象。这表示您可以混合使用专用方法(getInt、setInt、getLong 和 setLong)以及通用 get 和 set 方法。
- 由于字节数组可变,因此可以更新值,而无需将其设置回数据对象。但是,发生此情况时,数据对象可能不会注意到隐式更新。使用字节数组值时,始终使用 setBytes() 方法显式地更新数据对象。
使用全局元素和属性
当模式映射到 SDO 时,定义特殊 SDO 类型(通常称为“DocumentRoot”)。此类型是模式中所有全局元素和属性的容器。不管何时需要定位全局元素或属性的 SDO 属性,都应定位“DocumentRoot”类型,然后在其中定位相应属性。
以下模式定义 Web 服务消息的布局。通过将此模式与Web Service 消息的 SDO 数据图映射中的信息进行比较,可以查看处于正操作的 SDO 映射的模式。
<?xml version="1.0"?>
<xsd:schema
targetNamespace="http://www.ibm.com/ns/2004/05/webservices/messagemodel"
xmlns:tns="http://www.ibm.com/ns/2004/05/webservices/messagemodel"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<xsd:import namespace="http://schemas.xmlsoap.org/soap/envelope/"/>
<xsd:element name="Info">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="operationName" nillable="true" type="xsd:string"/>
<xsd:element name="messageName" nillable="true" type="xsd:string"/>
<xsd:element name="messageType" nillable="true" type="xsd:string"/>
<xsd:element name="headers" type="tns:HeaderEntryType" maxOccurs="unbounded"/>
<xsd:element name="attachments" type="tns:AttachmentEntryType" maxOccurs="unbounded"/>
<xsd:element name="body" type="tns:BodyType"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:complexType name="BodyType" abstract="true"/>
<xsd:complexType name="HeaderEntryType" abstract="true"/>
<xsd:complexType name="AttachmentEntryType" abstract="true"/>
<xsd:complexType name="SOAPFaultBody">
<xsd:complexContent>
<xsd:extension base="tns:BodyType">
<xsd:sequence>
<xsd:element name="faultcode" type="xsd:QName"/>
<xsd:element name="faultstring" type="xsd:string"/>
<xsd:element name="faultactor" type="xsd:anyURI" minOccurs="0"/>
<xsd:element name="detail" type="soap:detail" minOccurs="0"/>
</xsd:sequence>
</xsd:extension>
</xsd:complexContent>
</xsd:complexType>
<xsd:complexType name="SOAP_1_1_HeaderEntryType">
<xsd:complexContent>
<xsd:extension base="tns:HeaderEntryType">
<xsd:sequence>
<xsd:element name="mustUnderstand" nillable="true" type="xsd:boolean"/>
<xsd:element name="actor" nillable="true" type="xsd:anyURI"/>
<xsd:any/>
</xsd:sequence>
</xsd:extension>
</xsd:complexContent>
</xsd:complexType>
<xsd:complexType name="SOAP_1_1_BoundHeaderEntryType">
<xsd:complexContent>
<xsd:extension base="tns:HeaderEntryType">
<xsd:sequence>
<xsd:element name="mustUnderstand" nillable="true" type="xsd:boolean"/>
<xsd:element name="actor" nillable="true" type="xsd:anyURI"/>
<xsd:element name="messagePart" type="xsd:string"/>
</xsd:sequence>
</xsd:extension>
</xsd:complexContent>
</xsd:complexType>
<xsd:complexType name="MIMEAttachmentEntryType">
<xsd:complexContent>
<xsd:extension base="tns:AttachmentEntryType">
<xsd:sequence>
<xsd:element name="contentType" type="xsd:string"/>
<xsd:element name="contentTransferEncoding" type="xsd:string"/>
<xsd:element name="contentId" type="xsd:string"/>
<xsd:element name="data" type="xsd:base64Binary"/>
</xsd:sequence>
</xsd:extension>
</xsd:complexContent>
</xsd:complexType>
<xsd:complexType name="BoundMIMEAttachmentEntryType">
<xsd:complexContent>
<xsd:extension base="tns:AttachmentEntryType">
<xsd:sequence>
<xsd:element name="contentType" type="xsd:string"/>
<xsd:element name="contentTransferEncoding" type="xsd:string"/>
<xsd:element name="contentId" type="xsd:string"/>
<xsd:element name="messagePart" type="xsd:string"/>
</xsd:sequence>
</xsd:extension>
</xsd:complexContent>
</xsd:complexType>
<xsd:complexType name="UnknownBodyType">
<xsd:complexContent>
<xsd:extension base="tns:BodyType">
<xsd:sequence>
<xsd:any/>
</xsd:sequence>
<xsd:attribute name="encodingStyle" type="xsd:string"/>
</xsd:extension>
</xsd:complexContent>
</xsd:complexType>
</xsd:schema>