uima-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Thilo Goetz <twgo...@gmx.de>
Subject Re: Get annotation class from Type
Date Tue, 01 Dec 2009 11:12:42 GMT


On 12/1/2009 09:46, Tommaso Teofili wrote:
> 2009/11/29 Steven Bethard<steven.bethard@gmail.com>
>
>> On Sat, Nov 28, 2009 at 1:12 AM, Fabien POULARD<grdscarabe@gmail.com>
>> wrote:
>>> On Fri, Nov 27, 2009 at 4:56 PM, Thilo Goetz<twgoetz@gmx.de>  wrote:
>>>> I guess this will work, as long as there even is a JCas type
>>>> for the type you're looking for.  There may not always be one,
>>>> and we have this whole meta-programming kind of API for this
>>>> kind of situation.  If you tell us what you need the class for,
>>>> we may be able to suggest alternative ways of handling this.
>>>
>>> My need is quite simple, a component I develop work on some types
>>> passed to the component in parameter. I retrieve the type from its
>>> name passed in parameter with a simple :
>>>
>>> Type mMonType  = cas.getTypeSystem().getType(theParameterTypeStr);
>>>
>>> ... and I check it is not null before using it.
>>>
>>> Now I use some generic classes (java generics) for my processing and I
>>> need to "configure" them with the class of the annotation
>>> corresponding to this type. That's where I'm lost...
>>
>> If you know you're loading a Java class for a type, why not have your
>> "theParameterTypeStr" be the fully qualified Java class name instead
>> of the UIMA type? Then you can use the usual Java Class.forName()
>> directly.
>>
>
> Using reflection is a simple quick way I also use sometimes for this
> purpose.

I'll debate this just for the sake of other people who
may be following this thread.  It seems much simpler
and less error prone to use the built-in UIMA CAS APIs
for this, as described here:
http://incubator.apache.org/uima/downloads/releaseDocs/2.2.2-incubating/docs/html/references/references.html#ugr.ref.cas
And it'll be faster, too, without the JCas/Java reflection
detour.

> Just beware, if you want to instantiate your Annotations automatically, that
> JCasGen generated types usually have more than one constructor so you should
> choose the one you deserve (i.e.: the constructor with the JCas parameter,
> that is usually the first one).
>
> ex.:
> Type mMonType  = cas.getTypeSystem().getType(
> theParameterTypeStr);
>
> Class typeClass = Class.forName(mMonType.getName());
> Constructor jcasConstructor = getProperConstructor(typeClass);
> FeatureStructure fs = (FeatureStructure) jcasConstructor.newInstance(aJCas);
> ...
>
> private Constructor getProperConstructor(Class typeClass) {
> ....
> //FIXME : dummy sample
> return typeClass.getConstructors()[1];
> ..
> }
>
> Tommaso
>
>
>>
>> Steve
>> --
>> Where did you get that preposterous hypothesis?
>> Did Steve tell you that?
>>         --- The Hiphopopotamus
>>
>

Mime
View raw message