rastreamento de objetos utilizando o Web service dos correios

3,635 views
Skip to first unread message

andrequ...@gmail.com

unread,
Jun 27, 2016, 4:06:01 PM6/27/16
to PBJug
Boa tarde galera.

Estou tentando implementar o rastreamento dos correios em minha aplicação.
Fiz os testes utilizando a aplicação SoapUI para testar e funcionou perfeitamente, mas quando vou fazer os testes com via código na aplicação ele retorna erro 500.
Segue o meu código.
public static void main(String[] args) {
try{
String msgRetorno = "";
// Definir a URL Do Serviço sem a ?WSDL no fim
URLConnection conn = url.openConnection();
// Define que a Conexão terá uma saída/retorno
conn.setDoOutput(true);
// Método a ser Consumido pela requisição
conn.setRequestProperty("SOAPAction",
// Propriedades da Mensagem SOAP
conn.setRequestProperty("Type","Request-Response");
conn.setRequestProperty("Content-Type", "text/xml;charset=UTF-8");
conn.setRequestProperty("Accept-Encoding","gzip,deflate");
conn.setRequestProperty("User-Agent","Jakarta Commons-HttpClient/3.1");
// Canal de Saída da Requisição
OutputStreamWriter wr = new OutputStreamWriter(conn.getOutputStream());
// Mensagem no Formato SOAP
String xml ="<soapenv:Envelope "
+ "<soapenv:Header/>"
                    +"<soapenv:Body>"
                    +"<res:buscaEventos>"
                    +"<usuario>ECT</usuario>"
                    +"<senha>CRO</senha>"
                     +"<tipo>L</tipo>"
                    +"<resultado>T</resultado>"
                     +"<lingua>101</lingua>"
                    +"<objetos>DE570284245BR</objetos>"
                    +"</res:buscaEventos>"
                     +"</soapenv:Body>"
                    +"</soapenv:Envelope>";
                     

wr.write(xml);
wr.flush();
 
System.out.println("Requisição >> "+conn.getOutputStream());
// Leitura da Resposta do Serviço
BufferedReader rd = new BufferedReader(new
InputStreamReader(conn.getInputStream()));
// Leituras das Linhas da Resposta
while (rd.ready()){
msgRetorno += rd.readLine();
}
wr.close();
rd.close();
conn.getInputStream().close();
System.out.println("Resposta >> "+ msgRetorno);
} catch (IOException e) {
e.printStackTrace();
} finally {
System.out.println("Fim");
}
}
}

java.io.IOException: Server returned HTTP response code: 500 for URL: http://webservice.correios.com.br:80/service/rastro
at sun.net.www.protocol.http.HttpURLConnection.getInputStream0(HttpURLConnection.java:1839)
at sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1440)
at br.com.testeWebService.TesteWebService.main(TesteWebService.java:56)

Esse mesmo exemplo ta disponível no manual dos correios.

grato pela atenção.

André Queiroz.


andrequ...@gmail.com

unread,
Jul 4, 2016, 8:53:42 AM7/4/16
to PBJug
Bom dia pessoal.

Andei pesquisando muito sobre Web Service/Soap, e vi que para consumir esse serviço em java primeiro devo criar um Web Service Client passando uma WSDL: http://webservice.correios.com.br/service/rastro/Rastro.wsdl
feito isso, é criado de forma automática um pacote com as classes e uma delas e a stub,
chamei o método buscarEvento que pertence a essa classe, e passei os parâmetros necessários, mas, obtive como resposta um erro que ainda não consegui achar o motivo.
segue abaixo o meu método de teste e a exceção que estourou.

Digite o código aqui...

public class TesteService {
public static void main(String[] args) throws IOException {

    try {
ServicePortBindingStub stub = new ServicePortBindingStub();
Sroxml teste = new Sroxml();
teste = stub.buscaEventos(String usuario,String senha,String tipo,String resultado ,String lingua,String objetoASerRastreado);
if(teste != null){
System.out.println(teste);
}
    } catch (MalformedURLException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    }
}
}

a exceção:

Exception in thread "main" AxisFault
 faultSubcode: 
 faultString: No endpoint
 faultActor: 
 faultNode: 
 faultDetail: 
at br.com.correios.webservice.resource.ServicePortBindingStub.buscaEventos(ServicePortBindingStub.java:286)
at br.com.testeWebService.TesteService.main(TesteService.java:20)


No endpoint
at br.com.correios.webservice.resource.ServicePortBindingStub.buscaEventos(ServicePortBindingStub.java:286)
at br.com.testeWebService.TesteService.main(TesteService.java:20)

Bom galera quem poder ajudar ficarei muito grato.

Att.

André Queiroz

Marcell Coêlho

unread,
Jul 4, 2016, 9:57:08 AM7/4/16
to pb...@googlegroups.com
Tenta assim, aqui dá "Connection timed out: connect" porém aqui tem firewall.



        Service proxy = new ServiceProxy();
Sroxml teste = new Sroxml();
teste = proxy.buscaEventos("ECT", "CRO", "L", "T", "101", "DE570284245BR");
if (teste != null) {
System.out.println(teste);
}

Marcell Coêlho

unread,
Jul 4, 2016, 10:41:58 AM7/4/16
to pb...@googlegroups.com
É aqui funcionou assim:

System.setProperty("http.proxyHost", "xxx.xxx.xxx.xxx"); //ALTERAR
System.setProperty("http.proxyPort", "xxxx"); //ALTERAR
Service proxy = new ServiceProxy();
Sroxml teste = new Sroxml();
teste = proxy.buscaEventos("ECT", "CRO", "L", "T", "101", "DE570284245BR");
if (teste != null) {
System.out.println(teste.getObjeto(0).getNome());
}

andrequ...@gmail.com

unread,
Jul 4, 2016, 1:24:19 PM7/4/16
to PBJug
Olá Marcell,
 testei aqui e me retornou um objeto br.com.correios.webservice.resource.Sroxml@b2529b4d.
Minha duvida agora é, como faço para pegar as informações que vem desse objeto? 


Em segunda-feira, 27 de junho de 2016 17:06:01 UTC-3, andrequ...@gmail.com escreveu:

Marcell Coêlho

unread,
Jul 4, 2016, 1:30:21 PM7/4/16
to pb...@googlegroups.com
Vc tá imprimindo o objeto, que vc chamou de "teste", dentro dele tem os atributos.

Muda:
System.out.println(teste);

Para:

System.out.println(teste.getObjeto(0).getNome());

Marcell Coêlho

unread,
Jul 4, 2016, 1:44:10 PM7/4/16
to pb...@googlegroups.com
if (teste != null) {
  for (int i = 0; i < teste.getObjeto().length; i++) {
System.out.println(teste.getObjeto(i).getNumero());
System.out.println(teste.getObjeto(i).getSigla());
System.out.println(teste.getObjeto(i).getNome());
System.out.println(teste.getObjeto(i).getCategoria());
}
}

service.png

andrequ...@gmail.com

unread,
Jul 4, 2016, 1:52:13 PM7/4/16
to PBJug
Marcell, só não encontrei esses atributos cidade, local, UF, descrição 


Em segunda-feira, 27 de junho de 2016 17:06:01 UTC-3, andrequ...@gmail.com escreveu:

andrequ...@gmail.com

unread,
Jul 4, 2016, 1:55:38 PM7/4/16
to PBJug
Marcell.

Sabe dizer como faço para trazer esses também?

no caso eu preciso dos atributos que estão na foto que você testou no SoapUI


Em segunda-feira, 27 de junho de 2016 17:06:01 UTC-3, andrequ...@gmail.com escreveu:

Marcell Coêlho

unread,
Jul 4, 2016, 2:06:01 PM7/4/16
to pb...@googlegroups.com
Pela nomenclatura dos métodos:
buscaEventos
buscaEventosLista
ListaEntregaExterna
RastroJson
UnidadesSRO

Não seria uma serviço para retornar cidade, local, uf!
Tem que ver de onde vc "pegou" esse web service. Cade a documentação?

andrequ...@gmail.com

unread,
Jul 4, 2016, 2:08:36 PM7/4/16
to PBJug

naftali augusto

unread,
Jul 4, 2016, 10:45:54 PM7/4/16
to pb...@googlegroups.com
Indico a ferramenta SoapUI. Ela pode te ajudar a gerar o cliente para este webservice.

--
You received this message because you are subscribed to the Google Groups "PBJug" group.
To unsubscribe from this group and stop receiving emails from it, send an email to pbjug+un...@googlegroups.com.
To post to this group, send email to pb...@googlegroups.com.
Visit this group at https://groups.google.com/group/pbjug.
For more options, visit https://groups.google.com/d/optout.

andrequ...@gmail.com

unread,
Jul 5, 2016, 7:30:19 AM7/5/16
to PBJug
Olá Naftali.

Eu usei o SoapUI para testa esse Web Service, mas o que você tá querendo dizer é que consigo criar um cliente a parti dele também ?
Vou olhar esse tutorial que você mandou obrigado.


Em segunda-feira, 27 de junho de 2016 17:06:01 UTC-3, andrequ...@gmail.com escreveu:

andrequ...@gmail.com

unread,
Jul 5, 2016, 2:00:26 PM7/5/16
to PBJug
Marcell, você conseguiu dar uma olhadinha na documentação.


Em segunda-feira, 27 de junho de 2016 17:06:01 UTC-3, andrequ...@gmail.com escreveu:

Marcell Coêlho

unread,
Jul 5, 2016, 2:03:25 PM7/5/16
to pb...@googlegroups.com
Sim, a solução é a que lhe passei! O retorno já está funcionando!

andrequ...@gmail.com

unread,
Jul 5, 2016, 2:30:31 PM7/5/16
to PBJug
Então aqueles parâmetros cidade, UF, descrição com esse serviço não tem como trazer né isso?


Em segunda-feira, 27 de junho de 2016 17:06:01 UTC-3, andrequ...@gmail.com escreveu:

Marcell Coêlho

unread,
Jul 5, 2016, 2:37:37 PM7/5/16
to pb...@googlegroups.com
Tem sim, tudo que retorna do serviço você consegue acessar via "get" no objeto. Mas isso daí já é java básico.

andrequ...@gmail.com

unread,
Jul 5, 2016, 2:59:45 PM7/5/16
to PBJug
Eu sei Marcell que chamando o método get consigo ter acesso as informações, só perguntei porque você falou que esse não é um serviço para trazer cidade,UF, local.
ai como eu tinha lhe passado a documentação só queria confirma se realmente ele não traz.  

Em segunda-feira, 27 de junho de 2016 17:06:01 UTC-3, andrequ...@gmail.com escreveu:

Marcell Coêlho

unread,
Jul 5, 2016, 3:06:15 PM7/5/16
to pb...@googlegroups.com
Dentro de "Objeto" tem vários "evento" e cada evento tem "UF", "cidade", "local" e descrição.
Os correios tem mais de um serviço, com finalidades diferentes. O que você colocou em questão aqui é de "rastreamento de objetos".

A pergunta é: Vc realmente quer consumir esse serviço? De rastreamento de objetos?

andrequ...@gmail.com

unread,
Jul 5, 2016, 3:42:51 PM7/5/16
to PBJug
Bom Marcell. 
Talvez eu tenha me expressado mal, não sei.
mas o que eu quero é poder passar um número do objeto e ser retornado o status dele, por exemplo: cidade, estado em que situação se encontra a encomenda etc.
na documentação eles chamam de rastreamento do objeto.
Abaixo segue uma imagem do SoapUi, o retorno que ele traz é exatamente o que eu quero.


Em segunda-feira, 27 de junho de 2016 17:06:01 UTC-3, andrequ...@gmail.com escreveu:
serviçoCorreios.png

andrequ...@gmail.com

unread,
Jul 6, 2016, 3:19:07 PM7/6/16
to PBJug
Boa tarde Marcell.

 Deu certo o que eu queria, é como você falou dentro de objeto tem vários evento e dentro de evento tem os atributos cidade, estado, etc.

Obrigado cara pela sua ajuda valeu mesmo.

Att.
André


Em segunda-feira, 27 de junho de 2016 17:06:01 UTC-3, andrequ...@gmail.com escreveu:
Reply all
Reply to author
Forward
0 new messages