Exemple de code de services Web
Cet exemple de langage WDSL (Services Description Language) et de fragments de code montre comment accéder aux zones d'un message de services Web pour programmer une médiation.
Définition d'un message de services Web
Cette rubrique contient un exemple de message de services Web. L'exemple est définit dans un WSDL, un langage XML permettant de décrire les services proposés par une entreprise et la manière d'accéder à ces services.
Cette rubrique décrit comment programmer des médiations pour utiliser différentes parties d'un message de services Web, décrites avec la représentation (SDO Service Data Objects) Version 1 dans Mappage des graphiques de données SDO pour des messages des services Web. A chaque partie du message correspond une description XML du message, représentant son graphique de données SDO. Chaque description XML est accompagnée de fragments de code qui illustrent comment utiliser cette partie du message.
Voici une description WSDL du message utilisé comme exemple des fragments de code suivants :
Description du message des services 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>
Utilisation du noeud 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>
// Extraction du noeud info (un enfant de l'objet racine du graphique)
DataObject rootNode = graph.getRootObject();
DataObject infoNode = rootNode.getDataObject("Info");
// Interrogation d'operationName et de messageType.
String opName = infoNode.getString("operationName");
String type = infoNode.getString("messageType");
Utilisation d'un en-tête
<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>
// Extraction du noeud info (un enfant de l'objet racine du graphique)
DataObject rootNode = graph.getRootObject();
DataObject infoNode = rootNode.getDataObject("Info");
// Accès à la liste des en-têtes
List headerEntries = infoNode.getList("headers");
// Extraction de la première entrée de la liste
DataObject headerEntry = (DataObject) headerEntries.get(0);
// Interrogation de la propriété mustUnderstand de l'entrée d'en-tête
boolean mustUnderstand = headerEntry.getBoolean("mustUnderstand");
// Extraction de la séquence qui conserve le contenu de l'entrée d'en-tête
Sequence headerContent = headerEntry.getSequence("any");
// Extraction de la première partie du contenu de la séquence
DataObject header = (DataObject) headerContent.getValue(0);
// Lecture de la priorité dans l'en-tête
int priority = header.getInt("priority");
// Chaîne résultante en utilisant des expressions de chemin SDO qui commencent
// par le noeud info.
mustUnderstand = infoNode.getBoolean("headers[1]/mustUnderstand");
priority = infoNode.getInt("headers[1]/any[1]/priority");
Utilisation d'une pièce jointe
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--
// Extraction du noeud info (un enfant de l'objet racine du graphique)
DataObject rootNode = graph.getRootObject();
DataObject infoNode = rootNode.getDataObject("Info");
// Accès à la liste des pièces jointes
List attachmentEntries = infoNode.getList("attachments");
// Extraction de la première entrée de la liste
DataObject attachmentEntry = (DataObject) attachmentEntries.get(0);
// Interrogation de la propriété contentId de l'entrée d'en-tête
String contentId = attachmentEntry.getString("contentId");
// Extraction des données de la pièce jointe
byte[] data = attachmentEntry.getBytes("data");
Utilisation du corps du message
<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>
// Extraction du noeud info (un enfant de l'objet racine du graphique)
DataObject rootNode = graph.getRootObject();
DataObject infoNode = rootNode.getDataObject("Info");
// Obtention du noeud du corps
DataObject bodyNode = infoNode.getDataObject("body");
// Obtention de l'objet de données de la première partie du corps
DataObject part1Node = bodyNode.getDataObject("part1");
// Interrogation de tickerSymbol
String ticker = part1Node.getString("tickerSymbol");
// Chaîne résultante en utilisant une expression de chemin SDO qui
// commence par le noeud info.
ticker = infoNode.getString("body/part1/tickerSymbol");