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

Richard Eckart de Castilho edited comment on UIMA-6243 at 6/25/20, 9:25 PM:
----------------------------------------------------------------------------

My understanding is that the CAS shouldn't need to have to know JCas wrappers 
at all when it is initially created.

Consider this scenario:
* you have a typesystem.xml file which describes the type system
* you parse this file and initalize a CAS with it
* you call a third-party PEAR from vendor A - the developer of this PEAR has 
generated JCas wrappers for the types because she prefers using the JCas 
interface. The PEAR creates an annotation of type X using one of these JCas 
wrappers
* you call a second third-party PEAR from vendor B - the developer of this PEAR 
also liked JCas wrappes and uses them in her PEAR. Because the contract between 
the PEARs is defined, in the typesystem.xml file, she tries to access the CAS 
and to retrieve type X using her own JCas wrappers

This seems work in UIMAv2 and is a desired property providing for proper 
isolation and yet interoperability between the PEAR implementation. Substitute 
PEAR for any other mechanism using classloader isolation (e.g. OSGI or the 
simulated isolation in the unit test). However, it does not seem to work in 
UIMAv3.


was (Author: rec):
My understanding is that the CAS shouldn't need to have to know JCas wrappers 
at all.

Consider this scenario:
* you have a typesystem.xml file which describes the type system
* you parse this file and initalize a CAS with it
* you call a third-party PEAR from vendor A - the developer of this PEAR has 
generated JCas wrappers for the types because she prefers using the JCas 
interface. The PEAR creates an annotation of type X using one of these JCas 
wrappers
* you call a second third-party PEAR from vendor B - the developer of this PEAR 
also liked JCas wrappes and uses them in her PEAR. Because the contract between 
the PEARs is defined, in the typesystem.xml file, she tries to access the CAS 
and to retrieve type X using her own JCas wrappers

This seems work in UIMAv2 and is a desired property providing for proper 
isolation and yet interoperability between the PEAR implementation. Substitute 
PEAR for any other mechanism using classloader isolation (e.g. OSGI or the 
simulated isolation in the unit test). However, it does not seem to work in 
UIMAv3.

> JCas returns Annotation when asked for a specific subtype
> ---------------------------------------------------------
>
>                 Key: UIMA-6243
>                 URL: https://issues.apache.org/jira/browse/UIMA-6243
>             Project: UIMA
>          Issue Type: Bug
>          Components: UIMA
>    Affects Versions: 2.10.4SDK
>            Reporter: Richard Eckart de Castilho
>            Priority: Major
>
> In a specific classloader topology, a fully initialized JCas with theoretic 
> access to the JCas wrappers of a given type will not return that type but 
> instead returns an instance of {{Annotation}}. This leads to an exception 
> like this:
> {code}
> org.apache.uima.analysis_engine.AnalysisEngineProcessException: Annotator 
> processing failed.    
>       at 
> org.apache.uima.analysis_engine.impl.PrimitiveAnalysisEngine_impl.callAnalysisComponentProcess(PrimitiveAnalysisEngine_impl.java:427)
>       at 
> org.apache.uima.analysis_engine.impl.PrimitiveAnalysisEngine_impl.innerCall(PrimitiveAnalysisEngine_impl.java:329)
>       at 
> org.apache.uima.analysis_engine.impl.PrimitiveAnalysisEngine_impl.processAndOutputNewCASes(PrimitiveAnalysisEngine_impl.java:321)
>       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.cas.test.JCasClassLoaderTest.thatTypeSystemCanComeFromItsOwnClassLoader(JCasClassLoaderTest.java:126)
>       ... snip ...
> Caused by: java.lang.ClassCastException: org.apache.uima.jcas.tcas.Annotation 
> cannot be cast to org.apache.uima.cas.test.Token
>       at java.util.Iterator.forEachRemaining(Iterator.java:116)
>       at 
> org.apache.uima.cas.test.JCasClassLoaderTest$FetchTheTokenAnnotator.process(JCasClassLoaderTest.java:166)
>       at 
> org.apache.uima.analysis_component.JCasAnnotator_ImplBase.process(JCasAnnotator_ImplBase.java:48)
>       at 
> org.apache.uima.analysis_engine.impl.PrimitiveAnalysisEngine_impl.callAnalysisComponentProcess(PrimitiveAnalysisEngine_impl.java:411)
>       ... 28 more
> {code}
> Looks like this is a UIMAv2 issue only. When running the test against the 
> UIMAv3 master (commit 0211057ad), I do not get any ClassCastException.



--
This message was sent by Atlassian Jira
(v8.3.4#803005)

Reply via email to