[ 
https://issues.apache.org/jira/browse/UIMA-5793?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Richard Eckart de Castilho updated UIMA-5793:
---------------------------------------------
    Description: 
When FSUtil.getFeature(fs, feature, type) is called on a feature that is 
multi-valued and type is Object, then the method fails with a message like

{noformat}
Unable to coerce value of feature 
[de.tudarmstadt.ukp.inception.api.kb.type.Fact:object] with type 
[de.tudarmstadt.ukp.inception.api.kb.type.FactObjectLink[]] into 
[java.lang.Object]
{noformat}

This is because Object is no an array or collection type. However, 
FSUtil.getFeatures should handle this as a special case. When the Object is 
used, basically any return value is acceptable. FSUtil should have defined 
behavior here, e.g. returning either an array or a list representation of the 
multi-value.

This is what current work-around code looks like:

{code}
    private Object getValue(FeatureStructure fs, AnnotationFeature aFeature)
    {
        Object value;
        
        Feature f = fs.getType().getFeatureByBaseName(aFeature.getName());
        if (f.getRange().isPrimitive()) {
            value = FSUtil.getFeature(fs, aFeature.getName(), Object.class);
        }
        else if (FSUtil.isMultiValuedFeature(fs, f)) {
            value = FSUtil.getFeature(fs, aFeature.getName(), List.class);
        }
        else {
            value = FSUtil.getFeature(fs, aFeature.getName(), 
FeatureStructure.class);
        }
        
        return value;
    }
{code}

  was:
When FSUtil.getFeature(fs, feature, type) is called on a feature that is 
multi-valued and type is Object, then the method fails with a message like

{noformat}
Unable to coerce value of feature 
[de.tudarmstadt.ukp.inception.api.kb.type.Fact:object] with type 
[de.tudarmstadt.ukp.inception.api.kb.type.FactObjectLink[]] into 
[java.lang.Object]
{noformat}

This is because Object is no an array or collection type. However, 
FSUtil.getFeatures should handle this as a special case. When the Object is 
used, basically any return value is acceptable. FSUtil should have defined 
behavior here, e.g. returning either an array or a list representation of the 
multi-value.


> FSUtil.getFeature fails when called with Object.class on multi-valued features
> ------------------------------------------------------------------------------
>
>                 Key: UIMA-5793
>                 URL: https://issues.apache.org/jira/browse/UIMA-5793
>             Project: UIMA
>          Issue Type: Improvement
>          Components: uimaFIT
>            Reporter: Richard Eckart de Castilho
>            Assignee: Richard Eckart de Castilho
>            Priority: Minor
>             Fix For: 2.5.0uimaFIT
>
>
> When FSUtil.getFeature(fs, feature, type) is called on a feature that is 
> multi-valued and type is Object, then the method fails with a message like
> {noformat}
> Unable to coerce value of feature 
> [de.tudarmstadt.ukp.inception.api.kb.type.Fact:object] with type 
> [de.tudarmstadt.ukp.inception.api.kb.type.FactObjectLink[]] into 
> [java.lang.Object]
> {noformat}
> This is because Object is no an array or collection type. However, 
> FSUtil.getFeatures should handle this as a special case. When the Object is 
> used, basically any return value is acceptable. FSUtil should have defined 
> behavior here, e.g. returning either an array or a list representation of the 
> multi-value.
> This is what current work-around code looks like:
> {code}
>     private Object getValue(FeatureStructure fs, AnnotationFeature aFeature)
>     {
>         Object value;
>         
>         Feature f = fs.getType().getFeatureByBaseName(aFeature.getName());
>         if (f.getRange().isPrimitive()) {
>             value = FSUtil.getFeature(fs, aFeature.getName(), Object.class);
>         }
>         else if (FSUtil.isMultiValuedFeature(fs, f)) {
>             value = FSUtil.getFeature(fs, aFeature.getName(), List.class);
>         }
>         else {
>             value = FSUtil.getFeature(fs, aFeature.getName(), 
> FeatureStructure.class);
>         }
>         
>         return value;
>     }
> {code}



--
This message was sent by Atlassian JIRA
(v7.6.3#76005)

Reply via email to