Bonjour,
Je suis en train de créer une application qui transforme un xml en png, via un xsl, le tout dans une servlet utilisant la bibliothèque FOP.
Je m'arrache les cheveux depuis 2 jours pour intégrer à mon document une image. Cette image est créée par la servlet puis stockée dans un fichier temporaire sur le disque, quelque part.
En mode test (avec une méthode main) j'arrive à créer le document que je veux. En mode servlet, je n'ai jamais réussi à afficher l'image. Et de plus tout ce qui est censé se trouver après ne s'affiche pas non plus.
Voici le code Java :
et voici le xsl :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 File mapFile = File.createTempFile("mapfile", ""); // là je mets quelque chose dans mon mapFile String path = "file:///" + mapFile.getAbsolutePath().replaceAll("\\\\", "/") + ".png"; try { String xmlContent = "<?xml version=\"1.0\" encoding=\"iso-8859-1\"?><root><name>Machin</name>" + "<friend><name>truc_1</name><phNo>" + "truc_2" + "</phNo></friend>" + "<path>" + path + "</path>" + "</root>";
L'exécution de la servlet me donne l'image suivante
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 <?xml version="1.0" encoding="iso-8859-1"?> <xsl:stylesheet version="1.1" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:fo="http://www.w3.org/1999/XSL/Format" exclude-result-prefixes="fo"> <xsl:template match="root"> <fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format"> <fo:layout-master-set> <fo:simple-page-master master-name="my-page"> <fo:region-body margin="1in"/> </fo:simple-page-master> </fo:layout-master-set> <fo:page-sequence master-reference="my-page"> <fo:flow flow-name="xsl-region-body"> <fo:block>Hello, <xsl:value-of select="name" />!</fo:block> <fo:block> <fo:table> <fo:table-body> <fo:table-row> <fo:table-cell border="solid 1px black" text-align="center" font-weight="bold"> <fo:block>No.</fo:block> </fo:table-cell> <fo:table-cell border="solid 1px black" text-align="center" font-weight="bold"> <fo:block>Name</fo:block> </fo:table-cell> <fo:table-cell border="solid 1px black" text-align="center" font-weight="bold"> <fo:block>Phone Number</fo:block> </fo:table-cell> </fo:table-row> <xsl:for-each select="./friend"> <fo:table-row> <fo:table-cell border="solid 1px black" text-align="center"> <fo:block> <xsl:value-of select="position()" /> </fo:block> </fo:table-cell> <fo:table-cell border="solid 1px black" text-align="center"> <fo:block> <xsl:value-of select="name" /> </fo:block> </fo:table-cell> <fo:table-cell border="solid 1px black" text-align="center"> <fo:block> <xsl:value-of select="phNo" /> </fo:block> </fo:table-cell> </fo:table-row> </xsl:for-each> </fo:table-body> </fo:table> </fo:block> <fo:block> <xsl:text> ************ </xsl:text> <xsl:value-of select="path" /> <xsl:text> ************ </xsl:text> Voici une image youpi : <fo:external-graphic width="5cm" src=""> <xsl:attribute name="src"> <xsl:value-of select="path" /> </xsl:attribute> </fo:external-graphic> Et une autre : </fo:block> </fo:flow> </fo:page-sequence> </fo:root> </xsl:template> </xsl:stylesheet>
Le "path" que j'inclue dans le document (file:/// ...) me renvoie bien vers l'image quand je tape l'adresse dans le navigateur.
J'ai essayé plusieurs façons de déclarer le src dans la balise fo:external-graphic (en utilisant ur('') notamment) mais rien n'a fonctionné.
Dans les logs de TomCat, j'ai cette erreur :Mais je ne vois vraiment pas quel est le problème, même si je sens bien que ça vient de ce fichu src
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 oct. 09, 2015 5:45:07 PM org.apache.fop.fo.FOTreeBuilder fatalError Grave: org.xml.sax.SAXParseException; systemId: file:/C:/Program%20Files/Apache%20Software%20Foundation/Tomcat%207.0/webapps/s_calac/templates_xsl/test.xsl; lineNumber: 67; columnNumber: 48; java.lang.NullPointerException
Merci par avance de votre aide
Partager