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/09/08 21:27:05 UTC

[jira] [Commented] (UIMA-5554) Strange exception when trying to get JCas FS class through reflection

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

Marshall Schor commented on UIMA-5554:
--------------------------------------

It's not harmful, but there's an "ordering" issue, due to JCas static initializer code.  This can be solved in 2 ways.

Class.forName has 2 flavors.  The "plain" flavor loads the class *and initializes* it. That is, it runs the static initializers among other things.

In UIMA V3, these initializers reference information about the type system that defines the corresponding UIMA Type for this JCas classes.  Therefore, these types need to be "installed" - that is committed :-), before the class initialization happens.

So, you can do a Class.forName("myJCasClassName", false, this.getClass().getClassLoader()), which skips the initialization (the *false* argument says to not do the initialization.  The initialization will happen on first use, at which time the type system must be committed.

The other way to get Class.forname("myJCasClassName") (the plain variation) to work is to first commit a type system that defines the type this JCas class is covering.  

I hope that's clear; if not, please ask more questions.

> Strange exception when trying to get JCas FS class through reflection
> ---------------------------------------------------------------------
>
>                 Key: UIMA-5554
>                 URL: https://issues.apache.org/jira/browse/UIMA-5554
>             Project: UIMA
>          Issue Type: Bug
>          Components: Core Java Framework
>    Affects Versions: 3.0.0SDK-beta
>            Reporter: Richard Eckart de Castilho
>
> I am trying to get a class object for a JCas FS type using reflection:
> {noformat}
> Class.forName(typeName);
> {noformat}
> However, it produces this strange error.
> {noformat}
> java.lang.ExceptionInInitializerError
> 	at java.lang.Class.forName0(Native Method)
> 	at java.lang.Class.forName(Class.java:264)
> ...
> Caused by: org.apache.uima.cas.CASRuntimeException: A JCas class field "sofa" is being initialized by non-framework (user) code before Type System Commit for a type system with a corresponding type. Either change the user load code to not do initialize, or to defer it until after the type system commit.
> 	at org.apache.uima.cas.impl.TypeSystemImpl.getAdjustedFeatureOffset(TypeSystemImpl.java:2575)
> 	at org.apache.uima.jcas.cas.AnnotationBase.<clinit>(AnnotationBase.java:71)
> 	... 27 more
> {noformat}
> Is it considered harmful to try getting a class object for a JCas FS class?



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