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.
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
<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>
// 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
<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>
// 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
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--
// 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
<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>
// 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");