XSLT transform throws java.lang.StackOverflowError on docbook document
containing large table
---------------------------------------------------------------------------------------------
Key: XALANJ-2466
URL: https://issues.apache.org/jira/browse/XALANJ-2466
Project: XalanJ2
Issue Type: Bug
Security Level: No security risk; visible to anyone (Ordinary problems in
Xalan projects. Anybody can view the issue.)
Affects Versions: 2.7.1
Environment: Windows XP, Eclipse
Reporter: Hans van Rijswijk
Transforming a docbook document with Xalan ends up with a
java.lang.StackOverflowError.
I am using Xalan-J version 2.7.1, docbook-xsl version 1.74.0, docbook-xml
version 4.5.
The following small Java program ilustrates this.
Setting NUMROWS to a lower value makes the error disappear. However, I need
this program to run with large tables too.
Scaleability is a high priority issue. I think something has been solved in a
recursive way, which makes the transformation of large tables not scaleable.
I am running the program under Eclipse with standard stack size settings. The
error also appears in other environments.
package test;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.net.MalformedURLException;
import java.net.URL;
import javax.xml.transform.Result;
import javax.xml.transform.Source;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerConfigurationException;
import javax.xml.transform.TransformerException;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.stream.StreamResult;
import javax.xml.transform.stream.StreamSource;
/**
*
* Xalan Processor
*
*/
public class XalanProcessor {
public static int NUMROWS = 700;
public static final String CHARSETNAME = "utf-8";
public static TransformerFactory tFactory =
TransformerFactory.newInstance("org.apache.xalan.processor.TransformerFactoryImpl",
XalanProcessor.class.getClassLoader());
public static void transform(Source src, URL xsltUri, OutputStream out,
final OutputStream debug)
throws TransformerConfigurationException, TransformerException {
// Setup Transformer
Source xsltSrc = new StreamSource(xsltUri.toExternalForm());
Transformer transformer = tFactory.newTransformer(xsltSrc);
if (debug != null) {
try {
debug.write("newTransformer
successful".getBytes(CHARSETNAME));
} catch (IOException e){
}
}
Result res = new StreamResult(out);
// Start the transformation process
transformer.transform(src, res);
}
private static File _reportFile = null;
private static OutputStream _reportStream;
private static File _transformedFile;
public static void main(String[] args) {
URL xsltUri = null;
OutputStream _transformedStream = null;
OutputStream _debugStream = null;
try {
_reportFile = File.createTempFile("Report", ".tmp");
_reportStream = new FileOutputStream(_reportFile);
String string = "<!DOCTYPE book PUBLIC \"-//OASIS//DTD
DocBook XML V4.5//EN\"\n" +
"\"file:\\Documents and
Settings\\hans\\workspace1\\xalan-fop-stacktest\\formatting\\docbook-xml-4.5\\docbookx.dtd\">\n"
+
"<book>\n" +
"<title>Report</title>\n" +
"\n" +
"<chapter>\n" +
"<title>First Section</title>\n" +
"\n" +
"<para>Some para.</para>\n" +
"<para>Some list:<itemizedlist>\n" +
"<listitem><para>A
listitem</para></listitem>\n" +
"</itemizedlist>\n" +
"</para>\n" +
"<sect1><title>Sect
title</title><table>\n" +
"<title>Table title</title>\n" +
"<tgroup cols=\"1\"><colspec
colname=\"leftcol\"/><colspec colnum=\"1\" colname=\"rightcol\"/><spanspec
spanname=\"allcolumns\" namest=\"leftcol\" nameend=\"rightcol\"/>\n" +
"<thead>\n" +
"<row>\n" +
"<entry><![CDATA[name]]></entry>\n" +
"</row>\n" +
"</thead>\n" +
"<tbody>\n";
_reportStream.write(string.getBytes(CHARSETNAME));
for (int i = 1; i <= NUMROWS; i++) {
string = "<row>\n" +
"<entry><![CDATA[name"+i+"]]></entry>\n" +
"</row>\n" ;
_reportStream.write(string.getBytes(CHARSETNAME));
}
string = "</tbody>\n" +
"</tgroup>\n" +
"</table>\n" +
"</sect1>\n" +
"</chapter>\n" +
"</book>\n";
_reportStream.write(string.getBytes(CHARSETNAME));
_reportStream.close();
_transformedFile = File.createTempFile("Output", ".fo");
_transformedStream = new
FileOutputStream(_transformedFile);
} catch (FileNotFoundException e1) {
e1.printStackTrace();
} catch (IOException e1) {
e1.printStackTrace();
}
try {
xsltUri = new URL("file:\\Documents and
Settings\\hans\\workspace1\\xalan-fop-stacktest\\formatting\\docbook-xsl-1.74.0\\fo\\docbook.xsl");
} catch (MalformedURLException e1) {
e1.printStackTrace();
}
try {
XalanProcessor.transform(new StreamSource(_reportFile),
xsltUri, _transformedStream, _debugStream);
_transformedStream.close();
} catch (TransformerConfigurationException e) {
e.printStackTrace();
} catch (TransformerException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
System.out.println("Done");
}
}
--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]