Hi,

I created the Jira Improvement
https://issues.apache.org/jira/browse/CAMEL-6718

Regards Franz


On Wed, Sep 4, 2013 at 11:36 AM, Claus Ibsen <[email protected]> wrote:

> Hi
>
> Good idea as from Camel 2.12 onwards we have a StreamCachingStrategy
> which allows us to safely use CachedOutputStream in components without
> forcing spooling to disk on end-users, without them knowing that.
>
> Fell free to log a JIRA ticket.
>
> On Wed, Sep 4, 2013 at 11:14 AM, Franz Paul Forsthofer
> <[email protected]> wrote:
> > Hello,
> >
> > the MarschallProcessor currently returns a byte array. This does mean
> that
> > large messages are kept in memory which can lead to performance
> problems. I
> > suggest to use StreamCache instead by using CachedOutputStream instead of
> > ByteArrayOutputStream.
> >
> > To be more concret, instead of
> >
> >     public void process(Exchange exchange) throws Exception {
> >         ObjectHelper.notNull(dataFormat, "dataFormat");
> >
> >         ByteArrayOutputStream buffer = new ByteArrayOutputStream();
> >         Message in = exchange.getIn();
> >         Object body = in.getBody();
> >
> >         // lets setup the out message before we invoke the dataFormat
> >         // so that it can mutate it if necessary
> >         Message out = exchange.getOut();
> >         out.copyFrom(in);
> >
> >         try {
> >             dataFormat.marshal(exchange, body, buffer);
> >             byte[] data = buffer.toByteArray();
> >             out.setBody(data);
> >         } catch (Exception e) {
> >             // remove OUT message, as an exception occurred
> >             exchange.setOut(null);
> >             throw e;
> >         }
> >     }
> >
> > we should use
> >
> >    public void process(Exchange exchange) throws Exception {
> >         ObjectHelper.notNull(dataFormat, "dataFormat");
> >
> >         CachedOutputStream buffer = new
> CachedOutputStream(exchange,true);
> >         Message in = exchange.getIn();
> >         Object body = in.getBody();
> >
> >         // lets setup the out message before we invoke the dataFormat
> >         // so that it can mutate it if necessary
> >         Message out = exchange.getOut();
> >         out.copyFrom(in);
> >
> >         try {
> >             dataFormat.marshal(exchange, body, buffer);
> >             out.setBody(buffer.getStreamCache() );
> >         } catch (Exception e) {
> >             // remove OUT message, as an exception occurred
> >             exchange.setOut(null);
> >             throw e;
> >         }
> >     }
> >
> >
> > Regards Franz
> >
> >
> >
> > --
> > View this message in context:
> http://camel.465427.n5.nabble.com/Improvement-Suggestion-for-MarschallProcessor-Use-CachedOutputStream-instead-of-ByteArrayOutputStream-tp5738654.html
> > Sent from the Camel Development mailing list archive at Nabble.com.
>
>
>
> --
> Claus Ibsen
> -----------------
> Red Hat, Inc.
> Email: [email protected]
> Twitter: davsclaus
> Blog: http://davsclaus.com
> Author of Camel in Action: http://www.manning.com/ibsen
>

Reply via email to