Leitura xml API google usando JDOM

4 respostas
java
R

Olá.

Estou precisando fazer um parse de um xml que recebo da api Google Maps mas aparentemente não esta funcionando.

A URL que estou acessando é essa:

https://maps.googleapis.com/maps/api/distancematrix/json?origins=09820-135&destinations=08341-240&mode=driving&language=br-BR";

O retorno é esse:

<DistanceMatrixResponse> <status>OK</status> <origin_address> Jardim Valdibia, São Bernardo do Campo - SP, 09820-135, Brasil </origin_address> <destination_address> Jardim Boa Esperanca (Vicente de Carvalho), Guarujá - SP, 11470-040, Brasil </destination_address> <row> <element> <status>OK</status> <duration> <value>3656</value> <text>1 hora 1 minuto</text> </duration> <distance> <value>63113</value> <text>63,1 km</text> </distance> </element> </row> </DistanceMatrixResponse>

Estou usando o JDOM e ele até chega a pegar o nó ROOT mas os demais não funciona:

`

SAXBuilder builder = new SAXBuilder();

        Document doc = builder.build(f);

        Element root = (Element) doc.getRootElement();

        List dados = root.getChildren();

        Iterator i = dados.iterator();

        while (i.hasNext()) {
            Element pessoa = (Element) i.next();
            System.out.println("Status: " + pessoa.getChildText("status"));
            System.out.println("Origem: " + pessoa.getChildText("origin_address"));
            System.out.println("Destino: " + pessoa.getChildText("destination_address"));

        }

`
EStu recebendo um null como retorno:

Status: null
Origem: null
Destino: null
Status: null
Origem: null
Destino: null
Status: null
Origem: null
Destino: null
Status: null
Origem: null
Destino: null

EStou deixando passar alguma coisa?

grato

4 Respostas

R

Bom essa URL que vc postou retorna um JSON, não seria isso?
A url que retorna um XML: https://maps.googleapis.com/maps/api/distancematrix/xml?origins=09820-135&destinations=08341-240&mode=driving&language=br-BR

R

Ola.

Eu postei errado a url. O correto seria com xml mesmo, mas ja tentei usando xml e não funciona.

R

Tente assim:

private static Document loadTestDocument(String url) throws Exception {
	        DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
	        factory.setNamespaceAware(true);
	        return (Document) factory.newDocumentBuilder().parse(new URL(url).openStream());
	}

	public static void main(String[] args) throws Exception {
			String url = "http://maps.googleapis.com/maps/api/distancematrix/xml?origins=09820-135&destinations=08341-240&mode=driving&language=br-BR";
	    	Document doc = loadTestDocument(url);
	        System.out.println(doc);
	       
	}
I
package br.com.rest.test; import javax.ws.rs.client.Client; import javax.ws.rs.client.ClientBuilder; import javax.ws.rs.client.WebTarget; import javax.ws.rs.core.MediaType; import javax.ws.rs.core.Response;

import br.com.rest.util.JsonConverter;

public class TestGoogle {

public static void main(String[] args) {
    
    Client client = null;
    Response response = null;
    String json = null;
    String url = "https://maps.googleapis.com/maps/api/distancematrix/json?origins=09820-135&destinations=08341-240&mode=driving&language=br-BR";
    
    try {
        client = ClientBuilder.newClient();
        WebTarget path = client.target(url);
        System.out.println("URL DE REQUEST: {}" + path.getUri());
        response = path.request(MediaType.APPLICATION_JSON).get(Response.class);
        System.out.println(response.getStatus());
        System.out.println(response.getStatusInfo().toString());
        
        if(Response.Status.OK.getStatusCode() != response.getStatus()){
            return;
        }
        
        json = response.readEntity(String.class);
        System.out.println(json);
        JsonConverter.jsonToPojo(json, Google.class);
    } catch (Exception e) {
    }finally {
        try {
            if(response != null)
                response.close();
            if(client != null)
                client.close();
        } catch (Exception e) {
        }
    }
}

}

Ou trabalhando de uma forma mais elegante com rest, usando jersey + jackson.
E o que sobraria pra fazer é o mais fácil, criar uma estrutura de objetos que representa seu json, e fazer o wrapper.

Criado 5 de maio de 2016
Ultima resposta 7 de mai. de 2016
Respostas 4
Participantes 3