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]

Reply via email to