2016-12-23 52 views
0

我試圖增加額外的功能「版本」存儲在UIMA CAS「uima.cas.Long」類型值。例外「CASRuntimeException」,而創建定製的Apache UIMA CAS XML描述

我已經成功地創建XML描述它看起來像如下:產生

以下類

<?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> 

我生成使用「UIMA JCasGen」相應的代碼:

CASVersion_Type.java 
CASVersion.java 

現在,我想一個版本添加到JCAS爲我寫了以下在我的java類代碼:

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

我得到 「CASRuntimeException」 上運行此代碼如下所述:在CASVersion.java

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) 

代碼在51行如下:

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

因爲我做的這是我第一次無法弄清楚如何將我的custome xml描述符合併到現有的XML類型描述符中。

將是巨大的,如果任何人都可以指導我在此。

在此先感謝。

回答

0

此消息

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

意味着您的自定義類型的JCAS類是存在的,但UIMA不知道描述自定義類型的XML描述。假設您正在使用uimaFIT,請確保已通過創建指向您的自定義類型的XML描述符的types.txt文件來設置類型系統檢測。有關骯髒的細節,請參閱uimaFIT documentation

披露:我的工作uimaFIT

+0

我使用uimaFIT和已經嘗試過的類型系統檢測中提到的兩種方法。然而,我仍然得到同樣的excep灰。可能是因爲uimaFIT的任何依賴關係在POM.xml中缺失並導致此問題? –

+1

假設您在與XML類型描述符和JCas類相同的項目中維護types.txt,那麼當Java能夠找到JCas類時,uimaFIT應該能夠發現該類型 - 在這種情況下,Java會給你一個「ClassNotFoundException的」。您可以通過增加TypeSystemDescription類的日誌級別或通過在org.apache.uima.fit.factory.TypeSystemDescriptionFactory.createTypeSystemDescription()中設置斷點來調試uimaFIT類型檢測。 – rec

0

當我初始化JCAS如下新的類型不是在JCAS idetified:

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

這是固定的,通過的任何一個替換它以下:

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

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