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.
[1] https://issues.apache.org/activemq/browse/CAMEL-2738
Willem
_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