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.

Remarque : Dans l'exemple suivant, le schéma d'en-tête SOAP est inclus dans le WSDL. Sinon, il peut être inclus en tant que schéma séparé dans le référentiel SDO.

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

Exemple de demande SOAP simple :
<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>
Vous pouvez accéder aux propriétés du noeud info (voir Présentation générale d'un message des services Web) à l'aide des fragments de code tels que les suivants :
	// 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

Exemple de demande SOAP comprenant 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>
Pour obtenir une description des propriétés de l'entrée d'en-tête avec une liste d'en-têtes, voir Entrée d'en-tête. Pour utiliser une entrée d'en-tête et ses propriétés à l'aide d'un code tel que le suivant :
	 	// 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

Exemple de demande SOAP comprenant une pièce jointe XML :
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--
Pour obtenir une description des propriétés de l'entrée de pièce jointe avec un tableau d'octets, voir Entrée de pièce jointe. Pour utiliser une entrée d'en-tête et ses propriétés à l'aide d'un code tel que le suivant :
	 // 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

Exemple de demande SOAP simple :
<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>
Pour afficher les propriétés du corps, voir Disposition des corps de message. Pour utiliser le contenu du corps, utiliser du code similaire au code suivant :
    // 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");

Icône indiquant le type de rubrique Rubrique de référence



Icône d'horodatage Dernière mise à jour: last_date
http://www14.software.ibm.com/webapp/wsbroker/redirect?version=cord&product=was-nd-mp&topic=rjy1112
Nom du fichier : rjy1112.html