uima-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Richard Eckart de Castilho (JIRA)" <...@uima.apache.org>
Subject [jira] [Commented] (UIMA-5597) uv3: FsGenerators may end up all being null
Date Sun, 01 Oct 2017 21:28:00 GMT

    [ https://issues.apache.org/jira/browse/UIMA-5597?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16187542#comment-16187542
] 

Richard Eckart de Castilho commented on UIMA-5597:
--------------------------------------------------

Actually, we already have a unit test that triggers this NPE in uimaFIT (CasMultiplierTest.testIteratePipelineOnText)
- but it is commented out due to UIMA-3470.

Anyway, you should be able to use that to reproduce the NPE, just remove the `@Ignore`.

{noformat}
java.lang.IllegalStateException: org.apache.uima.analysis_engine.AnalysisEngineProcessException
	at org.apache.uima.fit.pipeline.JCasIterator.next(JCasIterator.java:163)
	at org.apache.uima.fit.pipeline.JCasIterator.next(JCasIterator.java:1)
	at org.apache.uima.fit.component.CasMultiplierTest.testIteratePipelineOnText(CasMultiplierTest.java:64)
        ...
Caused by: org.apache.uima.analysis_engine.AnalysisEngineProcessException
	at org.apache.uima.analysis_engine.impl.PrimitiveAnalysisEngine_impl.callAnalysisComponentNext(PrimitiveAnalysisEngine_impl.java:536)
	at org.apache.uima.analysis_engine.impl.PrimitiveAnalysisEngine_impl$AnalysisComponentCasIterator.next(PrimitiveAnalysisEngine_impl.java:630)
	at org.apache.uima.analysis_engine.asb.impl.ASB_impl$AggregateCasIterator.processUntilNextOutputCas(ASB_impl.java:572)
	at org.apache.uima.analysis_engine.asb.impl.ASB_impl$AggregateCasIterator.<init>(ASB_impl.java:412)
	at org.apache.uima.analysis_engine.asb.impl.ASB_impl.process(ASB_impl.java:344)
	at org.apache.uima.analysis_engine.impl.AggregateAnalysisEngine_impl.processAndOutputNewCASes(AggregateAnalysisEngine_impl.java:271)
	at org.apache.uima.analysis_engine.impl.AnalysisEngineImplBase.process(AnalysisEngineImplBase.java:269)
	at org.apache.uima.analysis_engine.impl.AnalysisEngineImplBase.process(AnalysisEngineImplBase.java:284)
	at org.apache.uima.fit.pipeline.JCasIterator.next(JCasIterator.java:142)
	... 25 more
Caused by: java.lang.NullPointerException
	at org.apache.uima.cas.impl.CASImpl.createFsFromGenerator(CASImpl.java:1168)
	at org.apache.uima.cas.impl.CASImpl.createFSAnnotCheck(CASImpl.java:1124)
	at org.apache.uima.cas.impl.CASImpl.createFS(CASImpl.java:1105)
	at org.apache.uima.cas.impl.CASImpl.createAnnotation(CASImpl.java:3919)
	at org.apache.uima.cas.impl.CASImpl.createDocumentAnnotationNoRemoveNoIndex(CASImpl.java:4001)
	at org.apache.uima.cas.impl.CASImpl.createDocumentAnnotationNoRemove(CASImpl.java:3994)
	at org.apache.uima.cas.impl.CASImpl.createDocumentAnnotation(CASImpl.java:3990)
	at org.apache.uima.cas.impl.CASImpl.updateDocumentAnnotation(CASImpl.java:4046)
	at org.apache.uima.jcas.cas.Sofa.setLocalSofaData(Sofa.java:187)
	at org.apache.uima.jcas.cas.Sofa.setLocalSofaData(Sofa.java:200)
	at org.apache.uima.cas.impl.CASImpl.lambda$7(CASImpl.java:4225)
	at org.apache.uima.cas.impl.CASImpl.setSofaThingsMime(CASImpl.java:4215)
	at org.apache.uima.cas.impl.CASImpl.setSofaDataString(CASImpl.java:4225)
	at org.apache.uima.cas.impl.CASImpl.setDocumentText(CASImpl.java:4220)
	at org.apache.uima.fit.component.CasMultiplierTest$TextIncrementor.next(CasMultiplierTest.java:132)
	at org.apache.uima.analysis_engine.impl.PrimitiveAnalysisEngine_impl.callAnalysisComponentNext(PrimitiveAnalysisEngine_impl.java:509)
	... 33 more
{noformat}

> uv3: FsGenerators may end up all being null
> -------------------------------------------
>
>                 Key: UIMA-5597
>                 URL: https://issues.apache.org/jira/browse/UIMA-5597
>             Project: UIMA
>          Issue Type: Bug
>          Components: Core Java Framework
>    Affects Versions: 3.0.0SDK-beta
>            Reporter: Richard Eckart de Castilho
>
> There appears to be a problem with the initialization of the FS generators when many
classloaders are involved. uimaFIT configures all component with dedicated resource managers
and these are all configured with a parent classloader, causing many UimaClassLoaders to be
around in uimaFIT-based setups.
> {noformat}
> java.lang.IllegalStateException: org.apache.uima.analysis_engine.AnalysisEngineProcessException:
Annotator processing failed.    
> 	at org.apache.uima.fit.pipeline.JCasIterator.next(JCasIterator.java:163)
> 	at org.apache.uima.fit.pipeline.JCasIterator.next(JCasIterator.java:1)
> 	at de.tudarmstadt.ukp.dkpro.core.testing.AssertAnnotations.assertTransformedText(AssertAnnotations.java:897)
> 	at de.tudarmstadt.ukp.dkpro.core.textnormalizer.transformation.RegexBasedTokenTransformerTest.test(RegexBasedTokenTransformerTest.java:45)
>         ...
> Caused by: org.apache.uima.analysis_engine.AnalysisEngineProcessException: Annotator
processing failed.    
> 	at org.apache.uima.analysis_engine.impl.PrimitiveAnalysisEngine_impl.callAnalysisComponentProcess(PrimitiveAnalysisEngine_impl.java:395)
> 	at org.apache.uima.analysis_engine.impl.PrimitiveAnalysisEngine_impl.processAndOutputNewCASes(PrimitiveAnalysisEngine_impl.java:297)
> 	at org.apache.uima.analysis_engine.asb.impl.ASB_impl$AggregateCasIterator.processUntilNextOutputCas(ASB_impl.java:570)
> 	at org.apache.uima.analysis_engine.asb.impl.ASB_impl$AggregateCasIterator.<init>(ASB_impl.java:412)
> 	at org.apache.uima.analysis_engine.asb.impl.ASB_impl.process(ASB_impl.java:344)
> 	at org.apache.uima.analysis_engine.impl.AggregateAnalysisEngine_impl.processAndOutputNewCASes(AggregateAnalysisEngine_impl.java:271)
> 	at org.apache.uima.analysis_engine.impl.AnalysisEngineImplBase.process(AnalysisEngineImplBase.java:269)
> 	at org.apache.uima.analysis_engine.impl.AnalysisEngineImplBase.process(AnalysisEngineImplBase.java:284)
> 	at org.apache.uima.fit.pipeline.JCasIterator.next(JCasIterator.java:142)
> 	... 26 more
> Caused by: java.lang.NullPointerException
> 	at org.apache.uima.cas.impl.CASImpl.createFsFromGenerator(CASImpl.java:1168)
> 	at org.apache.uima.cas.impl.CASImpl.createFSAnnotCheck(CASImpl.java:1124)
> 	at org.apache.uima.cas.impl.CASImpl.createFS(CASImpl.java:1105)
> 	at org.apache.uima.cas.impl.CASImpl.createAnnotation(CASImpl.java:3919)
> 	at org.apache.uima.cas.impl.CASImpl.createDocumentAnnotationNoRemoveNoIndex(CASImpl.java:4001)
> 	at org.apache.uima.cas.impl.CASImpl.createDocumentAnnotationNoRemove(CASImpl.java:3994)
> 	at org.apache.uima.cas.impl.CASImpl.getDocumentAnnotation(CASImpl.java:4061)
> 	at org.apache.uima.cas.impl.CASImpl.setDocumentLanguage(CASImpl.java:4202)
> 	at org.apache.uima.jcas.impl.JCasImpl.setDocumentLanguage(JCasImpl.java:825)
> 	at de.tudarmstadt.ukp.dkpro.core.api.transform.JCasTransformer_ImplBase.beforeProcess(JCasTransformer_ImplBase.java:81)
> 	at de.tudarmstadt.ukp.dkpro.core.api.transform.JCasTransformerChangeBased_ImplBase.beforeProcess(JCasTransformerChangeBased_ImplBase.java:57)
> 	at de.tudarmstadt.ukp.dkpro.core.api.transform.JCasTransformer_ImplBase.process(JCasTransformer_ImplBase.java:127)
> 	at org.apache.uima.analysis_component.JCasMultiplier_ImplBase.process(JCasMultiplier_ImplBase.java:58)
> 	at org.apache.uima.analysis_engine.impl.PrimitiveAnalysisEngine_impl.callAnalysisComponentProcess(PrimitiveAnalysisEngine_impl.java:379)
> 	... 34 more
> {noformat}
> Usually, this seems to work well in UIMA v2 and UIMA v3. However, presently CAS multipliers
seem to be a problem in UIMA v3.
> I tried to debug this to some degree based on a unit test in DKPro Core and ended up
in the following code in `FSClassRegistry.getGeneratorsForClassLoader(...)`:
> {noformat}
>        // skip entering a generator in the result if
>         //    in a pear setup, and this cl is not the cl that loaded the JCas class.
>         //    See method comment for why.
>         if (!isPear || jcci.isPearOverride(cl)) {
>           r[ti.getCode()] = (FsGenerator3) jcci.generator;
>         }   
> {noformat}
> In this particular unit test, the code is called 3 times. 
> The first two times when the CAS that is to be passed to the pipeline components is created
by the uimaFIT JCasIterator. These first two times appear ok - the feature generators array
is filled.
> {noformat}
> 1) cl := sun.misc.Launcher$AppClassLoader
>    isPear := false
>    jcci.isPearOverride(cl) := true
> 	FSClassRegistry.getGeneratorsForClassLoader(ClassLoader, boolean, TypeSystemImpl) line:
879	
> 	TypeSystemImpl.getGeneratorsForClassLoader(ClassLoader, boolean) line: 2630	
> 	TypeSystemImpl.commit(ClassLoader) line: 1378	
> 	TypeSystemImpl.commit() line: 1313	
> 	TypeSystemImpl.<clinit>() line: 2484	
> 	CASFactory.createTypeSystem() line: 126	
> 	CASImpl.<init>(TypeSystemImpl, int) line: 885	
> 	CASImpl.<init>() line: 908	
> 	CASFactory.createCAS() line: 48	
> 	CasCreationUtils.doCreateCas(TypeSystem, TypeSystemDescription, TypePriorities, FsIndexDescription[],
Properties, ResourceManager) line: 604	
> 	CasCreationUtils.createCas(Collection<MetaDataObject>, Properties, ResourceManager)
line: 292	
> 	JCasIterator.<init>(CollectionReader, AnalysisEngine...) line: 90	
> 	JCasIterable.iterator() line: 79	
> 	JCasIterable.iterator() line: 1	
> 	AssertAnnotations.assertTransformedText(String, String, String, AnalysisEngineDescription...)
line: 897	
> 	RegexBasedTokenTransformerTest.test() line: 45	
> {noformat}
> {noformat}
> 2) cl := org.apache.uima.internal.util.UIMAClassLoader@50378a4 
>    isPear := false
>    jcci.isPearOverride(cl) := false
> 	FSClassRegistry.getGeneratorsForClassLoader(ClassLoader, boolean, TypeSystemImpl) line:
879	
> 	TypeSystemImpl.getGeneratorsForClassLoader(ClassLoader, boolean) line: 2630	
> 	TypeSystemImpl.commit(ClassLoader) line: 1378	
> 	CASImpl.commitTypeSystem() line: 1529	
> 	CasCreationUtils.doCreateCas(TypeSystem, TypeSystemDescription, TypePriorities, FsIndexDescription[],
Properties, ResourceManager) line: 613	
> 	CasCreationUtils.createCas(Collection<MetaDataObject>, Properties, ResourceManager)
line: 292	
> 	JCasIterator.<init>(CollectionReader, AnalysisEngine...) line: 90	
> 	JCasIterable.iterator() line: 79	
> 	JCasIterable.iterator() line: 1	
> 	AssertAnnotations.assertTransformedText(String, String, String, AnalysisEngineDescription...)
line: 897	
> 	RegexBasedTokenTransformerTest.test() line: 45		
> {noformat}
> The third time in the FlowController. This time `isPear` is `true` causing the FS generators
array to be all null. Mind, I'm not using PEARs, I only set the parent classloader for the
resource managers, no custom classpath URLs.
> {noformat}
> 3) cl = org.apache.uima.internal.util.UIMAClassLoader@4b2bac3f
>    isPear := true
>    jcci.isPearOverride(cl) := false
> 	FSClassRegistry.getGeneratorsForClassLoader(ClassLoader, boolean, TypeSystemImpl) line:
891	
> 	TypeSystemImpl.getGeneratorsForClassLoader(ClassLoader, boolean) line: 2630	
> 	CASImpl$SharedViewData.switchClassLoader(ClassLoader) line: 724	
> 	CASImpl.switchClassLoaderLockCasCL(ClassLoader) line: 3568	
> 	FlowControllerContainer.computeFlow(CAS) line: 226	
> 	ASB_impl$AggregateCasIterator.<init>(ASB_impl, CAS) line: 406	
> 	ASB_impl.process(CAS) line: 344	
> 	AggregateAnalysisEngine_impl.processAndOutputNewCASes(CAS) line: 271	
> 	AggregateAnalysisEngine_impl(AnalysisEngineImplBase).process(CAS) line: 269	
> 	AggregateAnalysisEngine_impl(AnalysisEngineImplBase).process(JCas) line: 284	
> 	JCasIterator.next() line: 142	
> 	JCasIterator.next() line: 1	
> 	AssertAnnotations.assertTransformedText(String, String, String, AnalysisEngineDescription...)
line: 897	
> 	RegexBasedTokenTransformerTest.test() line: 45	
>  {noformat}



--
This message was sent by Atlassian JIRA
(v6.4.14#64029)

Mime
View raw message