2016-12-23 1 views
0

Ich versuche, zusätzliche Feature "Version" zum Speichern von "uima.cas.Long" Typ Wert in der UIMA CAS hinzuzufügen.Ausnahme "CASRuntimeException" beim Erstellen von benutzerdefinierten Apache UIMA CAS XML-Deskriptor

ich erfolgreich den XML-Descriptor erstellt habe, das wie folgt aussieht wie folgt:.

<?xml version="1.0" encoding="UTF-8"?> 
<typeSystemDescription xmlns="http://uima.apache.org/resourceSpecifier"> 
    <types> 
    <typeDescription> 
      <name>CASVersion</name> 
      <description/> 
      <supertypeName>uima.cas.TOP</supertypeName> 
      <features> 
       <featureDescription> 
        <name>Version</name> 
        <description/> 
        <rangeTypeName>uima.cas.Long</rangeTypeName> 
       </featureDescription> 
      </features> 
     </typeDescription> 
    </types> 
</typeSystemDescription> 

Und ich generierte den entsprechenden Code mit „UIMA JCasGen“

Folgenden Klassen generiert wurden:

CASVersion_Type.java 
CASVersion.java 

Jetzt wollte ich eine Version zu den JCas hinzufügen, für die ich folgenden Code in meiner Java-Klasse schrieb:

14: public void testAnnotation() { 
    15: JCas document = CasCreationUtils.createCas((TypeSystemDescription) null, null, null).getJCas(); 
    16: CASVersion version = new CASVersion(document); 
    17: version.setVersion(1); 

Ich erhalte "CASRuntimeException" auf der Ausführung des Codes, wie unten erwähnt:

null 
org.apache.uima.cas.CASRuntimeException: JCas type "com.example.test.CASVersion" used in Java code, but was not declared in the XML type descriptor. 
    at org.apache.uima.jcas.impl.JCasImpl.getTypeInit(JCasImpl.java:456) 
    at org.apache.uima.jcas.impl.JCasImpl.getType(JCasImpl.java:425) 
    at org.apache.uima.jcas.cas.TOP.<init>(TOP.java:96) 
    at com.example.test.CASVersion.<init>(CASVersion.java:51) 
    at com.example.test.Custom.testAnnotation(Custom.java:15) 

-Code in CASVersion.java in Zeile 51 ist wie folgt:

50: public CASVersion(JCas jcas) { 
51: super(jcas); 
52: readObject(); 
53: } 

Da ich tue Zum ersten Mal bin ich nicht in der Lage herauszufinden, wie ich meinen custome XML-Deskriptor mit dem vorhandenen XML-Typdeskriptor zusammenführen kann.

Wäre toll, wenn mir jemand dabei helfen kann.

Vielen Dank im Voraus.

Antwort

0

Diese Meldung

JCas type "com.example.test.CASVersion" used in Java code, 
but was not declared in the XML type descriptor. 

bedeutet, dass die JCAS Klasse für die benutzerdefinierte Typ vorhanden ist, aber UIMA ist der XML-Beschreiber nicht bewusst den benutzerdefinierten Typ beschreibt. Angenommen, Sie verwenden uimaFIT, stellen Sie sicher, dass Sie die Typsystemerkennung eingerichtet haben, indem Sie eine types.txt-Datei erstellen, die auf den XML-Deskriptor des benutzerdefinierten Typs verweist. Für die schmutzigen Details, beziehen Sie sich bitte auf die uimaFIT documentation.

Disclosure: ich auf uimaFIT arbeite

+0

Ich benutze uimaFIT und habe bereits beide Methoden für Type System Detection versucht, aber ich bekomme immer noch die gleiche Ausnahme tion. Könnte es sein, dass irgendwelche Abhängigkeiten für uimaFIT in der POM.xml fehlen und dieses Problem verursacht? –

+1

Angenommen, Sie pflegen die types.txt im selben Projekt wie der XML-Typdeskriptor und als JCas-Klassen, dann sollte uimaFIT den Typ erkennen können, wenn Java die JCas-Klasse finden kann - in diesem Fall würde Java Ihnen einen geben "ClassNotFoundException". Sie können die Erkennung des uimaFIT-Typs debuggen, indem Sie die Protokollstufe für die Klasse "TypeSystemDescription" erhöhen oder indem Sie in "org.apache.uima.fit.factory.TypeSystemDescriptionFactory.createTypeSystemDescription()" einen Haltepunkt festlegen – rec

0

Der neue Typ nicht in JCAS idetified wurde, als ich JCAS wie folgt initialisiert:

JCas document = CasCreationUtils.createCas((TypeSystemDescription) null, null, null).getJCas(); 

Diese durch Ersetzen es durch eines der Fest wurde folgende:

//1st way 
    JCas document = JCasFactory.createJCas(); 

    //2nd way 
    TypeSystemDescription tsd = TypeSystemDescriptionFactory.createTypeSystemDescription(); 
    JCas document = CasCreationUtils.createCas(tsd, null, null).getJCas(); 
Verwandte Themen