Ejemplo de código de servicios web
El ejemplo de WSDL de ejemplo y fragmentos de código que muestran cómo acceder a los campos de un mensaje de servicios web para programar una mediación.
Definición del mensaje de servicios web
Este tema contiene un ejemplo de un mensaje de servicios web. El ejemplo está caracterizado en WSDL, un lenguaje basado en XML que se utiliza para describir los servicios que ofrece una empresa y cómo se puede acceder a estos servicios.
Este tema muestra cómo programar las mediaciones para que funcionen con las diferentes partes de un mensaje de servicios web, lo que se describe con la representación de Versión 1 de SDO (Service Data Objects) en Correlación de gráficos de datos SDO para mensajes de servicios web. Para cada parte del mensaje, verá una descripción XML del mensaje, representando sus gráficos de dato SDO. Cada descripción XML está acompañada de fragmentos de código que ilustran cómo se puede trabajar con dicha parte del mensaje.
La siguiente es la descripción WSDL del mensaje que se utiliza como ejemplo de los fragmentos de código posteriores:
Descripción del mensaje de servicios web companyInfo
<wsdl:definitions targetNamespace="http://example.companyInfo"
xmlns:tns="http://example.companyInfo"
xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
xmlns:wsdlsoap="http://schemas.xmlsoap.org/wsdl/soap/"
xmlns:wsdlmime="http://schemas.xmlsoap.org/wsdl/mime/"
xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<wsdl:types>
<xsd:schema elementFormDefault="qualified"
targetNamespace="http://example.header">
<xsd:element name="sampleHeader">
<xsd:complexType>
<xsd:all>
<xsd:element name="priority" type="xsd:int"/>
</xsd:all>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<xsd:schema elementFormDefault="qualified"
targetNamespace="http://example.companyInfo">
<xsd:element name="getCompanyInfo">
<xsd:complexType>
<xsd:all>
<xsd:element name="tickerSymbol" type="xsd:string"/>
</xsd:all>
</xsd:complexType>
</xsd:element>
<xsd:element name="getCompanyInfoResult">
<xsd:complexType>
<xsd:all>
<xsd:element name="result" type="xsd:float"/>
</xsd:all>
</xsd:complexType>
</xsd:element>
</xsd:schema>
</wsdl:types>
<wsdl:message name="getCompanyInfoRequest">
<wsdl:part name="part1" element="tns:getCompanyInfo"/>
</wsdl:message>
<wsdl:message name="getCompanyInfoResponse">
<wsdl:part name="part1" element="tns:getCompanyInfoResult"/>
<wsdl:part name="part2" type="xsd:string"/>
<wsdl:part name="part3" type="xsd:base64Binary"/>
</wsdl:message>
<wsdl:portType name="CompanyInfo">
<wsdl:operation name="GetCompanyInfo">
<wsdl:input message="tns:getCompanyInfoRequest"
name="getCompanyInfoRequest"/>
<wsdl:output message="tns:getCompanyInfoResponse"
name="getCompanyInfoResponse"/>
</wsdl:operation>
</wsdl:portType>
<wsdl:binding name="CompanyInfoBinding" type="tns:CompanyInfo">
<wsdlsoap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/>
<wsdl:operation name="GetCompanyInfo">
<wsdlsoap:operation soapAction=""/>
<wsdl:input name="getCompanyInfoRequest">
<wsdlsoap:body use="literal"/>
</wsdl:input>
<wsdl:output name="getCompanyInfoResponse">
<wsdlsoap:body use="literal"/>
</wsdl:output>
</wsdl:operation>
</wsdl:binding>
<wsdl:service name="CompanyInfoService">
<wsdl:port binding="tns:CompanyInfoBinding" name="SOAPPort">
<wsdlsoap:address location="http://somewhere/services/CompanyInfoService"/>
</wsdl:port>
</wsdl:service>
</wsdl:definitions>
Trabajar con el nodo info
<env:Envelope
xmlns:env='http://schemas.xmlsoap.org/soap/envelope/'
xmlns:ns1='http://example.companyInfo'>
<env:Body>
<ns1:getCompanyInfo>
<ns1:tickerSymbol>IBM</ns1:tickerSymbol>
</ns1:getCompanyInfo>
</env:Body>
</env:Envelope>
// Obtener el nodo info (un hijo del objeto raíz del gráfico)
DataObject rootNode = graph.getRootObject();
DataObject infoNode = rootNode.getDataObject("Info");
// Consultar operationName y messageType.
String opName = infoNode.getString("operationName");
String type = infoNode.getString("messageType");
Trabajo con una cabecera
<env:Envelope
xmlns:env='http://schemas.xmlsoap.org/soap/envelope/'
xmlns:ns1='http://example.companyInfo'>
<env:Header>
<example:sampleHeader
env:mustUnderstand='1'
xmlns:example='http://example.header'>
<example:priority>4</example:priority>
</example:sampleHeader>
</env:Header>
<env:Body>
<ns1:getCompanyInfo>
<ns1:tickerSymbol>IBM</ns1:tickerSymbol>
</ns1:getCompanyInfo>
</env:Body>
</env:Envelope>
// Obtener el nodo info (un hijo del objeto raíz del gráfico)
DataObject rootNode = graph.getRootObject();
DataObject infoNode = rootNode.getDataObject("Info");
// Acceder a la lista de cabeceras
List headerEntries = infoNode.getList("headers");
// Obtener la primera entrada de la lista
DataObject headerEntry = (DataObject) headerEntries.get(0);
// Consultar la propiedad mustUnderstand de la entrada de cabecera
boolean mustUnderstand = headerEntry.getBoolean("mustUnderstand");
// Obtener la secuencia que incluye el contenido de la entrada de cabecera
Sequence headerContent = headerEntry.getSequence("any");
// Obtener la primera pieza del contenido de la secuencia
DataObject header = (DataObject) headerContent.getValue(0);
// Leer la prioridad de la cabecera
int priority = header.getInt("priority");
// Abreviatura de lo anterior, con expresiones de vía de acceso SDO que comienzan
// desde el nodo info.
mustUnderstand = infoNode.getBoolean("headers[1]/mustUnderstand");
priority = infoNode.getInt("headers[1]/any[1]/priority");
Trabajo con un archivo adjunto
Content-Type: multipart/related; start="<start>"; boundary="boundary"
--boundary
Content-Type: text/xml
Content-Transfer-Encoding: 7bit
Content-ID: <start>
<env:Envelope
xmlns:env='http://schemas.xmlsoap.org/soap/envelope/'
xmlns:ns1='http://example.companyInfo'>
<env:Body>
<ns1:getCompanyInfo>
<ns1:tickerSymbol>IBM</ns1:tickerSymbol>
</ns1:getCompanyInfo>
</env:Body>
</env:Envelope>
--boundary
Content-Type: text/xml; charset=UTF-8
Content-Transfer-Encoding: binary
Content-ID: <myAttachment>
<info>Some attached information</info>
--boundary--
// Obtener el nodo info (un hijo del objeto raíz del gráfico)
DataObject rootNode = graph.getRootObject();
DataObject infoNode = rootNode.getDataObject("Info");
// Acceder a la lista de adjuntos
List attachmentEntries = infoNode.getList("attachments");
// Obtener la primera entrada de la lista
DataObject attachmentEntry = (DataObject) attachmentEntries.get(0);
// Consultar la propiedad contentId de la entrada de cabecera
String contentId = attachmentEntry.getString("contentId");
// Obtener los datos que contiene el adjunto
byte[] data = attachmentEntry.getBytes("data");
Trabajo con el texto del mensaje
<env:Envelope
xmlns:env='http://schemas.xmlsoap.org/soap/envelope/'
xmlns:ns1='http://example.companyInfo'>
<env:Body>
<ns1:getCompanyInfo>
<ns1:tickerSymbol>IBM</ns1:tickerSymbol>
</ns1:getCompanyInfo>
</env:Body>
</env:Envelope>
// Obtener el nodo info (un hijo del objeto raíz del gráfico)
DataObject rootNode = graph.getRootObject();
DataObject infoNode = rootNode.getDataObject("Info");
// Obtener el nodo de texto
DataObject bodyNode = infoNode.getDataObject("body");
// Obtener el objeto de datos de la primera parte del texto
DataObject part1Node = bodyNode.getDataObject("part1");
// Consultar tickerSymbol
String ticker = part1Node.getString("tickerSymbol");
// Abreviatura de lo anterior, con expresiones de vía de acceso SDO que comienzan
// desde el nodo info.
ticker = infoNode.getString("body/part1/tickerSymbol");