danfickle / danfickle/openhtmltopdf
Issue Running on JBoss EAP 6.1
- Dominant language
- Java
- Stars
- 2.2k
- Forks
- 423
- PR merge metrics
- No merged PRs in 30d
Description
I have an issue running on JBoss EAP 6.1 which seems to be down to some kind of Xalan / XML parser conflict. I note that the line in question has a //FIXME comment so wonder if you can advise of any workaround. My code is running fine on Jetty.
EAP stacktrace:
```
JBWEB000236: Servlet.service() for servlet dispatcher threw exception: java.lang.ClassNotFoundException: com.sun.org.apache.xalan.internal.xsltc.trax.TransformerFactoryImpl from [Module "deployment.edental-web-pars.war:main" from Service Module Loader]
at org.jboss.modules.ModuleClassLoader.findClass(ModuleClassLoader.java:213) [jboss-modules.jar:1.3.7.Final-redhat-1]
at org.jboss.modules.ConcurrentClassLoader.performLoadClassUnchecked(ConcurrentClassLoader.java:459) [jboss-modules.jar:1.3.7.Final-redhat-1]
at org.jboss.modules.ConcurrentClassLoader.performLoadClassChecked(ConcurrentClassLoader.java:408) [jboss-modules.jar:1.3.7.Final-redhat-1]
at org.jboss.modules.ConcurrentClassLoader.performLoadClass(ConcurrentClassLoader.java:389) [jboss-modules.jar:1.3.7.Final-redhat-1]
at org.jboss.modules.ConcurrentClassLoader.loadClass(ConcurrentClassLoader.java:134) [jboss-modules.jar:1.3.7.Final-redhat-1]
at java.lang.Class.forName0(Native Method) [rt.jar:1.8.0_102]
at java.lang.Class.forName(Class.java:348) [rt.jar:1.8.0_102]
at javax.xml.transform.FactoryFinder.getProviderClass(FactoryFinder.java:116) [rt.jar:1.8.0_102]
at javax.xml.transform.FactoryFinder.newInstance(FactoryFinder.java:169) [rt.jar:1.8.0_102]
at javax.xml.transform.TransformerFactory.newInstance(TransformerFactory.java:152) [rt.jar:1.8.0_102]
at com.openhtmltopdf.resource.XMLResource$XMLResourceBuilder.createXMLResource(XMLResource.java:216) [openhtmltopdf-core-0.0.1-RC8.jar:]
```
which is triggered by the following code:
```
try {
// FIXME:
// Currently, we have to do this as the user may have an older vesion of xalan on their classpath which would be
// used otherwise.
xformFactory = TransformerFactory.newInstance("com.sun.org.apache.xalan.internal.xsltc.trax.TransformerFactoryImpl", null);
} catch(Exception e) {
XRLog.load(Level.SEVERE, "Could not load preferred XML transformer, using default which may not be secure.");
xformFactory = TransformerFactory.newInstance();
}
```
As TransformerFactory throws an Error rather than an Exception it looks your catch{} block does not execute.
```
public static TransformerFactory newInstance(String factoryClassName, ClassLoader classLoader)
throws TransformerFactoryConfigurationError{
//do not fallback if given classloader can't find the class, throw exception
return FactoryFinder.newInstance(TransformerFactory.class,
factoryClassName, classLoader, false, false);
}
```
I don't know much about these things but seems to be because JBoss includes specific version of Xalan and Xerces as modules. Drilling down into the modules directory I can find a file named javax.xml.transform.TransformerFactory with the following content:
org.apache.xalan.processor.TransformerFactoryImpl
I have tried excluding these modules via the jboss-deployment-descriptor and bundling a javax.xml.transform.TransformerFactory file with the application but with no success.
Contributor guide
No contributing guide indexed for this repository
Assessment
This issue has not been assessed yet.