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 :
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>";
et voici le xsl :
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>
L'exécution de la servlet me donne l'image suivante
Nom : Capture_fo.JPG
Affichages : 711
Taille : 18,4 Ko

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 :
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
Mais je ne vois vraiment pas quel est le problème, même si je sens bien que ça vient de ce fichu src

Merci par avance de votre aide