Claus Ibsen created CAMEL-26007:
-----------------------------------
Summary: camel-mail - mimeMultipart unmarshal of a body that is
not a multipart leaves a closed stream for a file
Key: CAMEL-26007
URL: https://issues.apache.org/jira/browse/CAMEL-26007
Project: Camel
Issue Type: Bug
Components: camel-mail
Affects Versions: 4.18.0, 4.22.0, 4.23.0
Reporter: Claus Ibsen
Fix For: 4.24.0
When the {{Content-Type}} header is not a multipart, or is missing,
mimeMultipart unmarshal returns the input stream itself as the body
({{MimeMultipartDataFormat}}, main 56aa5f4970a6, lines 305 and 308). The docs
say it leaves such a message alone. Since CAMEL-21293 (4.9.0),
{{UnmarshalProcessor}} and {{DataFormat.unmarshal(Exchange, Object)}} close the
input stream when unmarshal returns. For a file, and any stream that is not in
memory, the body is then a closed stream, and the next step fails with
{{java.io.IOException: Stream closed}}. A body in memory survives, as closing
it does nothing. Files from the file consumer have no {{Content-Type}} header,
so all of them take this path. This is the same pattern as CAMEL-25995 (base64).
Checked on 4.24.0-SNAPSHOT with {{camel run}}, with a plain text file:
* a {{java.io.File}} body, then {{unmarshal: mimeMultipart}}: the body is a
{{java.io.BufferedInputStream}}, and the next step fails with
{{StreamCacheException}} ... {{due to java.io.IOException: Stream closed}};
* {{from: file}}, then {{unmarshal: mimeMultipart}}: the same.
*Proposed change*: leave the body as it was when it is not a multipart, as the
docs say, instead of returning the stream.
_Claude Code on behalf of davsclaus_
--
This message was sent by Atlassian Jira
(v10.3.26#10030026)