2016-12-23 56 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();