Add a feature to detach a builder from the underlying stream
------------------------------------------------------------
Key: AXIOM-404
URL: https://issues.apache.org/jira/browse/AXIOM-404
Project: Axiom
Issue Type: New Feature
Components: API
Reporter: Andreas Veithen
Priority: Minor
Because Axiom supports deferred parsing, the input stream from which an object
model builder is constructed can only be closed after processing the XML
document or message. However, this is not always possible or desirable. Various
strategies are used to release the input stream before the document or message
is completely processed:
1. The application code can call build() or buildWithAttachments() before
closing the stream. This ensures that the object model is entirely built so
that the stream is no longer necessary.
2. The application code can read the stream into a ByteArrayOutputStream and
then pass a ByteArrayInputStream to Axiom. The garbage collector will take care
of releasing the resources linked to the ByteArrayInputStream and the original
stream can be released early.
3. Some code in Axis2 (in particular code related to JAX-WS) uses
DetachableInputStream: the original stream is wrapped with a
DetachableInputStream before being passed to Axiom. If the original stream
needs to be closed, DetachableInputStream#detach() is called to buffer the
remaining content in memory.
4. For XOP/MTOM messages, the application code could simply instruct Axiom to
fetch all MIME parts before closing the stream. This would work because Axiom
buffers MIME parts (in memory or in temporary files, depending on the
configuration), but this approach appears to be rarely used.
None of these strategies is optimal:
* Strategy 1 implies that the object model is always built completely, even in
cases where this is not necessary. buildWithAttachments also requires iterating
over the entire message. However, for XOP/MTOM messages this strategy is better
than 2 and 3 (because it is closer to 4).
* Strategy 2 is suboptimal because the entire content of the stream needs to be
read before starting to process the message. This contrasts with the other
strategies which can be executed just before the stream is closed.
* Strategies 2 and 3 add significant overhead for XOP/MTOM messages because the
content of the message is buffered twice.
* Strategy 4 is optimal for XOP/MTOM but doesn't apply to plain XML or SOAP
messages.
Therefore a new feature should be added to the object model builders that
allows application code to instruct Axiom to detach the builder from the
underlying stream. Axiom would then use the optimal strategy for the given type
of builder, i.e. strategy 3 for plain XML or SOAP messages and strategy 4 for
XOP/MTOM messages.
--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators:
https://issues.apache.org/jira/secure/ContactAdministrators!default.jspa
For more information on JIRA, see: http://www.atlassian.com/software/jira
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]