Manual Rastreamentoobjetosws PDF
Manual Rastreamentoobjetosws PDF
Manual Rastreamentoobjetosws PDF
02/05/2017
2. Web Service
Os Web Services são componentes que permitem às aplicações enviar e receber dados em
formato XML (eXtensible Markup Language) ou JSON (JavaScript Object Notation), independente
de plataforma e de linguagem de programação, pois utilizam protocolos padrões para comunicação e
transferência de dados. Os clientes não precisam estar na mesma plataforma ou sistema operacional
do Web Service e normalmente não precisam ter nenhum conhecimento sobre a sua implementação
ou plataforma de execução, necessita conhecer apenas a interface do Web Service ou WSDL (Web
Services Description Language).
As bases para a construção de um Web Service são os padrões XML e SOAP. O transporte dos
dados é realizado normalmente via protocolo HTTP ou HTTPS para conexões seguras (o padrão não
determina o protocolo de transporte). Os dados são transferidos no formato XML e encapsulados
pelo protocolo SOAP.
A comunicação de um Web Service pode ser síncrona ou assíncrona. No modo síncrono, o
cliente, após invocar uma operação do serviço, ficará aguardando a resposta. Enquanto no modo
assíncrono, o cliente não recebe a resposta do serviço e sim uma confirmação de que a mensagem
foi recebida com sucesso e que estará em processamento. Caso seja necessário uma resposta, deve
ser disponibilizado uma outra operação para recebê-la.
3. WSDL
Web Services Description Language (WSDL) é uma especificação desenvolvida pelo W3C que
permite descrever os serviços e as mensagens do Web Service segundo um formato XML.
4. XML
Extensible Markup Language (XML) é uma metalinguagem de anotação que especifica como os
dados são representados genericamente, define como e com que qualidade de serviço os dados são
transmitidos, pormenoriza como os serviços são publicados e descobertos. Os Web Services
decodificam as várias partes de XML para interagir com as aplicações.
5. SOAP
Simple Object Access Protocol (SOAP) é um protocolo utilizado para troca de informações
estruturadas em uma plataforma descentralizada e distribuída. O SOAP envia uma mensagem de
XML através de uma requisição HTTP/HTTPS (Hyper Text Transfer Protocol/Hyper Text Transfer
Protocol Secure) e recebe uma resposta, se existir, através da resposta HTTP/HTTPS. Este
protocolo baseado em XML consiste de três partes: um envelope, que define o que está na
mensagem e como processá-la, um conjunto de regras codificadas para expressar instâncias do tipos
de dados definidos na aplicação e uma convenção para representar chamadas de procedimentos e
respostas.
A arquitetura de software dos serviços fornecidos pelo Web Service seguem os padrões e os
protocolos de comunicação descritos acima, conforme mostra a Figura 1.
O serviço que será detalhado neste documento utiliza o protocolo HTTPS com comunicação
síncrona e o padrão de resposta encode UTF-8, que é a forma mais amplamente utilizada para
representar texto Unicode nas páginas da Web. Este serviço fornecerá aos clientes às informações
sobre o rastreamento de objetos postados.
SoapUi é uma ferramenta open source escrita em Java cuja principal função é consumir e testar
Web Services.
Com essa ferramenta é possível realizar testes funcionais, de performance, de carga e
segurança.
O SoapUi utiliza Web Service para a interação e comunicação entre aplicações diferentes através
de um tipo de schema XML chamado WSDL (Web Service Description Language).
Para iniciar a utilização do SoapUI, você deverá criar um novo projeto. Para tal tarefa, você deverá clicar no
menu “File>New WSDL Project”, como pode ser visto na figura abaixo. O SoapUI abrirá um diálogo
solicitando o nome do novo projeto e o endereço WSDL do projeto.
Tela para criar um novo projeto de teste de web service na ferramenta SoapUI
Você precisa ter o endereço do WSDL do web servisse e no nosso caso iremos utilizar o web service dos
Correios para rastreamento de encomendas:
http://webservice.correios.com.br/service/rastro/Rastro.wsdl
Você deve colocar o endereço do WSDL na tela New SoapUI Project conforme imagem abaixo:
Após colocar o nome do projeto e o endereço WSDL do web service clique em OK, será feita a importação
do WSDL e irá montar o projeto de teste com todos os métodos disponíveis no web service.
Após clicar no item Request irá abrir uma tela o SoapUI criará uma Requisição Default (Request 1) para a
operação:
O SoapUI irá colocar uma interrogação “?” em cada campo que deverá ser preenchido e você deve
preenchê-los com as informações conforme exemplo abaixo (o usuário e senha devem ser obtidos junto ao
gestor comercial do contrato):
Exemplo de chamada ao web service dos correios usando a ferramenta de testes SoapUI
Feito isso, clique no botão submit request no canto superior esquerdo da janela do centro onde está a
instrução request conforme imagem abaixo:
O SoapUI irá enviar uma requisição ao web service e o retorno será apresentado na tela direita:
Tela de envio de requisição ao webservice de cálculo de frete dos correios usando a ferramenta de testes
SoapUI
8. Baixando o Certificado
b- com certificado
https://webservice.correios.com.br/service/rastro/Rastro.wsdl
9. Implementação de Rastreamento
A comunicação entre clientes e servidores é feita através do SOAP (Simple Object Access
Protocol). Esse protocolo é definido em XML, sendo assim, as chamadas a procedures remotas (RPC)
são codificadas em XML para transporte das mensagens é usado o HTTP.
Cada consulta ao sistema é realizada através dos serviços SOAP que tem como característica de
funcionamento, uma requisição HTTPS de POST contendo, dentro de seu payload, chamada
envelope SOAP.
Método a ser Consumido pela requisição com certificado de autenticação:
http://webservice.correios.com.br/service/rastro/Rastro.wsdl
Um envelope SOAP nada mais é que uma estrutura em XML que permite, dentro de seu
conteúdo, seja enviada informações relevantes ao seu serviço.
Serviços disponibilizados:
Serviço Descrição
buscaEventos Retorna mensagem XML de retorno do rastro SRO
buscaEventosLista Retorna mensagem XML de retorno do rastro SRO
http://webservice.correios.com.br/service/rastro/Rastro.wsdl?"usuario=9999999999&senha=S@1234YWC5&tipo=
L&resultado=T&lingua=101&objetos=JO999999999BR
Abaixo mostra exemplos de envelopes SOAP que são estruturas XML que permite enviar
informações do serviço desejado dentro de seu conteúdo.
1. Todos os identificadores objetos deverão ter o formato padrão de 13 (treze) posições. Sendo
duas letras para identificação do serviço, 8 (oito) caracteres numéricos, 1 (um) dígito
verificador e duas letras finais para identificação do país.
3. Não poderá haver espaços em branco, ou outros caracteres separadores, entre um objeto e
outro. Exemplo: para a pesquisa de 50 objetos será criada uma string de 650 caracteres (13 x
50).
12. Retorno das Informações
Os tipos e os status dos eventos são descritos no Anexo 1 deste manual, bem como sugestões de
ações a serem tomadas pelo cliente;
Os dados do recebedor só serão apresentados para os eventos de entrega (tipo=BDE status=01). Pode
haver casos em que estes dados não existam e, portanto, não serão exibidos;
Para evitar uma quantidade excessiva de pesquisa, o cliente deverá registrar, no seu banco de
dados, todos os objetos que tiveram seu rastreamento concluído.
Para isso, indicamos que todos os objetos que forem retornados com o evento tipo BDE, BDI e BDR
com status 01 ou 23 estão com o rastro concluído. Não será mais necessário enviá-los para novas
consultas.
O cliente poderá optar por gravar, na sua base de dados, todo o retorno relativo ao objeto
rastreado e/ou apenas alguns dos eventos. Por exemplo: somente a entrega.
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
<soapenv:Body>
<ns2:buscaEventosResponse xmlns:ns2="http://resource.webservice.correios.com.br/">
<return>
<versao>2.0</versao>
<qtd>1</qtd>
<objeto>
<numero>AA598971235BR</numero>
<sigla>JF</sigla>
<nome>REMESSA ECONÔMICA C/AR DIGITAL</nome>
<categoria>REMESSA ECONÔMICA TALÃO/CARTÃO</categoria>
<evento>
<tipo>BDE</tipo>
<status>23</status>
<data>18/03/2014</data>
<hora>18:37</hora>
<descricao>Objeto devolvido ao remetente</descricao>
<detalhe/>
<local>CTCE MACEIO</local>
<codigo>57060971</codigo>
<cidade>MACEIO</cidade>
<uf>AL</uf>
</evento>
</objeto>
</return>
</ns2:buscaEventosResponse>
</soapenv:Body>
</soapenv:Envelope>
BDE 33 A entrega não pode ser Objeto será devolvido ao Acompanhar o retorno do
BDI efetuada - Destinatário não remetente objeto ao remetente.
BDR apresentou documento
exigido
BDE 34 A entrega não pode ser Objeto sujeito a atraso na Acompanhar
BDI efetuada - Logradouro com entrega ou a devolução ao
BDR numeração irregular remetente
BDE 35 Coleta ou entrega de objeto Será realizada nova tentativa Acompanhar
BDI não efetuada de coleta ou entrega
BDR
BDE 36 Coleta ou entrega de objeto Objeto será devolvido ao Acompanhar o retorno do
BDI não efetuada remetente objeto ao remetente.
BDR
BDE 37 Objeto e/ou conteúdo <a Acionar atendimento dos
BDI avariado por acidente com href="http://www.correios.com. Correios.
BDR veículo br/servicos/falecomoscorreios/
conteudo/eventos_sro.cfm">F
avor entrar em contato com os
Correios. </a>
BDE 38 Objeto endereçado à Objeto será encaminhado Acompanhar
BDI empresa falida para entrega ao administrador
BDR judicial
BDE 40 A importação do Objeto será devolvido ao Acompanhar o retorno do
BDI objeto/conteúdo não foi remetente objeto ao remetente.
BDR autorizada pelos órgãos
fiscalizadores
BDE 41 A entrega do objeto está Acompanhar
BDI condicionada à composição
BDR do lote
Tipos Significado
BDE Baixa de distribuição externa
BDI Baixa de distribuição interna
BDR Baixa corretiva
BLQ Bloqueio de objetos
CAR Conferência de lista de registro
CD Conferência de nota de despacho
Exemplo em JAVA
Mensagem SOAP:
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:res="http://resource.webservice.correios.com.br/">
<soapenv:Header/>
<soapenv:Body>
<res:buscaEventos>
<usuario>USUARIO</usuario>
<senha>SENHA</senha>
<tipo>L</tipo>
<resultado>T</resultado>
<lingua>101</lingua>
<objetos>AA598971235BR</objetos>
</res:buscaEventos>
</soapenv:Body>
</soapenv:Envelope>
O estilo de codificação dos tipos de dados (regras para codificar tipos da dados) para
uma mensagem SOAP é estabelecido via o atributo SOAP-ENV encodingStyle.
Não indico consumir um serviço desta forma, a melhor forma sempre será gerar os
stubs do lado cliente, porém podemos também consumir um serviço desta maneira,
realizo a implementação de forma simples passando a requisição dentro de uma
String mas também podemos montar essa entrada dentro do próprio código com
XStream nada nos impede de criar e implementar códigos de modo genérico para que
atendam nossas necessidades.
Requisição SOAP:
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.URL;
import java.net.URLConnection;
public class RequisicaoSoap
{
public static void main(String[] args)
{
try
{
String msgRetorno = "";
wr.write(xml); wr.flush();
wr.close();
rd.close();
conn.getInputStream().close();
Resposta do serviço:
<soapenv:Envelope
xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
<soapenv:Body>
<ns2:buscaEventosResponse
xmlns:ns2="http://resource.webservice.correios.com.br/">
<return>
<versao>2.0</versao>
<qtd>1</qtd>
<objeto>
<numero> AA598971235BR</numero>
<sigla>JF</sigla>
<nome>REMESSA ECONÔMICA </nome>
<categoria>REMESSA TALÃO/CARTÃO</categoria>
<evento>
<tipo>BDE</tipo>
<status>23</status>
<data>18/03/2014</data>
<hora>18:37</hora>
<descricao>Objeto devolvido ao remetente</descricao>
<detalhe/>
<local>CTCE MACEIO</local>
<codigo>57060971</codigo>
<cidade>MACEIO </cidade>
<uf>AL</uf>
</evento>
</objeto>
</return>
</ns2:buscaEventosResponse>
</soapenv:Body>
</soapenv:Envelope>
A ação Request inclui um único elemento Envelope que é obrigatório, o qual inclui
um elemento Body, também obrigatório.
Um total de quatro namespaces são definidos. Os namespaces são usados para não
permitir ambiguidades de elementos XML e seus atributos, e frequentemente são
usados para referenciar esquemas externos. Na ação do SOAP request, usa-se
namespaces com o Envelope SOAP:
xmlns:SOAP-ENV=”http://schemas.xmlsoap.org/soap/envelope/”
xmlns:xsi=”http://www.w3.org/2001/X MLSchema-instance”
xmlns:xsd=http://www.w3.org/2001/XMLSchema
Isto faz com que a aplicação tenha modularidade, enquanto também provê
flexibilidade para mudanças futuras às aplicações.
Header
O elemento Header é parte opcional de uma mensagem SOAP, que oferece uma
estrutura flexível para especificar requisitos adicionais no nível da aplicação.
Por exemplo, o elemento Header pode ser usado para especificar uma assinatura
digital para serviços protegidos por senhas; da mesma forma ele pode ser usado para
especificar um número de conta para serviços SOAP que são pagos por uso.
Muitos serviços SOAP não utilizam o elemento Header, mas a estrutura Header pode
prover um mecanismo aberto para autenticação, gerenciamento de transação e
autorização de pagamento.
Actor Attribute
Define um message path como uma lista de sites de serviço SOAP. Cada destes sites
intermediários podem realizar algum processamento e então enviar adiante a
mensagem ao próximo site na cadeia. Por estabelecer o atributo Actor, o cliente
pode especificar o destinatário (o recipiente) do header.
MustUnderstand attribute
<SOAP-ENV : Header>
<ns1 : PaymentAccount xmlns:ns1=“ urn:ecerami” SOAP-ENV: mustUnderstand=“
true”>
orsenigo473
</ns1:PaymentAccount>
</SOAP-ENV : Header>
Fault
15. Segurança
Nesse contexto, um usuário na rede pode interceptar os seus dados e lê-los ou,
pior, alterar a página que você recebe ou a informação que envia para o servidor.
De fato, problemas mais graves e imediatos podem acontecer com transações
financeiras, como é o caso de uma transferência bancária. Se o site do banco fosse
com HTTP e um usuário mal-intencionado desejasse alterar uma ordem de
transferência para depositar o dinheiro na conta dele, esse usuário poderia fazer
tranquilamente, pois não há nenhum mecanismo de segurança no protocolo HTTP.