You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commons-dev@ws.apache.org by "Davanum Srinivas (JIRA)" <ji...@apache.org> on 2007/07/13 20:46:04 UTC

[jira] Commented: (WSCOMMONS-216) Expose getOutputStream() method on MTOMXMLStreamWriter

    [ https://issues.apache.org/jira/browse/WSCOMMONS-216?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel#action_12512573 ] 

Davanum Srinivas commented on WSCOMMONS-216:
--------------------------------------------

Let's do it. +1 from me.

-- dims

> Expose getOutputStream() method on MTOMXMLStreamWriter
> ------------------------------------------------------
>
>                 Key: WSCOMMONS-216
>                 URL: https://issues.apache.org/jira/browse/WSCOMMONS-216
>             Project: WS-Commons
>          Issue Type: Improvement
>          Components: AXIOM
>            Reporter: Rich Scheuerle
>            Assignee: Rich Scheuerle
>
> Expose a getOutputStream() method on the MTOMXMLStreamWriter.  This can boost performance for OMSourcedElement/OMDataSource items.
> Here is the requested change to MTOMXMLStreamWriter
> +    
> +    /**
> +     * If the MTOMXMLStreamWriter is connected to an OutputStream
> +     * then the OutputStream is returned.  This allows a node
> +     * (perhaps an OMSourcedElement) to write its content
> +     * directly to the OutputStream.
> +     * @return OutputStream or null
> +     */
> +    public OutputStream getOutputStream() throws XMLStreamException {
> +        OutputStream os = outStream;
> +        if (os != null) {
> +            // Flush the state of the writer..Many times the 
> +            // write defers the writing of tag characters (>)
> +            // until the next write.  Flush out this character
> +            this.writeCharacters(""); 
> +            this.flush();
> +        }
> +        return os;
> +    }
> Here is the scenario that would have a performance boost.
> (a) Transport layer invokes serializeAndConsume(OutputStream ...) on the OM tree.
> (b) The implementation of serializeAndConsume always wraps the OutputStream with an MTOMXMLStreamWriter.
> (c) The *serializeAndConsume(XMLStreamWriter ) is called on the children.
> (d) One of the children is an OMSourcedElement, which is attached to a OMDataSource which wraps a data object (i.e. JAXB object).
> (e) The OMDataSource.serialize(XMLStreamWriter) is invoked.
> (f) Here's the problem.  The implementation of OMDataSource (i.e. JAXB OMDataSource object) may have a faster mechanism for writing to an OutputStream than an XMLStreamWriter.  If the MTOMXMLStreamWriter exposed a getOutputStream() method, the OMDataSource could write directly to it.  If the OMDataSource wraps an byte[], InputStream, Source, etc.  there is an even bigger performance savings.
> I don't believe that adding getOutputStream() compromises the model.  
> Comments ?
> Rich

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.


---------------------------------------------------------------------
To unsubscribe, e-mail: commons-dev-unsubscribe@ws.apache.org
For additional commands, e-mail: commons-dev-help@ws.apache.org