[ 
https://issues.apache.org/jira/browse/UIMA-5607?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Marshall Schor resolved UIMA-5607.
----------------------------------
       Resolution: Fixed
         Assignee: Marshall Schor
    Fix Version/s: 3.0.0SDK-beta

This turned out to hinge on a complex class initialization sequence.  The 
initialization code around type system commit depended on having the static 
initializers at some point run in a context where they were called from type 
system commit.  When the class was loaded by being referenced (as in the test 
case) before the TypeSystemImpl class was loaded, this caused the type system 
impl loading to load the builtin classes, and properly set the offset value, 
but then the initial static initializers continued running in a context outside 
of a type system commit, and this initializer set the value back to -1.

The fix was to abandon this approach (of initializing when running the static 
initializers from class loading), and instead use reflection. 

The test provided by Richard now runs. 

> Exception when using JCas after accessing type property of a JCas class
> -----------------------------------------------------------------------
>
>                 Key: UIMA-5607
>                 URL: https://issues.apache.org/jira/browse/UIMA-5607
>             Project: UIMA
>          Issue Type: Bug
>          Components: Core Java Framework
>    Affects Versions: 3.0.0SDK-beta
>            Reporter: Richard Eckart de Castilho
>            Assignee: Marshall Schor
>             Fix For: 3.0.0SDK-beta
>
>         Attachments: XReaderTest.java
>
>
> The scenario described in UIMA-5554 still causes problems.
> {noformat}
> java.lang.ArrayIndexOutOfBoundsException: -1
>       at 
> org.apache.uima.cas.impl.FeatureStructureImplC._setRefValueCommon(FeatureStructureImplC.java:1609)
>       at 
> org.apache.uima.jcas.cas.AnnotationBase.<init>(AnnotationBase.java:96)
>       at org.apache.uima.jcas.tcas.Annotation.<init>(Annotation.java:78)
>       at org.apache.uima.fit.type.Token.<init>(Token.java:83)
>       at org.apache.uima.fit.XReaderTest$XReader.getNext(XReaderTest.java:67)
>       at org.apache.uima.fit.pipeline.JCasIterator.next(JCasIterator.java:140)
>       at org.apache.uima.fit.pipeline.JCasIterator.next(JCasIterator.java:1)
>       at org.apache.uima.fit.XReaderTest.wwwReaderTest(XReaderTest.java:47)
>       at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
>       at 
> sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
>       at 
> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
>       at java.lang.reflect.Method.invoke(Method.java:498)
>       at 
> org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50)
>       at 
> org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
>       at 
> org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47)
>       at 
> org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)
>       at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:325)
>       at 
> org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:78)
>       at 
> org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:57)
>       at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
>       at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
>       at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
>       at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
>       at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
>       at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
>       at 
> org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:86)
>       at 
> org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
>       at 
> org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:459)
>       at 
> org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:678)
>       at 
> org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:382)
>       at 
> org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:192)
> {noformat}



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

Reply via email to