Мне было поручено перенести старое приложение Java, которое использует Apache FOP 1.1. Я бы хотел использовать последнюю версию FOP, 2.1, но у меня проблемы с кодом, который устанавливает FOP.Apache FOP 1.1> 2.1 Миграция
Вот исходный код, который мы имеем, используя 1.1 API:
FopFactory fopFactory = FopFactory.newInstance();
ByteArrayOutputStream out = new ByteArrayOutputStream();
ConfigurationDataUtility configurationData = new ConfigurationDataUtility();
try
{
Fop fop = fopFactory.newFop(MimeConstants.MIME_PDF, out);
Вот новый код, используя 2.1 API:
InputStream is = getClass().getClassLoader().getResourceAsStream("fop.xconf");
FopConfParser parser = new FopConfParser(is, new java.net.URI(".")); //parsing configuration
FopFactoryBuilder builder = parser.getFopFactoryBuilder(); //building the factory with the user options
FopFactory fopFactory = builder.build();
ByteArrayOutputStream out = new ByteArrayOutputStream();
ConfigurationDataUtility configurationData = new ConfigurationDataUtility();
try
{
Fop fop = fopFactory.newFop(MimeConstants.MIME_PDF, out);
К сожалению, ФОП имеет очень мало документации по его веб-сайт и то, что есть в основном для версии 1.1. Вышеприведенный код был снят с их страницы в разделе, где говорится о переносе с 1.1 на 2.1, поэтому я считаю, что это правильно.
https://xmlgraphics.apache.org/fop/2.1/upgrading.html
Проблема заключается в том, что, когда этот новый код выполняется следующее исключение на линии, которая строит новый FopConfParser:
Caused by: java.lang.Error: Unable to setup SAX parserjava.lang.ClassCastException: __redirected.__SAXParserFactory cannot be cast to javax.xml.parsers.SAXParserFactory
at org.apache.avalon.framework.configuration.DefaultConfigurationBuilder.<init>(DefaultConfigurationBuilder.java:112)
at org.apache.avalon.framework.configuration.DefaultConfigurationBuilder.<init>(DefaultConfigurationBuilder.java:83)
at org.apache.fop.apps.FopConfParser.<init>(FopConfParser.java:146)
at org.apache.fop.apps.FopConfParser.<init>(FopConfParser.java:88)
at org.apache.fop.apps.FopConfParser.<init>(FopConfParser.java:103)
at xmltools.PDFGenerator.generatePDF(PDFGenerator.java:73)
at defect.DefectServlet.generateDefectPrintablePdf(DefectServlet.java:703)
... 35 more
Мы бежим Wildfly 9, как наш сервер. Таким образом, я добавил следующее в файл module.xml ФОП, потому что я получаю ClassNotFound исключения без них:
<dependencies>
<module name="org.apache.avalon" />
<module name="org.xml.sax" />
<module name="org.apache.xmlgraphics" />
</dependencies>
Я добавил следующее моего запуска виртуальной машины Java, надеясь, что это будет пролить больше света на ситуацию, но это не так:
-Djaxp.debug=1
Я смотрел на это для лучшей части 3 дня теперь не достигнутого прогресса. Любые предложения будут высоко ценится.
Спасибо.