При использовании JBOSS EAP 7 и Apache FOP я случайно (?) Получаю исключение при создании нового объекта Fop. При перезапуске код может работать. Я подозреваю, что проблема с загрузкой классов.
В автономной ситуации (Eclipse) все работает отлично. Некоторые люди предполагают, что реализация FOP уже загружена в другом контексте безопасности. Бьет меня, что это значит.
Вот исключение:
Причина: java.lang.ClassCastException: org.apache.fop.render.afp.extensions.AFPExtensionHandlerFactory не может быть приведен к org.apache.fop.util.ContentHandlerFactory
Пример кода:
import java.io.File;
import javax.annotation.PostConstruct;
import javax.ejb.ConcurrencyManagement;
import javax.ejb.ConcurrencyManagementType;
import javax.ejb.Singleton;
import javax.ejb.Startup;
import org.apache.commons.io.output.NullOutputStream;
import org.apache.fop.apps.FOUserAgent;
import org.apache.fop.apps.Fop;
import org.apache.fop.apps.FopFactory;
import org.apache.fop.apps.MimeConstants;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
/**
* Force classloader to use FOP apache implementations first (experimental)
*/
@Singleton
@Startup
@ConcurrencyManagement(ConcurrencyManagementType.BEAN)
public class InitBean {
private static final Logger logger = LogManager.getLogger(InitBean.class.getName());
public InitBean() {
super();
}
@PostConstruct
public void initClassloader() {
try {
FopFactory fopFactory = FopFactory.newInstance(new File(".").toURI());
FOUserAgent foUserAgent = fopFactory.newFOUserAgent();
Fop fop = fopFactory.newFop(MimeConstants.MIME_PDF, foUserAgent, new NullOutputStream());
logger.debug("Created FOP handler {}", fop.getDefaultHandler().getClass().getName());
}
catch (Exception e) {
logger.error(e.getMessage());
}
}
}
Библиотеки: Apache fop 2.2; Xalan-2.7.2; docx4j-экспорт-фо-6.0.1; xmlgraphics-Обще-2,2; xercesImpl-2.11.0; docx4j-6.0.1; сериализатору-2.7.2
Как я могу исправить эту проблему?