I'm using Java and i'm trying to get XML document from some http link. Code I'm using is:
URL url = new URL(link);
HttpURLConnection connection = (HttpURLConnection)url.openConnection();
connection.setRequestMethod("GET");
connection.connect();
Document doc = null;
CountInputStream in = new CountInputStream(url.openStream());
doc = DocumentBuilderFactory.newInstance().newDocumentBuilder().parse(in);
Don't pay attention at CountInputStream
, it's some special class acting like regular input stream.
Using the code above, I sometimes got error Fatal Error :1:1: Content is not allowed in prolog
. I assume that is has something to do with bad format of xml, but I have no idea how to fix it.
Looks like you forgot adding correct headers to your get request (ask the REST API developer or you specific API description):
HttpURLConnection connection = (HttpURLConnection)url.openConnection();
connection.header("Accept", "application/xml")
connection.setRequestMethod("GET");
connection.connect();
or
connection.header("Accept", "application/xml;version=1")
Someone should mark Johannes Weiß's comment as the answer to this question. That is exactly why xml documents can't just be loaded in a DOM Document class.
The real solution that I found for this issue was by disabling any XML Format post processors. I have added a post processor called "jp@gc - XML Format Post Processor
" and started noticing the error "Fatal Error :1:1: Content is not allowed in prolog
"
By disabling the post processor had stopped throwing those errors.
There are certainly some weird characters (e.g. BOM) or some whitespace before the XML preamble (<?xml ...?>
)?
It could be not supported file encoding. Change it to UTF-8 for example.
I've done this using Sublime
Source: Stackoverflow.com