I've updated the question below
Hello,
I need to do a XSL transformation using Apache FOP and I have a code like this one:
//Setup FOP
Fop fop = fopFactory.newFop(MimeConstants.MIME_PDF, out);
//Setup Transformer
Source xsltSrc = new StreamSource(new File(xslPath));
Transformer transformer = tFactory.newTransformer(xsltSrc);
//Make sure the XSL transformation's result is piped through to FOP
Result res = new SAXResult(fop.getDefaultHandler());
//Setup input
Source src = new StreamSource(new File(xmlPath));
//Start the transformation and rendering process
transformer.transform(src, res);
where xslPath is the path where my xslt file is stored.
I have checked that it works when I have only one xslt file, but in my project I have divided it into several xslt files joining them with the <xsl:import />
tag. With this configuration I get a NullPointerException because it doesn't understand all the information stored in the xslt file because it's distributed over different files.
I wonder if there's any way to load all these files in the Source xsltSrc variable so all the XSL information is available .
Thank you very much.
UPDATE
I've changed the code with the idea given by Mads Hansen, but it still doesn't work. I have to include the xslt files in the classpath so I load the xslt file with ClassLoader and I've checked that the url has the correct path when executing url.toExternalForm(). This is my new piece of code:
ClassLoader cl = this.getClass().getClassLoader();
String systemID = "resources/xslt/myfile.xslt";
InputStream in = cl.getResourceAsStream(systemID);
URL url = cl.getResource(systemID);
Source source = new StreamSource(in);
source.setSystemId(url.toExternalForm());
transformer = tFactory.newTransformer(source);
It finds and loads myfile.xslt but it still doesn't resolve the relative paths to the other xslt files.
What am I doing wrong?
Thanks.