PostmonAPI / postmon

Uma API para consulta de informações relacionadas a endereçamento e entrega no Brasil.
http://www.postmon.com.br
GNU General Public License v3.0
656 stars 81 forks source link

API de Logradouro não está funcionando #276

Open ghdias97 opened 3 years ago

ghdias97 commented 3 years ago

Utilizo a API em uma aplicação java, porém quando vou compilar o código ele acaba retornando um erro.

java.lang.NullPointerException: Cannot get property 'logradouro' on null object
    at iprev.sicop.util.PostmonXmlServiceTest.Deve obter resultado correto do serviço de CEPs(PostmonXmlServiceTest.groovy:16)

Meu código:

public Result getResult(String cep) {
        DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();

        Document document;
        try {
            DocumentBuilder builder = factory.newDocumentBuilder();
            URL url = new URL(
                    "http://api.postmon.com.br/v1/cep/" + cep + "?format=xml");
            InputStream stream = url.openStream();
            document = builder.parse(stream);

        } catch (IOException | SAXException | ParserConfigurationException e) {
            e.printStackTrace();
            return null;
        }

        NodeList nodeList = document.getDocumentElement().getChildNodes();

        Result result = new Result();

        for (int i = 0; i < nodeList.getLength(); i++) {

            Node node = nodeList.item(i);

            if (node instanceof Element) {

                NodeList childNodes = node.getChildNodes();

                String content = node.getLastChild().getTextContent().trim();

                switch (node.getNodeName()) {
                case "bairro":
                    result.bairro = content;
                    break;
                /*case "logradouro":
                    result.logradouro = content;
                    break;*/
                case "cidade":
                    result.cidade = content;
                    break;
                case "estado":
                    result.estado = content;
                    break;

                case "estado_info":
                    for (int j = 0; j < childNodes.getLength(); j++) {
                        Node cNode = childNodes.item(j);
                        String content2 = cNode.getTextContent().trim();

                        if (cNode.getNodeName().equals("codigo_ibge"))
                            result.codigoEstado = content2;
                    }

                    break;

                case "cidade_info":
                    for (int j = 0; j < childNodes.getLength(); j++) {
                        Node cNode = childNodes.item(j);
                        String content2 = cNode.getTextContent().trim();

                        if (cNode.getNodeName().equals("codigo_ibge"))
                            result.codigoCidade = content2;
                    }

                    break;
                }
            }
        }

        return result;
    }

    public class Result {
        public String logradouro;
        public String bairro;
        public String cidade;
        public String estado;
        public String codigoEstado;
        public String codigoCidade;

        @Override
        public String toString() {
            return logradouro + ", " + bairro + ", " + cidade + "("
                    + codigoCidade + ") - " + estado + "(" + codigoEstado + ")";
        }
    }
gabrielbarceloscn commented 3 years ago

Reproduz a request no Postman, Insomnia etc e mostra aqui o resultado. Faz uma chamada HTTP usando o CEP que você usou pra testar.