Richard Eckart de Castilho created UIMA-6370:
------------------------------------------------
Summary: Programmatically creating FSArray subtypes not possible?
Key: UIMA-6370
URL: https://issues.apache.org/jira/browse/UIMA-6370
Project: UIMA
Issue Type: Bug
Components: Core Java Framework
Reporter: Richard Eckart de Castilho
When UIMAv3 parses an XMI file and encounters a feature value which has a typed
{{FSArray}} (e.g. {{FSArray}} with element type {{...Token}}), then it
deserializes this by default as an array subtype. This means the UIMA {{Type}}
object bound to the generated {{FSArray}} instance is not simply the type for
{{FSArray}} (where {{getName()}} returns {{"FSArray"}}) but rather a special
type which returns e.g. {{Token[]}} from {{getName()}}.
However, when creating {{FSArray}} instances in regular code, this is typically
done using {{new FSArray(...)}}. In this case, a plain {{FSArray}} is created
which identifies itself as {{FSArray}} via {{getType().getName()}}.
One effect of this is that any approach of comparing annotations which uses
internally calls {{Type.getName()}} may find that an array obtained from the
XMI file is different from an array that was freshly created by our components
- because the XMI one might identify itself to be a {{Token[]}} and the freshly
created one might identify itself as {{FSArray}} - even though they are
otherwise equivalent (same content, same functionality, etc.).
As a temporary workaround, the creation of FSArray subtypes can be globally
disabled by setting the system property
{{uima.disable_subtype_fsarray_creation}}
({{CASImpl.DISABLE_SUBTYPE_FSARRAY_CREATION}}).
I haven't found a way to actually create these subtypes in the UIMA API. I can
see it being done during deserialization, but I have no idea how to do it when
programmatically creating feature structures.
--
This message was sent by Atlassian Jira
(v8.3.4#803005)