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.

Nota: En el ejemplo siguiente, el esquema de cabecera SOAP se incluye en el WSDL. De forma alternativa, se puede incluir como un esquema separado en el repositorio SDO.

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

Éste es un ejemplo de una solicitud SOAP sencilla:
<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>
Puede acceder a las propiedades del nodo info (consulte Diseño global de un mensaje de servicios web) utilizando fragmentos de código similares al siguiente:
	// 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

Éste es un ejemplo de una solicitud SOAP que incluye 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>
Para ver una descripción de las propiedades de la entrada de cabecera con una lista de las cabeceras, consulte Entrada de cabecera. Para trabajar con una entrada de cabecera y sus propiedades, utilice código como el siguiente:
	 	// 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

Éste es un ejemplo de una solicitud SOAP incluido un adjunto 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--
Para ver una descripción de las propiedades de la entrada de cabecera con una matriz de bytes, consulte Entrada de adjunto. Para trabajar con una entrada de cabecera y sus propiedades, utilice código como el siguiente:
	 // 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

Éste es un ejemplo de una solicitud SOAP sencilla:
<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>
Para ver las propiedades del cuerpo, consulte Diseño del texto de mensajes. Para trabajar con el contenido del texto, utilice código como el siguiente:
    // 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");

Icon that indicates the type of topic Reference topic



Timestamp icon Last updated: last_date
http://www14.software.ibm.com/webapp/wsbroker/redirect?version=cord&product=was-nd-mp&topic=rjy1112
File name: rjy1112.html