Problème lien avec baseX

22-11-2013 à 15:43:57
Bonjour !

J'ai un souci pour charger le fichier xml dans un servlet Java (je suis sur netbeans avec Tomcat et un serveur BaseX).

J'arrive à récupérer en String le contenu du fichier xml mais au moment de le parser j'ai cette erreur :

java.net.MalformedURLException: no protocol:
<entries>
<entry>
<ID>1021</ID>
<name_fr>AC BY MARRIOTT NICE</name_fr>
<name_fr_short>AC BY MARRIOTT NICE</name_fr_short>
<address>
<address_line1>59 Promenade des Anglais</address_line1>
<address_line2/>
<address_line3/>
......

avec à la suite tout le contenu du xml

Dans mon servlet je fais :

// fichierXml = string contenant le XML récupéré grâce à l'API java de baseX => convertir en Document
Document doc = parser.parse(fichierXml);

// Convertir en XmlSource
Source xmlSource = new DOMSource(doc);
response.setContentType("text/html");


et après lancer dans le navigateur avec le Transformer ce qui produit l'erreur.
Ceci fonctionne si je vais chercher le fichier xml directement avec son chemin, mais du coup je n'utilise pas baseX !

Merci à celui qui aurais une idée !
  • Liens sponsorisés



25-11-2013 à 09:58:39
Bonjour,

Si le contenu du document XML est dans une String, alors il ne faut pas parser comme une URL (le message d'erreur indique d'ailleurs que l'URL est mal formée, et pour cause, on lui injecte du XML).
Il y a une confusion entre le conteneur et le contenu.

Pour parser un document qui est dans une String, il faut utiliser une autre méthode :
http://docs.oracle.com/javase/6/docs/api/javax/xml/parsers/DocumentBuilder.html#parse(org.xml.sax.InputSource)
et un InputSource peut être construit à partir d'un StringReader :
http://docs.oracle.com/javase/6/docs/api/java/io/StringReader.html#StringReader(java.lang.String)

Attention à cette méthode de mettre tout un document XML dans une String, ce peut être envisagé pour des résultats de requête peu volumineux seulement !
25-11-2013 à 16:04:50
Merci !
En effet j'ai vu qu'il fallait donner une url, mais je ne connaissais pas StringReader.

Mais en cherchant dans la documentation de BaseX il ne me semble pas qu'on puisse récupérer un document entier mis à part faire une requete XQuery vide (comme j'ai fait d'ou le string contenant tout le document XML).

26-11-2013 à 14:58:32
La fonction doc() permet d'adresser un document dans la BD :
http://www.xqueryfunctions.com/xq/fn_doc.html
mais comme il n'y a qu'un seul document, je n'en vois pas l'intérêt
  • Liens sponsorisés