camel-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Willem Jiang <>
Subject Re: 2.3-SNAPSHOT: Stream Caching again enabled by Bug Fix for Camel-2686 and CAMEL-2694 (rev 941275)?
Date Wed, 19 May 2010 11:51:16 GMT
Just FYI,

I introduced a disableStreamCache option into HttpComponent[1], by 
setting this option to be true, you will get the pure input stream that 
Jetty provides.



_Jens wrote:
> I would like to disable the feature in the DefaultHttpBinding because of
> existing code. Our code already reads the stream content into a file, so we
> do not require this feature from the Http binding. And obviously we don't
> want to write the data twice. This is why I was asking if this is the
> intended behavior for 2.3. In that case we need to implement an HTTP binding
> that bypasses that feature. 
> To be honest, I think that the Jetty component should allow me to get access
> to the pure input stream that Jetty provides. Any additional streaming into
> a file is a nice feature but should be optional. But this is up to you guys.
> I simply need to make sure that we can upgrade to 2.3 as soon as it is
> released.
> willem.jiang wrote:
>> Yes, from this point, you can't disable the Stream Caching.
>> But there is a difference between the Stream Caching and current Http 
>> binding change.
>> If you don't enable the Stream Caching, there is no interceptor will  be 
>> used to reset the Stream for you before the message is routing to the 
>> next endpoint.
>> If there are large Post message body, the Stream Caching will help you 
>> avoid the OutOfMessage error as it can dump the message into a file.
>> I don't know why are your going to disable it.
>> Willem
>> _Jens wrote:
>>> Hi Willem,
>>> thanks for your quick reply. The issue is that I cannot disable
>>> streamCaching in 2.3-SNAPSHOT anymore. This is what was changed in
>>> DefaultHttpBinding.parseBody:
>>> Before:
>>>             // otherwise use input stream
>>>             return HttpConverter.toInputStream(request); 
>>> Now:
>>>             // otherwise use input stream and we need to cache it first
>>>             InputStream is = HttpConverter.toInputStream(request,
>>> httpMessage.getExchange());
>>>             if (is == null) {
>>>                 return is;
>>>             }
>>>             // convert the input stream to StreamCache
>>>             try {
>>>                 CachedOutputStream cos = new
>>> CachedOutputStream(httpMessage.getExchange());
>>>                 IOHelper.copy(is, cos);
>>>                 return cos.getStreamCache();
>>>             } finally {
>>>                 is.close();
>>>             }
>>> This means, the CachedOutputStream is always used. I have tried to
>>> disable
>>> this on the camelContext. But obviously the above code does not check
>>> this
>>> option in the camelContext. So it is not possible anymore.
>>> willem.jiang wrote:
>>>> These changes just to make sure the we can still read the post message 
>>>> body even the body is form message.
>>>> You can still configure the CachedOutputStream by using the camelContext

>>>> properties, I don't know what kind of issue that the changes introduced 
>>>> to you.
>>>> Willem
>>>> _Jens wrote:
>>>>> Hi,
>>>>> it seems to me that the DefaultHTTPBinding again uses a
>>>>> CachedOutputStream.
>>>>> This means that the binding cannot be used anymore with longer streams
>>>>> and
>>>>> that the streamCache option on the CamelContext bean is ignored. Is
>>>>> this
>>>>> going to be the way the caching is done in 2.3?
>>>>> Thanks,
>>>>> Jens

View raw message