[
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)