Correlación de definiciones de esquema XML en el sistema de tipo SDO
Cada tipo del esquema XML se correlaciona con un tipo SDO. Utilice esta correlación como ayuda para desarrollar código para navegar por los gráficos de datos de los mensajes que media el programa.
La versión de SDO (Service Data Objects) que soportan las mediaciones es Versión 1.
Los esquemas XML pueden incrustarse en las secciones WSDL que describen las partes del mensaje y las cabeceras SOAP. Sin embargo, la descripción de la cabecera SOAP es más probable que esté disponible como un esquema separado, en cuyo caso debe cargarla en el repositorio SDO donde se puede utilizar en tiempo de ejecución para procesar cualquier mensaje con una cabecera coincidente.
Correlación de esquema con la clase Java
Cada tipo complejo del esquema XML se correlaciona con un tipo SDO. Esto significa que cada elemento que tenga un tipo complejo se representa mediante una instancia de un objeto de datos SDO. El tipo tiene una propiedad para cada elemento, atributo o comodín contenido en la definición de tipo de esquema.
La instancia contiene un valor para cada propiedad establecida. Si la propiedad se correlaciona con un tipo complejo del esquema, el valor es otro objeto de datos SDO. Si la propiedad se correlaciona desde un tipo sencillo del esquema, el valor es una instancia de una clase Java™, tal como se muestra en la tabla siguiente.
Tipo de esquema | Clase Java | Notas |
---|---|---|
anyURI | java.lang.String | |
base64Binary | byte[] | Consulte la nota 2 |
booleano | java.lang.Boolean/ boolean | Consulte la nota 1 |
byte | java.lang.Byte / byte | Consulte la nota 1 |
date | java.lang.String | |
dateTime | java.lang.String | |
decimal | java.math.BigDecimal | |
double | java.lang.Double / double | Consulte la nota 1 |
duration | java.lang.String | |
ENTITIES | java.util.List | |
ENTITY | java.lang.String | |
float | java.lang.Float / float | Consulte la nota 1 |
gDay | java.lang.String | |
gMonth | java.lang.String | |
gMonthDay | java.lang.String | |
gYear | java.lang.String | |
gYearMonth | java.lang.String | |
hexBinary | byte[] | Consulte la nota 2 |
ID | java.lang.String | |
IDREF | java.lang.String | |
IDREFS | java.util.List | |
int | java.lang.Integer / int | Consulte la nota 1 |
entero | java.math.BigInteger | |
language | java.lang.String | |
long | java.lang.Long / long | Consulte la nota 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 | Consulte la nota 1 |
serie | java.lang.String | |
time | java.lang.String | |
señal | java.lang.String | |
unsignedByte | java.lang.Short / short | Consulte la nota 1 |
unsignedInt | java.lang.Long / long | Consulte la nota 1 |
unsignedLong | java.math.BigInteger | |
unsignedShort | java.lang.Integer / int | Consulte la nota 1 |
- SDO convierte automáticamente los valores primitivos (int, long, etc.) en objetos, según sea necesario. Esto significa que puede utilizar una combinación de métodos especializados (getInt, setInt, getLong, setLong) y también los métodos get y set genéricos.
- Dado que las matrices de bytes son mutables, puede actualizar el valor sin volver a establecerlo en el objeto de datos. No obstante, cuando esto ocurre, es posible que el objeto de datos no reconozca la actualización implícita. Cuando trabaje con valores de matrices de bytes, utilice siempre el método setBytes() para actualizar explícitamente el objeto de datos.
Trabajo con elementos y atributos globales
Cuando se correlaciona un esquema con SDO, se define un tipo de SDO especial, denominado generalmente ‘DocumentRoot’. Este tipo es un contenedor de todos los elementos y atributos globales del esquema. Cuando necesite localizar una propiedad de SDO para un elemento o atributo global, debe localizar el tipo ‘DocumentRoot’ y luego localizar la propiedad adecuada contenida en el mismo.
El siguiente esquema define el diseño de los mensajes de servicios web. Al comparar este esquema con la información de Correlación de gráficos de datos SDO para mensajes de servicios web se puede observar la correlación de esquemas con SDO en acción.
<?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>