0

For a class project we are trying to connect to Google distance matrix and parse some data from the xml file but when we run it and fill out our destination fields and hit next it throws the following error in the console. Here is a copy of the xml we are pulling from, we are replacing chicago with startingLocation, and miami with endDestination. These values are filled out in previous frame that's not included.

http://maps.googleapis.com/maps/api/distancematrix/xml?origins=chicago&destinations=Miami&language=en-EN&sensor=false&language=en-EN&units=imperial

[Fatal Error] :1:2: The markup in the document preceding the root element must be well-formed. org.xml.sax.SAXParseException; lineNumber: 1; columnNumber: 2; The markup in the document preceding the root element must be well-formed. at com.sun.org.apache.xerces.internal.parsers.DOMParser.parse(Unknown Source) at com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderImpl.parse(Unknown Source) at edu.bsu.cs222.gascalculator.connection.GoogleXMLParser.parseXMLFrom(GoogleXMLParser.java:44) at edu.bsu.cs222.gascalculator.connection.GoogleXMLParser.setUp(GoogleXMLParser.java:23) at edu.bsu.cs222.gascalculator.ui.GasCalculatorFrame.actionPerformed(GasCalculatorFrame.java:107) at javax.swing.AbstractButton.fireActionPerformed(Unknown Source) at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source) at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source) at javax.swing.DefaultButtonModel.setPressed(Unknown Source) at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(Unknown Source) at java.awt.Component.processMouseEvent(Unknown Source) at javax.swing.JComponent.processMouseEvent(Unknown Source) at java.awt.Component.processEvent(Unknown Source) at java.awt.Container.processEvent(Unknown Source) at java.awt.Component.dispatchEventImpl(Unknown Source) at java.awt.Container.dispatchEventImpl(Unknown Source) at java.awt.Component.dispatchEvent(Unknown Source) at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source) at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source) at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source) at java.awt.Container.dispatchEventImpl(Unknown Source) at java.awt.Window.dispatchEventImpl(Unknown Source) at java.awt.Component.dispatchEvent(Unknown Source) at java.awt.EventQueue.dispatchEventImpl(Unknown Source) at java.awt.EventQueue.access$200(Unknown Source) at java.awt.EventQueue$3.run(Unknown Source) at java.awt.EventQueue$3.run(Unknown Source) at java.security.AccessController.doPrivileged(Native Method) at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source) at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source) at java.awt.EventQueue$4.run(Unknown Source) at java.awt.EventQueue$4.run(Unknown Source) at java.security.AccessController.doPrivileged(Native Method) at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source) at java.awt.EventQueue.dispatchEvent(Unknown Source) at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source) at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source) at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source) at java.awt.EventDispatchThread.pumpEvents(Unknown Source) at java.awt.EventDispatchThread.pumpEvents(Unknown Source) at java.awt.EventDispatchThread.run(Unknown Source)

public class GoogleDistanceMatrixConnection
{
String startLocation;
String endLocation;
final String urlString = "http://maps.googleapis.com/maps/api/distancematrix/xml?origins=" + startLocation +"&destinations=" + endLocation +"&language=en-EN&sensor=false&language=en-EN&units=imperial";


private static String XMLFile;

public String makeXMLFile(String start, String end) throws IOException
{
    startLocation = start;
    endLocation = end;
    URL url = new URL(urlString);
    URLConnection connection = url.openConnection();
    connection.connect();

    BufferedReader reader = new BufferedReader( new InputStreamReader(
            connection.getInputStream()));

    for(String line = reader.readLine(); line != null; line = 
            reader.readLine())
    {
        setXMLFile(line);
    }
    return getXMLFile();
}

public static String getXMLFile() {
    return XMLFile;
}
public static void setXMLFile(String xMLFile) {
    XMLFile = xMLFile;
}

public boolean doesPageExist() {
    if(XMLFile == null)
        return true;
    else    
        return false;
}
}

public class GoogleXMLParser {

private Document document;

@Before
public void setUp(String start, String end) throws ParserConfigurationException, SAXException,
        IOException {
    InputSource source = createInputSourceFromSampleXMLData(start, end);
    document = parseXMLFrom(source);
}

private InputSource createInputSourceFromSampleXMLData(String start, String end) {
    GoogleDistanceMatrixConnection googleConnection = new GoogleDistanceMatrixConnection();

    String xmlFile = "";
    try {
        xmlFile = googleConnection.makeXMLFile(start, end);
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
    StringReader stringReader = new StringReader(xmlFile);
    return new InputSource(stringReader);
}

private Document parseXMLFrom(InputSource source)
        throws ParserConfigurationException, SAXException, IOException {
    DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
    DocumentBuilder documentBuilder = factory.newDocumentBuilder();
    return documentBuilder.parse(source);
}

public String retrieveDistance() throws ParserConfigurationException,
        SAXException, IOException {
    String distanceChildNodeName = document.getFirstChild().getChildNodes()
            .item(3).getFirstChild().getChildNodes().item(2)
            .getChildNodes().item(1).getFirstChild().getTextContent();
    return distanceChildNodeName;
}

public String retrieveDuration() throws ParserConfigurationException,
        SAXException, IOException {
    String durationChildNodeValue = document.getFirstChild()
            .getChildNodes().item(3).getFirstChild().getChildNodes()
            .item(1).getChildNodes().item(1).getFirstChild()
            .getTextContent();
    return durationChildNodeValue;
}
}
Dan B
  • 17
  • 7

1 Answers1

0
public String makeXMLFile(String start, String end) throws IOException
{
    startLocation = start;
    endLocation = end;
    URL url = new URL(urlString);
    URLConnection connection = url.openConnection();
    connection.connect();

    BufferedReader reader = new BufferedReader( new InputStreamReader(
            connection.getInputStream()));

    for(String line = reader.readLine(); line != null; line = 
            reader.readLine())
    {
        setXMLFile(line);
    }
    return getXMLFile();
}

public static String getXMLFile() {
    return XMLFile;
}
public static void setXMLFile(String xMLFile) {
    XMLFile = xMLFile;
}

You're overriding XMLFile with each line -> you're getting the last line instead of the whole content. You could use a StringBuilder to append the lines.

Puce
  • 37,247
  • 13
  • 80
  • 152