You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@uima.apache.org by "Marshall Schor (JIRA)" <de...@uima.apache.org> on 2017/10/09 14:03:00 UTC

[jira] [Resolved] (UIMA-5607) Exception when using JCas after accessing type property of a JCas class

     [ 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)