Apache FOP from Java with XSLT 2.0…?

2019-06-23 16:26发布

I'm having problems using some of the features of XSLT 2.0 in an embedded use of Apache FOP 1.0. In particular I get an exception when using "current-group()".

I see that FOP is using xalan 2.6 which is throwing the exception.

I tried to exclude the transitive dependency of xalan 2.6 and replaced it with 2.7.1 but it didn't help. Is it possible to use Apache FOP with another XSLT processor that supports more 2.0 features?

2条回答
仙女界的扛把子
2楼-- · 2019-06-23 17:09

If you run FOP as standalone distribution from command line, you can

  1. copy the required jar file(s) with the XSLT processor (like e.g. saxon9he.jar) to the lib directory of your FOP distribution.

  2. and specify the processor implementation to be used by FOP by adding a VM parameter like this -Djavax.xml.transform.TransformerFactory=net.sf.saxon.TransformerFactoryImpl (example for Saxon) to the start script (fop on Linux, fop.bat on Windows) at the line where org.apache.fop.cli.Main is called.

If you embed FOP in your Java code, simply start your application with that VM parameter (and make sure the required jar files are in your CLASSPATH).

查看更多
闹够了就滚
3楼-- · 2019-06-23 17:15

If you need 2.0 features in XSLT, XPath... try another XSLT processor/engine different from provided by JDK or Xalan, like Saxon. Has a free version and a commercial one if you want to be schema-aware. We use with Apache-FOP in order to generate PDFs from XML data and works fine and you get some new feature in 2.0 like date and number formatting. Just use saxon9.jar and specify the XSLT engine used (saxon).

查看更多
登录 后发表回答