On 28 Dec 2007, at 10:16, Paul Fremantle wrote:

The purpose of TextFileDataSource is actually to implement a text node
(+ <text> wrapper element) that is backed by a temporary file rather
than a String/char[] object, thereby avoiding to load the entire file
into memory. Maybe we should consider another solution that avoids the
problems described above. The idea would be to use a custom
implementation of OMText (that again is backed by a temporary file). I
think that if the custom implementation extends OMNodeImpl and
implements OMText, an instance can be added to the Axiom tree without
problem, given that the Axiom code never casts OMText to OMTextImpl.
An alternative (but less clean) solution would be to extend OMTextImpl.

I agree these would work, but I'm not sure why this would be better
than fixing up the DataSource model. The DataSource approach was
designed to solve the problem of creating new forms of data-backed
OMNodes. If it isn't working well enough we should raise this issue
with the axiom dev team.

The main argument in favor of the custom OMText solution was simplicity. There is however another solution that is a bit more complicated but that strictly adheres to the OMDataSource model. The idea is as follows. What TextFileDataSource does is to construct an InputStream that represents the concatenation <text> + text + </text>. It then uses this input stream to build an XMLStreamReader. The problem comes from the fact that "text" is plain text, not XML text. A quick fix could be to wrap the text in a CDATA section (i.e. <text><! [CDATA[ + text + ]]></text>), but this doesn't solve the character encoding problem. A better solution is then to implement a custom XMLStreamReader that synthesizes the following sequence of events:

* START_DOCUMENT
* START_ELEMENT
* (CHARACTERS)*n
* END_ELEMENT
* END_DOCUMENT

Since the output of XMLStreamReader for the CHARACTER events is pure character data, we don't need to care about XML entities and character encoding at that level.

To summarize, the solution would be to replace the custom InputStream implementation by a custom XMLStreamReader implementation. This XMLStreamReader implementation would have more or less the same complexity as the existing InputStream implementation.

Regards,

Andreas


---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to