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 

Reply via email to