Claus Ibsen created CAMEL-25995:
-----------------------------------
Summary: camel-base64 - unmarshal of a file fails with Stream
closed, as the input stream is closed before the decoded stream is read
Key: CAMEL-25995
URL: https://issues.apache.org/jira/browse/CAMEL-25995
Project: Camel
Issue Type: Bug
Components: camel-base64
Affects Versions: 4.18.0, 4.22.0, 4.23.0
Reporter: Claus Ibsen
Fix For: 4.24.0
The base64 data format decodes while the body is read: {{unmarshal}} returns a
{{Base64InputStream}} over the input stream ({{Base64DataFormat}}, main
50d17f9c2614, line 77). Since CAMEL-21293 (4.9.0) that input stream is closed
as soon as {{unmarshal}} returns:
* {{DataFormat.unmarshal(Exchange, Object)}} closes the stream it converted the
body to (camel-api {{DataFormat}}, line 106);
* {{UnmarshalProcessor}} closes an {{InputStream}} body (line 129).
Only an {{Iterator}} result is left open. The first read of the decoded stream
then fails with {{java.io.IOException: Stream closed}}.
A body in memory still works, as closing a {{ByteArrayInputStream}} or a stream
cache does nothing. A file does not, so {{from: file}} followed by {{unmarshal:
base64}}, a common way to decode Base64 files, fails.
Checked on 4.24.0-SNAPSHOT with {{camel run}}, with a file holding
{{SGVsbG8gQ2FtZWwgZnJvbSBhIGZpbGU=}}:
* {{from: file:b64in?noop=true}}, then {{unmarshal: base64}}:
{{StreamCacheException}} from {{Base64InputStream}} to {{StreamCache}}, due to
{{java.io.IOException: Stream closed}} (stream caching reads the decoded stream
before the next step);
* a {{java.io.File}} body: the same;
* the same content as a {{byte[]}}: "Hello Camel from a file".
*Proposed change*: decode in {{unmarshal}} into the stream cache (an
{{OutputStreamBuilder}}, as marshal does) and return it, so the input stream
can be closed.
_Claude Code on behalf of davsclaus_
--
This message was sent by Atlassian Jira
(v10.3.26#10030026)