Exemplo de Código de Serviços da Web

Esse exemplo do Web Services Description Language (WSDL) e dos fragmentos de código mostram como acessar os campos em uma mensagem de serviços da Web para programar uma mediação.

Definição de Mensagem de Serviços da Web

Esse tópico contém um exemplo de uma mensagem de serviços da Web. O exemplo é caracterizado no WSDL, uma linguagem baseada em XML que é usada para descrever os serviços que um negócio oferece e como esses serviços podem ser acessados.

Esse tópico mostra como programar as mediações para trabalhar com partes diferentes de uma mensagem de serviços da Web, que estão descritas na representação do Versão 1 dos Objetos de Dados de Serviço (SDO) no Mapeamento de Gráficos de Dados SDO para Mensagens de Serviços da Web. Para cada parte da mensagem, há uma descrição XML da mensagem, representando o gráfico de dados SDO. Cada descrição XML é acompanhada de fragmentos de código que ilustram como trabalhar com essa parte da mensagem.

Nota: No seguinte exemplo, o esquema do cabeçalho SOAP é incluído no WSDL. Como alternativa, isso pode ser incluído como um esquema separado no repositório SDO.

Essa é uma descrição WSDL da mensagem que é usada como um exemplo de fragmentos de código subsequentes:

Descrição da Mensagem de Serviço da 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>

Trabalhando com o Nó de Informações

Este é um exemplo de um pedido SOAP simples:
<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>
É possível acessar as propriedades do nó de informações (consulte Layout Geral de uma Mensagem de Serviços da Web) usando fragmentos de código, como a seguir:
	// Get the info node (a child of the graph root object)
	DataObject rootNode = graph.getRootObject();
	DataObject infoNode = rootNode.getDataObject("Info");
  
  // Consulta operationName e messageType.
  String opName = infoNode.getString("operationName");
  String type   = infoNode.getString("messageType");

Trabalhando com um Cabeçalho

Este é um exemplo de um pedido SOAP incluindo um cabeçalho:
<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 obter uma descrição das propriedades da entrada de cabeçalho com uma lista de cabeçalhos, consulte Entrada do Cabeçalho. Para trabalhar com uma entrada de cabeçalho e com suas propriedades, use o código, como a seguir:
	 	// Get the info node (a child of the graph root object)
    DataObject rootNode = graph.getRootObject();
    DataObject infoNode = rootNode.getDataObject("Info");
    
    // Acessa a lista de cabeçalhos
    List headerEntries = infoNode.getList("headers");
    
    // Obtém a primeira entrada da lista
    DataObject headerEntry = (DataObject) headerEntries.get(0);
    
    // Consulta a propriedade mustUnderstand da entrada de cabeçalho
    boolean mustUnderstand = headerEntry.getBoolean("mustUnderstand");
    
    // Get the Sequence that holds the content of the header entry
    Sequence headerContent = headerEntry.getSequence("any");
    
    // Obtém a primeira parte do conteúdo da Seqüência
    DataObject header = (DataObject) headerContent.getValue(0);
    
    // Lê a prioridade do cabeçalho
    int priority = header.getInt("priority");
    
    // Shorthand for the above, using SDO path expressions that start
    // from the info node.
    mustUnderstand = infoNode.getBoolean("headers[1]/mustUnderstand");
    priority       = infoNode.getInt("headers[1]/any[1]/priority");

Trabalhando com um Anexo

Esse é um exemplo de uma solicitação SOAP que inclui um anexo 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 obter uma descrição das propriedades da entrada de anexo com uma matriz de bytes, consulte Entrada do Anexo. Para trabalhar com uma entrada de cabeçalho e com suas propriedades, use o código, como a seguir:
	 // Get the info node (a child of the graph root object)
    DataObject rootNode = graph.getRootObject();
    DataObject infoNode = rootNode.getDataObject("Info");
    
    // Access the list of attachments
    List attachmentEntries = infoNode.getList("attachments");
    
    // Obtém a primeira entrada da lista
    DataObject attachmentEntry = (DataObject) attachmentEntries.get(0);
    
    // Query the contentId property of the header entry
    String contentId = attachmentEntry.getString("contentId");
    
    // Get the data contained in the attachment
    byte[] data = attachmentEntry.getBytes("data");

Trabalhando com o Corpo da Mensagem

Este é um exemplo de um pedido SOAP simples:
<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 visualizar as propriedades do corpo, consulte Layout do Corpo da Mensagem. Para trabalhar com o conteúdo do corpo, use o código, como a seguir:
    // Get the info node (a child of the graph root object)
    DataObject rootNode = graph.getRootObject();
    DataObject infoNode = rootNode.getDataObject("Info");

    // Obtém o corpo do nó
    DataObject bodyNode = infoNode.getDataObject("body");
    
    // Obtém o objeto de dados para a primeira parte do corpo
    DataObject part1Node = bodyNode.getDataObject("part1");
    
    // Consulta o tickerSymbol
    String ticker = part1Node.getString("tickerSymbol");
    
    // Shorthand for the above, using a SDO path expression that 
    // starts from the info node.
    ticker = infoNode.getString("body/part1/tickerSymbol");

Ícone que indica o tipo de tópico Tópico de Referência



Ícone de registro de data e hora Última atualização: last_date
http://www14.software.ibm.com/webapp/wsbroker/redirect?version=cord&product=was-nd-mp&topic=rjy1112
Nome do arquivo: rjy1112.html