Inputstreams, jar et XML..
Bonjour,
Je dois créer un composant permettant de vérifier des requêtes XPath dans un fichier XML packagé dans un jar.
Ma conception fut la suivante, à partir d'un JarInputStream:
- Positionnement du flux sur la JarEntry pointant le XML escompté
- Création d'une InputSource à partir du JarInputStream
- Application des requêtes XPath sur l'InputSource
... sauf que les résultats des requêtes appliquées sont faux. Une modification de conception en construisant un Document Dom (nourri par le même JarInputStream) donne des résultats exacts.
Un gourou traînant par ici, aurait-il une explication?
Ce qui ne fonctionne pas:
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
|
JarInputStream jis = new JarInputStream(is);
// positionnement
JarEntry current;
do {
current = jis.getNextJarEntry();
} while (current != null && !JBOSSESB_XML.equals(current.getName()));
try {
XPath xpath = XPathFactory.newInstance().newXPath();
// Retourne systématiquement 0 node, faux!
NodeList nodes = (NodeList) xpath.evaluate("<my Xpath>",
new InputSource(jis),
XPathConstants.NODESET);
[...]
} catch (XPathExpressionException e) {
e.printStackTrace();
throw new IngestRepositoryException(e);
}finally{
jis.close();
} |
Ce qui fonctionne:
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
|
JarInputStream jis = new JarInputStream(is);
// positionnement
JarEntry current;
do {
current = jis.getNextJarEntry();
} while (current != null && !JBOSSESB_XML.equals(current.getName()));
DocumentBuilder docBuilder;
Document doc;
try {
docBuilder = DocumentBuilderFactory.newInstance().newDocumentBuilder();
doc = docBuilder.parse(jis);
XPath xpath = XPathFactory.newInstance().newXPath();
// Retourne le résultat attendu
NodeList nodes = (NodeList) xpath.evaluate("<my Xpath>",
doc,
XPathConstants.NODESET);
[...]
} catch (ParserConfigurationException e) {
[...]
} catch (SAXException e) {
[...]
} catch (XPathExpressionException e) {
[...]
}finally{
jis.close();
} |