RE: [xsl] <xsl:message terminate="yes"> results in zero byte file getting written

Subject: RE: [xsl] <xsl:message terminate="yes"> results in zero byte file getting written
From: "Michael Kay" <mike@xxxxxxxxxxxx>
Date: Wed, 28 Mar 2007 22:38:32 +0100
As far as the spec is concerned the state of filestore is undefined after a
transformation fails, so this is presumably intended as a Saxon-specific
question rather than an XSLT language question. I would imagine that in this
situation you have started serializing the output but the first buffer-full
hasn't yet been flushed to disk at the time of termination. I've certainly
seen this leave empty files on disk (if your transformation had got further
it might have left a non-empty but incomplete output file), but I haven't
seen problems in deleting such files; presumably the problem is that the
process still has a connection open to the file. In your call you've created
the FileOutputStream yourself, and Saxon takes the view that if you create
the stream, then you should close it after use (Saxon will only close the
stream when it has created it itself.) So it might be as simple a matter as
closing the stream before attempting the file delete.

Michael Kay

> -----Original Message-----
> From: Grant Slade [mailto:grant.slade@xxxxxxxxx] 
> Sent: 28 March 2007 21:47
> To: xsl-list@xxxxxxxxxxxxxxxxxxxxxx
> Subject: [xsl] <xsl:message terminate="yes"> results in zero 
> byte file getting written
> When I use the following to transform a file:
> transformer.transform(xmlStreamSource, new StreamResult(new 
> FileOutputStream("F:\\myfile.xml")));
> If I have an <xsl:message terminate="yes"> in the xsl 
> stylesheet "myfile.xml" gets written but as a zero byte file.
> If I try and use Java to delete the file through the File 
> class, it won't delete it although it finds the file through 
> the exists() method.
> My question is, is there a way to either not have the file 
> get written in the first place, or is there a way to force a 
> delete of that file?

Current Thread