Problème d'utilisation XPath
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:
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:
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.