Bonjour,
Je travaille actuellement sur l'édition de facture sur une appli web.
Le clic sur le lien de la facture déclenche l'appel d'un ejb qui va récupérer la facture sur un autre serveur.
Le but est donc de transmettre à l'EJB le flux de sortie de l'utilisateur pour qu'il écrive dedans à partir du flux d'entrée du serveur des factures.
Tout cela fonctionne bien sauf que j'ai un problème d'encodage ce qui fait que le document pdf est corrompu.
Lorsque sur mon ejb je sauvegarde la facture dans un fichier à partir du flux de serveur factures, puis que je transfère ce fichier dans le flux client, tout se passe bien.
C'est donc bien le fait d'écrire directement dans le flux de sortie client à partir du flux d'entrée qui pose le problème.
Les factures téléchargées ont des tailles variant de quelques octées. Lors de leur édition, soit elles s'affichent bien, soit elles s'affichent mal, soit elles ne s'affichent pas du tout.
Pour transmettre le flux de sortie au serveur ejb, j'utilise la librairie com.healthmarketscience.rmiio.
Passons au code :
Coté client :
Coté serveur :
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 HttpServletResponse lOuterResponse; OutputStream os = null; RemoteOutputStreamServer ostream = null; System.setProperty(RemoteStreamExporter.EXPORTER_PROPERTY, WeblogicRemoteStreamExporter.class.getName()); // Parametrage du flux de retour lOuterResponse = getResponse(); lOuterResponse.setHeader("Expires", "0"); lOuterResponse.setHeader("Cache-Control", "no-cache, no-store"); lOuterResponse.setHeader("Pragma", "public"); lOuterResponse.setHeader("Content-Type", "application/pdf"); lOuterResponse.setHeader("Content-Disposition", "inline; filename=\"facture" + vNumDocConso + ".pdf\""); os = lOuterResponse.getOutputStream(); ostream = new SimpleRemoteOutputStream(new BufferedOutputStream(os)); InputDto vInputDto = new InputDto(); vInputDto.setUrlFacture(urlPdf); vInputDto.setOutputStream(ostream.export()); FacturePDFManager.sendFacturePdf(vInputDto);
Voilà.
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 BufferedInputStream bufferedInput = null; int vReadTimeout = 0; final String vUrlPDF = pInputDto.getUrlFacture(); final URL vURL = new URL(vUrlPDF); final URLConnection vURLConnection = vURL.openConnection(); // on caste car on sait que c'est une HTTPUrlConnection final HttpURLConnection vHttpURLConnection = (HttpURLConnection) vURLConnection; //Recuperation du timeout de lecture vReadTimeout = new Integer(EjbPropertiesManager.getInstance().getProperty("ReadTimeout")); vHttpURLConnection.setReadTimeout(vReadTimeout); RemoteOutputStream lOutputStream = pInputDocubaseDto.getOutputStream(); byte[] buffer = new byte[1024]; bufferedInput = new BufferedInputStream(vHttpURLConnection.getInputStream()); int i=0; //Keep reading from the file while there is any content //when the end of the stream has been reached, -1 is returned while (bufferedInput.read(buffer) != -1) { lOutputStream.writePacket(buffer, i++); lOutputStream.flush(); } if (bufferedInput != null) { bufferedInput.close(); }
Quelqu'un a t'il une solution à me proposer ? Des pistes à explorer ?
S'il vous plait, merci de ne répondre uniquement à la question posée.
Florian.
Partager