The code snippet I have posted is demonstrating the flow for one processing
run. I have deliberately kept all the business logic out of way to ease
understanding. We are also maintaining single instances of FOPFactory and
TransformerFactory in the actual class.
Regarding XML, I can replace the existing code as follows where java2XML is
using Castor APIs for marshelling. Please advise.
FileOutputStream fileOut = new
FileOutputStream(xmlFile);
XmlDocument receiptDataXML = new XmlDocument();
JavaXMLBinding.java2XML(receiptData, receiptDataXML);
receiptDataXML.write(fileOut);
Source src = new StreamSource(xmlFile);
We are also doing Exception Handling but no exceptions are thrown in this
scenario. Server shuts down at transformer.transform(src, res);. Last line
displayed in log is 'WARN (FONode) - Warning(Unknown location): fo:table,
table-layout="auto" is currently not supported by FOP'
> Source src = new StreamSource(xmlInputStream);
> logger.info("After setting source");
>
> // Resulting SAX events (the generated FO) must be
> piped through to FOP
> Result res = new SAXResult(fop.getDefaultHandler());
> logger.info("After setting result");
>
> // Start XSLT transformation and FOP processing
> transformer.transform(src, res);
INFO (ReceiptTransformer) - After setting source
INFO (ReceiptTransformer) - After setting result
WARN (FONode) - Warning(Unknown location): fo:table, table-layout="auto" is
currently not supported by FOP
Jeremias Maerki-2 wrote:
>
> Very little to work with here. If you have a code line I'm sure you also
> have an exception and a stack trace. Can we see that please? If it's a
> JVM crash there's not much we can help you with but you don't say if
> it's that, either.
>
> The code snippet is out of context which doesn't help either. Anyway,
> looking at the code I see two things that I don't like (but that doesn't
> mean it has something to do with your problem:
> 1. That the XML generated from the POJO has to be written to a temporary
> String is very inefficient. I don't know what you're using there but
> there has to be a better way (i.e. to connect via SAX).
> 2. The FopFactory and the TransformerFactory are instantiated for every
> processing run. That way you can't profit from caching images and other
> stuff and the stylesheet has to be reparsed every time. That slows your
> application down if nothing else. If this code is running concurrently
> you might easily get into an OutOfMemoryError if larger images are used
> because they can't be shared and take up space for each processing run
> rather than once. Sharing the FopFactory doesn't get that out of the
> world but can improve the situation.
>
> On 07.08.2008 08:05:40 xsltuser wrote:
>>
>> Hi All,
>>
>> One of our applications is using FOP processing mechanism to transform
>> xml
>> files to pdf format by applying XSLT templates. The issue here is (which
>> has
>> become a show stopper now) is that at times the transformation process
>> kills
>> the server on which it is running. This happens randomly for different
>> servers. There is no specific scenario in which it can be replicated. As
>> evident from server logs, it fails at the following line
>> transformer.transform(src, res);
>>
>> Please find below the code snippet. Any suggestions to fix the issue are
>> greatly appreciated.
>>
>> /// import statements
>>
>>
>> import java.io.File;
>> import java.io.FileInputStream;
>> import java.io.FileOutputStream;
>> import java.io.FileWriter;
>> import java.io.OutputStream;
>>
>> import javax.xml.transform.OutputKeys;
>> import javax.xml.transform.Result;
>> import javax.xml.transform.Source;
>> import javax.xml.transform.Transformer;
>> import javax.xml.transform.TransformerFactory;
>> import javax.xml.transform.sax.SAXResult;
>> import javax.xml.transform.stream.StreamResult;
>> import javax.xml.transform.stream.StreamSource;
>>
>> // Code snippet follows:
>>
>>
>> XmlDocument receiptDataXML = new XmlDocument();
>> JavaXMLBinding.java2XML(receiptDataPOJO,
>> receiptDataXML);
>>
>> File xsltfile=new File(xsltPath + "testxsl.xsl");
>>
>> File pdffile = new File(xmlPath + "testpdf.pdf");
>>
>> // Setup output
>>
>> OutputStream out = new
>> java.io.FileOutputStream(pdffile);
>> out = new java.io.BufferedOutputStream(out);
>>
>> FopFactory fopFactory = FopFactory.newInstance();
>> fopFactory.setUserConfig(configfile);
>> FOUserAgent foUserAgent =
>> fopFactory.newFOUserAgent();
>>
>> // Construct fop with output format as PDF
>> Fop fop =
>> fopFactory.newFop(MimeConstants.MIME_PDF,foUserAgent, out);
>>
>> TransformerFactory factory =
>> TransformerFactory.newInstance();
>> Transformer transformer = factory.newTransformer(new
>> StreamSource(xsltfile));
>> transformer.setOutputProperty(OutputKeys.INDENT, "yes");
>>
>> java.io.StringWriter wr=new java.io.StringWriter();
>> receiptDataXML.write(wr);
>> ByteArrayInputStream xmlInputStream = new
>> ByteArrayInputStream(wr.toString().getBytes ());
>> Source src = new StreamSource(xmlInputStream);
>>
>> // Resulting SAX events (the generated FO) must be
>> piped through to
>> FOP
>> Result res = new SAXResult(fop.getDefaultHandler());
>>
>> // Start XSLT transformation and FOP processing
>> transformer.transform(src, res);
>>
>>
>>
>>
>>
>>
>>
>> --
>> View this message in context:
>> http://www.nabble.com/Abrubt-server-shutdown-during-XSLT-transformation-using-FOP-0.94-tp18864628p18864628.html
>> Sent from the FOP - Users mailing list archive at Nabble.com.
>>
>>
>
>
>
> Jeremias Maerki
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: [EMAIL PROTECTED]
> For additional commands, e-mail: [EMAIL PROTECTED]
>
>
>
--
View this message in context:
http://www.nabble.com/Abrubt-server-shutdown-during-XSLT-transformation-using-FOP-0.94-tp18864628p18866170.html
Sent from the FOP - Users mailing list archive at Nabble.com.
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]