Hi UIMA users--
When I use PEAR files, the XML parser can't find it's DocumentBuilderFactory. I
think it's a ClassLoader issue. Has anyone else seen this?
I install the PEAR as described in the docs:
PackageBrowser pkg = PackageInstaller.installPackage(myDir, pearFile,
false);
String pearDescPath = pkg.getComponentPearDescPath();
ResourceSpecifier specifier =
UIMAFramework.getXMLParser().parseResourceSpecifier(
new XMLInputSource(pearDescPath));
ResourceManager resmgr = getResourceManager();
AnalysisEngine engine = UIMAFramework.produceAnalysisEngine(specifier,
resmgr, params);
My PEAR includes TikaAnnotator, and I get the exception shown at the end of
this email. Summary: TikaConfig asks for an XML parser, but the system can't
find one.
Outside the analysis engine, it's possible to find an implementation of
DocumentBuilderFactory, but inside it seems that the ClassLoader in use doesn't
have one.
javax.xml.parsers.DocumentBuilderFactory.newInstance() has a complicated way of
finding the implementation (quoting the JavaDoc):
=======================
Obtain a new instance of a DocumentBuilderFactory. This static method
creates a new factory instance. This method
uses the following ordered lookup procedure to determine the
DocumentBuilderFactory implementation class to load:
* Use the javax.xml.parsers.DocumentBuilderFactory system property.
* Use the properties file "lib/jaxp.properties" in the JRE directory. This
configuration file is in standard java.util.Properties format and contains the
fully qualified name of the implementation class with the key being the system
property defined above. The jaxp.properties file is read only once by the JAXP
implementation and it's values are then cached for future use. If the file does
not exist when the first attempt is made to read from it, no further attempts
are made to check for its existence. It is not possible to change the value of
any property in jaxp.properties after it has been read for the first time.
* Use the Services API (as detailed in the JAR specification), if
available, to determine the classname. The Services API will look for a
classname in the file
META-INF/services/javax.xml.parsers.DocumentBuilderFactory in jars available to
the runtime.
* Platform default DocumentBuilderFactory instance.
=========================
So it seems like the ClassLoader used in the analysis engine prevents
DocumentBuilderFactory from finding even the platform default implementation.
Does anyone know how to work around this? Add something to my
metadata/install.xml file perhaps?
Thanks,
Greg Holmberg
org.apache.uima.resource.ResourceInitializationException: Error initializing
"org.apache.uima.analysis_engine.impl.PearAnalysisEngineWrapper" from
descriptor
file:/tmp/taservice/pear/SAPAnalysisEngine/SAPAnalysisEngine_pear.xml.
at
org.apache.uima.util.SimpleResourceFactory.produceResource(SimpleResourceFactory.java:144)
at
org.apache.uima.impl.CompositeResourceFactory_impl.produceResource(CompositeResourceFactory_impl.java:62)
at org.apache.uima.UIMAFramework.produceResource(UIMAFramework.java:269)
at org.apache.uima.UIMAFramework.produceResource(UIMAFramework.java:314)
at org.apache.uima.UIMAFramework.produceAnalysisEngine(UIMAFramework.java:425)
at
com.sap.taservice.controller.UimaPipeline.createAnalysisEngine(UimaPipeline.java:343)
at com.sap.taservice.controller.UimaPipeline.execute(UimaPipeline.java:151)
at com.sap.taservice.controller.TAServiceWork.execute(TAServiceWork.java:44)
at com.sap.job.impl.TaskImpl.execute(TaskImpl.java:104)
at
com.sap.taservice.job.impl.remote.RemoteWorker.iteration(RemoteWorker.java:52)
at com.sap.util.DaemonRunnable.run(DaemonRunnable.java:117)
at java.lang.Thread.run(Thread.java:662)
Caused by: javax.xml.parsers.FactoryConfigurationError: Provider for
javax.xml.parsers.DocumentBuilderFactory cannot be found
at javax.xml.parsers.DocumentBuilderFactory.newInstance(Unknown Source)
at org.apache.tika.config.TikaConfig.getBuilder(TikaConfig.java:228)
at org.apache.tika.config.TikaConfig.<init>(TikaConfig.java:66)
at org.apache.uima.tika.MarkupAnnotator.initialize(MarkupAnnotator.java:96)
at
org.apache.uima.analysis_engine.impl.PrimitiveAnalysisEngine_impl.initializeAnalysisComponent(PrimitiveAnalysisEngine_impl.java:252)
at
org.apache.uima.analysis_engine.impl.PrimitiveAnalysisEngine_impl.initialize(PrimitiveAnalysisEngine_impl.java:158)
at
org.apache.uima.impl.AnalysisEngineFactory_impl.produceResource(AnalysisEngineFactory_impl.java:94)
at
org.apache.uima.impl.CompositeResourceFactory_impl.produceResource(CompositeResourceFactory_impl.java:62)
at org.apache.uima.UIMAFramework.produceResource(UIMAFramework.java:269)
at org.apache.uima.UIMAFramework.produceAnalysisEngine(UIMAFramework.java:387)
at org.apache.uima.analysis_engine.asb.impl.ASB_impl.setup(ASB_impl.java:255)
at
org.apache.uima.analysis_engine.impl.AggregateAnalysisEngine_impl.initASB(AggregateAnalysisEngine_impl.java:429)
at
org.apache.uima.analysis_engine.impl.AggregateAnalysisEngine_impl.initializeAggregateAnalysisEngine(AggregateAnalysisEngine_impl.java:373)
at
org.apache.uima.analysis_engine.impl.AggregateAnalysisEngine_impl.initialize(AggregateAnalysisEngine_impl.java:186)
at
org.apache.uima.impl.AnalysisEngineFactory_impl.produceResource(AnalysisEngineFactory_impl.java:94)
at
org.apache.uima.impl.CompositeResourceFactory_impl.produceResource(CompositeResourceFactory_impl.java:62)
at org.apache.uima.UIMAFramework.produceResource(UIMAFramework.java:269)
at org.apache.uima.internal.util.ResourcePool.fillPool(ResourcePool.java:243)
at org.apache.uima.internal.util.ResourcePool.<init>(ResourcePool.java:100)
at
org.apache.uima.internal.util.AnalysisEnginePool.<init>(AnalysisEnginePool.java:91)
at
org.apache.uima.analysis_engine.impl.MultiprocessingAnalysisEngine_impl.initialize(MultiprocessingAnalysisEngine_impl.java:118)
at
org.apache.uima.impl.AnalysisEngineFactory_impl.produceResource(AnalysisEngineFactory_impl.java:94)
at
org.apache.uima.impl.CompositeResourceFactory_impl.produceResource(CompositeResourceFactory_impl.java:62)
at org.apache.uima.UIMAFramework.produceResource(UIMAFramework.java:269)
at org.apache.uima.UIMAFramework.produceResource(UIMAFramework.java:314)
at org.apache.uima.UIMAFramework.produceAnalysisEngine(UIMAFramework.java:425)
at
org.apache.uima.analysis_engine.impl.PearAnalysisEngineWrapper.initialize(PearAnalysisEngineWrapper.java:269)
at
org.apache.uima.util.SimpleResourceFactory.produceResource(SimpleResourceFactory.java:123)
... 11 more