Mappage des définitions de schéma XML au système de type SDO
Chaque type de schéma XML est mappé à un type SDO. Utilisez ce mappage pour développer le code permettant de parcourir les graphiques de données des messages auxquels votre programme associe des médiations.
La version des objets de données de service (SDO) pris en charge par les médiations est Version 1.
Les schémas XML peuvent être imbriqués dans la section WSDL qui décrit les en-têtes SOAP et parties du message. Toutefois, la description de l'en-tête SOAP risque d'être davantage disponible en tant que schéma séparé ; dans ce cas, vous devez le charger dans le référentiel SDO où il peut être utilisé en phase d'exécution pour traiter tous les messages avec un en-tête correspondant.
Mappage d'un schéma à des classes Java
Chaque type complexe de schéma XML est mappé à un type SDO. Cela signifie qu'un élément contenant un type complexe est représenté par une instance d'un objet de données SDO. Ce type contient une propriété pour chaque élément, attribut ou caractère générique de la définition du type de schéma.
L'instance contient une valeur pour chaque propriété définie. Si la propriété est mappée à partir d'un type de schéma complexe, la valeur correspond à un autre objet de données SDO. Si la propriété est mappée à partir d'un type de schéma simple, la valeur correspond à une instance d'une classe Java™, comme illustré dans le tableau ci-après.
Type de schéma | Classe Java | Remarques |
---|---|---|
anyURI | java.lang.String | |
base64Binary | byte[] | Voir remarque 2 |
boolean | java.lang.Boolean/ boolean | Voir remarque 1 |
byte | java.lang.Byte / byte | Voir remarque 1 |
date | java.lang.String | |
dateTime | java.lang.String | |
decimal | java.math.BigDecimal | |
double | java.lang.Double / double | Voir remarque 1 |
duration | java.lang.String | |
ENTITIES | java.util.List | |
ENTITY | java.lang.String | |
float | ava.lang.Float / float | Voir remarque 1 |
gDay | java.lang.String | |
gMonth | java.lang.String | |
gMonthDay | java.lang.String | |
gYear | java.lang.String | |
gYearMonth | java.lang.String | |
hexBinary | byte[] | Voir remarque 2 |
ID | java.lang.String | |
IDREF | java.lang.String | |
IDREFS | java.util.List | |
Entier | java.lang.Integer / int | Voir remarque 1 |
integer | java.math.BigInteger | |
language | java.lang.String | |
long | java.lang.Long / long | Voir remarque 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 | Voir remarque 1 |
Chaîne | java.lang.String | |
heure | java.lang.String | |
jeton | java.lang.String | |
unsignedByte | java.lang.Short / short | Voir remarque 1 |
unsignedInt | java.lang.Long / long | Voir remarque 1 |
unsignedLong | java.math.BigInteger | |
unsignedShort | java.lang.Integer / int | Voir remarque 1 |
- DO convertit automatiquement les primitives (int, long et so on) en objets lorsque cela est nécessaire. Cela signifie que vous pouvez utiliser une combinaison de méthodes spécialisées (getInt, setInt, getLong, setLong), ainsi que les méthodes get et set génériques.
- Les tableaux d'octets étant modifiables, vous pouvez mettre à jour la valeur sans avoir à la redéfinir sur l'objet de données. Toutefois, lorsque cela se produit, l'objet de données peut ne pas être conscient de cette mise à jour implicite. Lorsque vous utilisez des valeurs de tableau d'octets, utilisez toujours la méthode setBytes() pour mettre à jour l'objet de données de manière explicite.
Utilisation d'attributs et d'éléments globaux
Lorsqu'un schéma est mappé à SDO, un type SDO spécial, généralement appelé 'DocumentRoot', est défini. Ce type est un conteneur de tous les attributs et éléments globaux du schéma. Chaque fois que vous devez rechercher une propriété SDO pour un attribut ou un élément global, vous devez rechercher le type ‘DocumentRoot', puis la propriété appropriée à l'intérieur.
Le schéma ci-après définit la structure des messages des services Web. En comparant ce schéma aux informations de Mappage des graphiques de données SDO pour des messages des services Web, vous pouvez voir à l'oeuvre le mappage du schéma à 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>