On Mar 13, 2013, at 8:00 PM, "Halgrim, Scott" <[email protected]> wrote:
> I cannot seem to run SHARPKnowtatorXMLReader.process() as part of the 
> assertion eval launch. I've done a bit of investigative work, but found 
> myself too far down the rabbit hole to want to make any changes myself. So 
> I'll present what I found here and maybe you can let me know if I'm doing 
> something wrong or if something else needs to be fixed.
> 
> That method throws an IllegalArgumentException at line 198 (rev 1454310) 
> where it tries to create a File from knowtatorURI. Which is just, for 
> example, rec001.knowtator.xml. And it is only that value because the private 
> File member textDirectory is null. And I can't find anywhere in that class 
> that textDirectory is assigned.
> 
> The textDirectory member seems to replace the public static member 
> textURIDirectory from the previous rev (1454297). In addition to being 
> public, that member was assigned in the initialize() method of that rev, 
> which no longer exists in the current rev.
> 
> So I don't see any way that textDirectory can ever get assigned with the 
> current code, so I don't see any way that line 198 can create a File from the 
> knowtatorURI.
> 
> Am I missing something?

You just need to use UIMA configuration parameters. I don't know where/how 
you're creating an AnalysisEngine from SHARPKnowtatorXMLReader, but just 
specify SHARPKnowtatorXMLReader.PARAM_TEXT_DIRECTORY=<your-text-directory> 
(a.k.a. "TextDirectory"=<your-text-directory>) when you create it.

To help you get out of the rabbit hole - they way you would realize that there 
are UIMA configuration parameters is to look for the @ConfigurationParameter 
annotations. Since SHARPKnowtatorXMLReader inherits from 
org.uimafit.component.JCasAnnotator_ImplBase, uimaFIT will automatically fill 
in those @ConfigurationParameter variables from the UIMA context in (the 
superclass's) initialize method.

And as to the implied question of why I removed the public static 
textURIDirectory, that's because public static non-final members are a Really 
Bad Idea(™), and are the wrong way to initialize UIMA components. They're a 
sure way to get nasty thread-unsafety and synchronization problems. So I got 
rid of the static variable and made it a configuration parameter like it should 
be for a UIMA component.

Steve

Reply via email to