Niels Beekman created TIKA-1111:
-----------------------------------
Summary: Class loading issues when running in OSGi environment
Key: TIKA-1111
URL: https://issues.apache.org/jira/browse/TIKA-1111
Project: Tika
Issue Type: Bug
Affects Versions: 1.3
Environment: Tika 1.3 (tika-core and tika-bundle OSGi bundles)
Felix 2.0.5
Reporter: Niels Beekman
When dom4j is on the system classpath, a class loading error occurs during
detection of Office Open XML files:
java.lang.ExceptionInInitializerError
at
org.apache.poi.openxml4j.opc.internal.unmarshallers.PackagePropertiesUnmarshaller.<clinit>(PackagePropertiesUnmarshaller.java:49)
at org.apache.poi.openxml4j.opc.OPCPackage.init(OPCPackage.java:154)
at org.apache.poi.openxml4j.opc.OPCPackage.<init>(OPCPackage.java:141)
at org.apache.poi.openxml4j.opc.Package.<init>(Package.java:54)
at org.apache.poi.openxml4j.opc.ZipPackage.<init>(ZipPackage.java:99)
at org.apache.poi.openxml4j.opc.OPCPackage.open(OPCPackage.java:207)
at
org.apache.tika.parser.pkg.ZipContainerDetector.detectOfficeOpenXML(ZipContainerDetector.java:194)
at
org.apache.tika.parser.pkg.ZipContainerDetector.detectZipFormat(ZipContainerDetector.java:134)
at
org.apache.tika.parser.pkg.ZipContainerDetector.detect(ZipContainerDetector.java:77)
at
org.apache.tika.detect.CompositeDetector.detect(CompositeDetector.java:61)
at
org.apache.tika.detect.CompositeDetector.detect(CompositeDetector.java:61)
at
org.apache.tika.parser.AutoDetectParser.parse(AutoDetectParser.java:113)
at
org.apache.tika.parser.ParsingReader$ParsingTask.run(ParsingReader.java:221)
at java.lang.Thread.run(Thread.java:662)
Caused by: java.lang.ClassCastException: org.dom4j.DocumentFactory cannot be
cast to org.dom4j.DocumentFactory
at org.dom4j.DocumentFactory.getInstance(DocumentFactory.java:97)
at org.dom4j.tree.AbstractNode.<clinit>(AbstractNode.java:39)
... 14 more
As a workaround (maybe a solution), I modified the context classloader when
running the detection (wrapped the detector and parser). This appears to be the
common fix for dom4j, as it uses the context classloader during initialization.
Ideally, the detectors and parsers would be running with their original loader
(from ServiceLoader) as context class loader.
--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see: http://www.atlassian.com/software/jira