Bonjour,
Je suis assez nouveau avec Xpath et je galère un peu.
Je bosse sur un Webservice Restfull avec Jersey + JaxB. Depuis peu on me demande s'il est possible de filtrer le résultat Xml du Webservice avec Xpath et du querystring.
Ma 1ère question plus Java que Xpath, je n'ai pas trouvé de moyen simple pour passer de mon résultat JaxB à un Document XML sur lequel je peux requêter avec Xpath. Je fais donc comme ceci :
ça marche, même si j'ai perdu un temps fou avec doc.toString() qui revoit un truc du type "#document : null" alors qu'il contient bien la recomposition de mes éléments XML.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 String retour = null; final StringWriter strW = new StringWriter(); Application appl = getApplication(); //je vous épargne les couches métiers & compagnie. final JAXBContext context = JAXBContext.newInstance(Application.class); final Marshaller marsh = context.createMarshaller(); marsh.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, Boolean.TRUE); marsh.marshal(appl, strW); retour = strW.toString(); //partie Xpath DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); factory.setNamespaceAware(true); DocumentBuilder builder; Document doc = null; XPathExpression expr = null; builder = factory.newDocumentBuilder(); InputSource is = new InputSource(new StringReader(retour)); doc = builder.parse(is);
Existe-t-il un meilleurs moyen pour "connecter" Xpath et JaxB que ce que j'ai coder ?
Mon deuxième problème est qu'une fois ma requête Xpath est effectuée je ne sais pas comment récupérer le résultat.
Comment re-transformer ceci en String XML contenant mes objets ? Dois-je la recréer à la main avec l'api bas niveau DOM ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 // Create a XPathFactory XPathFactory xFactory = XPathFactory.newInstance(); // Create a XPath object XPath xpath = xFactory.newXPath(); expr = xpath.compile(fields); Object result = expr.evaluate(doc, XPathConstants.NODE);
Merci d'avoir lu et merci de votre aide.
Partager