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 :
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);
ç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.
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.

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);
Comment re-transformer ceci en String XML contenant mes objets ? Dois-je la recréer à la main avec l'api bas niveau DOM ?

Merci d'avoir lu et merci de votre aide.