Resolving relative paths when loading XSLT files

I just got it, a late answer(tested on FOP 1.0) ——

All you need is to set an uri resolver for your factory, as following works for me:

TransformerFactory transFact = TransformerFactory.newInstance();
StreamSource xsltSource = new StreamSource(xsl);

// XXX for 'xsl:import' to load other xsls from class path
transFact.setURIResolver(new ClasspathResourceURIResolver());
Templates cachedXSLT = transFact.newTemplates(xsltSource);
Transformer transformer = cachedXSLT.newTransformer();


class ClasspathResourceURIResolver implements URIResolver {
  @Override
  public Source resolve(String href, String base) throws TransformerException {
    return new StreamSource(XXX.getClassLoader().getResourceAsStream(href));
  }
}

and my importing xsl(so the ‘imported.xsl’ should be in the classpath):

<xsl:import href="https://stackoverflow.com/questions/3699860/META-INF/companybusinesscredit/imported.xsl"/>

Leave a Comment