Description
Currently (unexpanded) entity references are represented as OMText instances with type=ENTITY_REFERENCE_NODE. This is a bad choice:
- An entity reference doesn't necessarily represent character data: the expansion can e.g. produce elements. Representing it as an OMText is therefore conceptually wrong.
- There is lots of code that checks for OMText and then uses OMText#getText() under the assumption that the return value represents character data. However, for an entity reference, getText() would return the entity name.
It should also be noted that the test coverage for entity references is currently almost nonexistent. As a result, the code that handles entity references is inconsistent. E.g. OMStAXWrapper/SwitchingWrapper contains the following code:
if ((currentEvent == START_ELEMENT)
(currentEvent == END_ELEMENT) |
---|
(currentEvent == ENTITY_REFERENCE))
{
return ((OMElement) lastNode).getLocalName();
}
else { throw new IllegalStateException(); } |
This is obviously incorrect.