WEBSERVICE CLIENTE - cálculo de frete correios

2 respostas
N

Estou compartilhando, simples e sem mistérios :?:
Com grande utilidade para lojas e-commerce em java.

Para dúvidas sobre as especificações [url]http://www.correios.com.br/webServices/PDF/SCPP_manual_implementacao_calculo_remoto_de_precos_e_prazos.pdf[/url]

FYI :D
NOÉSIO SOUZA

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.StringReader;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Iterator;
import java.util.Properties;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;

import org.w3c.dom.CharacterData;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import org.xml.sax.InputSource;

public class calculoFreteCorreio {

	public static void main(String[] args) {

		// Dados pesquisa		
		String nCdEmpresa = "";
		String sDsSenha = ""; 
		String nCdServico = "41106";
		String sCepOrigem = "09920175";
		String sCepDestino = "72151613";
		String nVlPeso = "0.300";
		String nCdFormato = "1";
		String nVlComprimento = "20";
		String nVlAltura = "5";
		String nVlLargura = "15";
		String nVlDiametro = "0";
		String sCdMaoPropria = "s";
		String nVlValorDeclarado = "200";
		String sCdAvisoRecebimento = "s";
		String StrRetorno = "xml";  
		
		//URL do webservice correio para calculo de frete
		String urlString = "http://ws.correios.com.br/calculador/CalcPrecoPrazo.aspx";

		// os parametros a serem enviados
		Properties parameters = new Properties();

		parameters.setProperty("nCdEmpresa", nCdEmpresa);
		parameters.setProperty("sDsSenha", sDsSenha);
		parameters.setProperty("nCdServico", nCdServico);
		parameters.setProperty("sCepOrigem", sCepOrigem);
		parameters.setProperty("sCepDestino", sCepDestino);
		parameters.setProperty("nVlPeso", nVlPeso);
		parameters.setProperty("nCdFormato", nCdFormato);
		parameters.setProperty("nVlComprimento", nVlComprimento);
		parameters.setProperty("nVlAltura", nVlAltura);
		parameters.setProperty("nVlLargura", nVlLargura);
		parameters.setProperty("nVlDiametro", nVlDiametro);
		parameters.setProperty("sCdMaoPropria", sCdMaoPropria);
		parameters.setProperty("nVlValorDeclarado", nVlValorDeclarado);
		parameters.setProperty("sCdAvisoRecebimento", sCdAvisoRecebimento);
		parameters.setProperty("StrRetorno", StrRetorno);

		// o iterador, para criar a URL
		Iterator i = parameters.keySet().iterator();
		// o contador
		int counter = 0;

		// enquanto ainda existir parametros
		while (i.hasNext()) {

			// pega o nome
			String name = (String) i.next();
			// pega o valor
			String value = parameters.getProperty(name);

			// adiciona com um conector (? ou &)
			// o primeiro é ?, depois são &
			urlString += (++counter == 1 ? "?" : "&") + name + "=" + value;
			
		}

		try {
			// cria o objeto url
			URL url = new URL(urlString);
			
			// cria o objeto httpurlconnection
			HttpURLConnection connection = (HttpURLConnection) url.openConnection();

			// seta o metodo
			connection.setRequestProperty("Request-Method", "GET");

			// seta a variavel para ler o resultado
			connection.setDoInput(true);
			connection.setDoOutput(false);

			// conecta com a url destino
			connection.connect();

			// abre a conexão pra input
			BufferedReader br = new BufferedReader(new InputStreamReader(connection.getInputStream()));

			// le ate o final
			StringBuffer newData = new StringBuffer();
			String s = "";
			while (null != ((s = br.readLine()))) {
				newData.append(s);
			}
			br.close();
			
			//Prepara o XML que está em string para executar leitura por nodes
			DocumentBuilder db = DocumentBuilderFactory.newInstance().newDocumentBuilder();
		    InputSource is = new InputSource();
		    is.setCharacterStream(new StringReader(newData.toString()));
		    Document doc = db.parse(is);
		    NodeList nodes = doc.getElementsByTagName("cServico");

		    //Faz a leitura dos nodes
		    for (int j = 0; j < nodes.getLength(); j++) {
		      Element element = (Element) nodes.item(j);

		      NodeList valor = element.getElementsByTagName("Valor");
		      Element line = (Element) valor.item(0);
		      System.out.println("Valor: " + getCharacterDataFromElement(line));
		      
		      NodeList erro = element.getElementsByTagName("Erro");
		      line = (Element) erro.item(0);
		      System.out.println("Erro: " + getCharacterDataFromElement(line));
		    }			

		} catch (Exception e) {
			e.printStackTrace();
		}

	}
	
	public static String getCharacterDataFromElement(Element e) {
	    Node child = e.getFirstChild();
	    if (child instanceof CharacterData) {
	      CharacterData cd = (CharacterData) child;
	      return cd.getData();
	    }
	    return "";
	  }

}

2 Respostas

D

Lembrarei deste tópico caso eu precise fazer isto :wink:

vlw cara

A

Antes de mais nada muito obrigado pela código, mas gostaria de saber se funciona porque estou fazendo exatamente como está sendo demonstrado e sempre retorna valor zerado e Erro -15. Qualquer ajuda agradeço.

Criado 6 de agosto de 2012
Ultima resposta 1 de fev. de 2014
Respostas 2
Participantes 3