You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@xalan.apache.org by "Hans van Rijswijk (JIRA)" <xa...@xml.apache.org> on 2008/11/13 16:28:44 UTC
[jira] Created: (XALANJ-2466) XSLT transform throws
java.lang.StackOverflowError on docbook document containing large table
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: xalan-dev-unsubscribe@xml.apache.org
For additional commands, e-mail: xalan-dev-help@xml.apache.org