Bonjour,
J'ai une servlet qui permet de télécharger un fichier pdf. Le fichier est généré à la volée puis envoyé vers le navigateur client. Cela faisait + de 2 ans que tout fonctionnait à merveille. Ce matin, on vient me trouver pour me dire qu'on n'arrive plus à télécharger le fichier.
Je regarde et de fait, j'ai une exception qui est levée :
java.lang.IllegalStateException: "getOutputStream()" a déjà été appelé pour cette réponse
Ce qui est incompréhensible, c'est que je n'ai plus touché au code depuis + d'un an et que jusqu'à présent tout était ok.
L'application web tourne sur tomcat et j'utilise spring.
J'ai bien fait des recherches à ce propos mais la seule info que je trouve c'est que l'on peut appeler seulement une fois la fonction response.getOutputStream(). Il me semble que c'est bien ce que je fais.
Merci.
voici le code de la servlet :
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
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79 package be.cpasdeliege.intranet.informatique.controler; import java.io.ByteArrayOutputStream; import javax.servlet.ServletOutputStream; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.xml.transform.Result; import javax.xml.transform.Source; import javax.xml.transform.Transformer; import javax.xml.transform.TransformerFactory; import javax.xml.transform.dom.DOMSource; import javax.xml.transform.sax.SAXResult; import javax.xml.transform.stream.StreamSource; import org.apache.fop.apps.Driver; import org.springframework.web.servlet.ModelAndView; import org.springframework.web.servlet.mvc.Controller; import be.cpasdeliege.intranet.informatique.model.domain.DomainInterface; public class GenererPDF implements Controller { DomainInterface metier = null; public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response) throws Exception { String type = request.getParameter("type"); String saut = request.getParameter("saut"); if(type == null || saut == null) { response.sendRedirect((String)request.getSession().getAttribute("retour")); } else { ByteArrayOutputStream out = new ByteArrayOutputStream(); Driver driver = new Driver(); driver.setRenderer(Driver.RENDER_PDF); driver.setOutputStream(out); Result resultat = new SAXResult(driver.getContentHandler()); Source source; Source style; if(type.equals("alpha")) { if(saut.equals("true")) { source = new DOMSource(metier.getAnnuaireAlphabetiqueXML()); style = new StreamSource("c:\\fop\\cpas_alpha_saut.xsl"); } else { source = new DOMSource(metier.getAnnuaireAlphabetiqueXML()); style = new StreamSource("c:\\fop\\cpas_alpha.xsl"); } } else { if(saut.equals("true")) { source = new DOMSource(metier.getAnnuaireServiceXML()); style = new StreamSource("c:\\fop\\cpas_service_saut.xsl"); } else { source = new DOMSource(metier.getAnnuaireServiceXML()); style = new StreamSource("c:\\fop\\cpas_service.xsl"); } } TransformerFactory transformerFactory = TransformerFactory.newInstance(); Transformer transformer = transformerFactory.newTransformer(style); transformer.transform(source, resultat); response.setContentType("application/pdf"); response.setContentLength(out.size()); ServletOutputStream outputStream = response.getOutputStream(); outputStream.write(out.toByteArray()); outputStream.flush(); } return null; } public DomainInterface getMetier() { return metier; } public void setMetier(DomainInterface metier) { this.metier = metier; } }
Partager