web-dev-qa-db-fra.com

Erreur fatale: 1: 1: le contenu n'est pas autorisé dans le prologue

J'utilise Java et j'essaie d'obtenir un document XML à partir d'un lien http. Le code que j'utilise est:

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);

Ne faites pas attention à CountInputStream, c'est une classe spéciale qui agit comme un flux d'entrée normal. 

En utilisant le code ci-dessus, j'ai parfois l'erreur Fatal Error :1:1: Content is not allowed in prolog. Je suppose que cela a quelque chose à voir avec le mauvais format xml, mais je ne sais pas comment le réparer.

15
guest86

Je me tourne vers une réponse pour que mon commentaire puisse être accepté et que cette question ne reste plus sans réponse.

La cause la plus probable de cela est une réponse mal formée, qui inclut des caractères avant le <?xml …> initial. Alors, jetez un coup d’œil au document transféré via HTTP et corrigez-le côté serveur.

22
MvG

Il y a certainement des caractères étranges (par exemple, BOM ) ou des espaces avant le préambule XML (<?xml ...?>)?

6
Johannes Weiss

La vraie solution que j'ai trouvée pour ce problème était de désactiver tout post-processeur au format XML. J'ai ajouté un post-processeur appelé "jp@gc - XML Format Post Processor" et j'ai commencé à remarquer l'erreur "Fatal Error :1:1: Content is not allowed in prolog"

En désactivant le post-processeur avait cessé de générer ces erreurs.

0
Sastry

On dirait que vous avez oublié d'ajouter les en-têtes corrects à votre demande get (demandez au développeur de l'API REST ou à la description de votre API spécifique):

HttpURLConnection connection = (HttpURLConnection)url.openConnection();
connection.header("Accept", "application/xml")
connection.setRequestMethod("GET");
connection.connect();

ou

connection.header("Accept", "application/xml;version=1")
0
Daniel Nelson

Quelqu'un devrait marquer le commentaire de Johannes Weiß comme réponse à cette question. C’est exactement pourquoi les documents XML ne peuvent pas simplement être chargés dans une classe Document DOM.

http://en.wikipedia.org/wiki/Byte_order_mark

0
smiron