Bonjour
J'aimerai savoir comment un service web peux transmettre une flux XML ?
Est ce que le return d'un org.w3c.dom.Document suffit et au client de traiter ?
Un exemple serait fort apprécier
Merci d'avance.
Bonjour
J'aimerai savoir comment un service web peux transmettre une flux XML ?
Est ce que le return d'un org.w3c.dom.Document suffit et au client de traiter ?
Un exemple serait fort apprécier
Merci d'avance.
Bonjour,
il suffit d'utiliser un Writer xml pour convertir l'arbre en String et envoyer le contenu du flux xml dans la réponse http.
Exemple pour convertir le DOM en String :
où message est un document DOM
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 try { DOMSource domSource = new DOMSource(message); StringWriter writer = new StringWriter(); StreamResult result = new StreamResult(writer); TransformerFactory tf = TransformerFactory.newInstance(); Transformer transformer = tf.newTransformer(); transformer.transform(domSource, result); String stringResult = writer.toString(); } catch (Exception e) { log.error(e.getMessage()); }
Exemple de renvoi dans la réponse :
où response est un HttpServletResponse
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
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36 String contentType = Constant.TEXT_XML; String charset = request.getCharacterEncoding(); if (null != charset) { contentType += Constant.CHARSET_EQUAL + charset; } response.setHeader(Constant.CONTENT_TYPE, contentType); // prise en compte dans la taille de la réponse des caractères unicode de plus d'un octet Charset charsetutil = null; if (charset != null) { charsetutil = Charset.forName(charset); } else { charsetutil = Charset.forName("ISO-8859-1"); } ByteBuffer byteBuf = charsetutil.encode(xmlResponse); int size = 0; while (byteBuf.remaining()>0) { byteBuf.get(); size++; } response.setHeader(Constant.CONTENT_LENGTH, "" + size); PrintWriter printwriter = null; try { printwriter = response.getWriter(); printwriter.write(xmlResponse); response.flushBuffer(); } catch (Exception e) { log.error(e); }
Merci,
J'ai pas très bien compris la suite, on récupère t on le "stringResult" ?
En fait mon service renvoie un objet en réponse, c'est cette objet que je souhaiterai transformer en xml et renvoyer en flux
Une autre question :
J'ai deux service web en ligne. Ils prennent en paramètre un objet, il n'est donc pas possible que le tester en entrant l'url dans un navigateur ?
Ou bien je dois modifier le service pour n'accepter que les int et String pour construire cet objet ?
Merci encore
Bonjour,
le stringresult servira à être envoyé dans le flux de la response.
Il suffit d'utiliser un outil de mapping objet/xml style JAXB ou autre.
Cela dépend :
- soit tu passes cela en paramètre de ta requête GET
- soit tu passes l'objet au format xml dans la requête HTTP en type POST (et dans ce cas-là ce n'est pas testable directement avec un navigateur)
- soit tu fais du SOAP RPC et tu intègres directement l'objet dans le SOAP Message.
Question : tu as des WS Rest ou SOAP ?
Partager