Hello, In https://issues.apache.org/jira/browse/CAMEL-9880 Stephan proposes an improvement for the attachment concept in Camel. He introduces headers for attachments. Currently an attachment is represented in Camel by a DataHandler; in the Camel Message you have methods like
DataHandler getAttachment(String id); Map<String, DataHandler> getAttachments(); void addAttachment(String id, DataHandler content); void setAttachments(Map<String, DataHandler> attachments); These methods do not cover attachment specific headers; the DataHandler object contains only the body, the name, and mime type of the attachment. I see currently three use cases for attachment headers. 1. SOAP messages sent to Camel via CXF can contain attachments with headers. Currently these attachment headers get lost when the CXF Message is transformed to the Camel Message. 2. Mime Multipart Data Type Formatter The Mime Multipart Data Type Formatter ( http://camel.apache.org/mime-multipart.htm) converts a Mime Multipart document into a Camel message with attachments. The first part of the multipart document is transformed to the message body, the other parts are transformed to DataHandler instances. The headers of the parts currently get lost during this transformation. Example of a multipart message from https://tools.ietf.org/html/rfc2387: Content-Type: Multipart/Related; boundary=example-1 start="<950120.a...@xison.com>"; type="Application/X-FixedRecord" start-info="-o ps" --example-1 Content-Type: Application/X-FixedRecord Content-ID: <950120.a...@xison.com> 25 10 34 10 25 21 26 10 --example-1 Content-Type: Application/octet-stream Content-Description: The fixed length records Content-Transfer-Encoding: base64 Content-ID: <950120.a...@xison.com> T2xkIE1hY0RvbmFsZCBoYWQgYSBmYXJtCkUgSS BFIEkgTwpBbmQgb24gaGlzIGZhcm0gaGUgaGFk IHNvbWUgZHVja3MKRSBJIEUgSSBPCldpdGggYS BxdWFjayBxdWFjayBoZXJlLAphIHF1YWNrIHF1 YWNrIHRoZXJlLApldmVyeSB3aGVyZSBhIHF1YW NrIHF1YWNrCkUgSSBFIEkgTwo= --example-1-- The header “Content-Description: The fixed length records” gets lost if the example Multipart message is transformed to a Camel Message. 3. An e-Mail can be a Multipart MIME message which contains parts with headers, example from http://www.oreilly.com/openbook/mh/mulmes.htm: From: Laura Rios <la...@oara.sf.ca.us> To: st...@ntecom.za Subject: Sara is two! Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="Snip snip snip" --Snip snip snip Content-Type: text/enriched; charset="us-ascii" Hi, Steve. Sara had her second birthday yesterday. Can you believe it? She is so <bold>big</bold>! Now if we can just live through the "terrible twos" for a year, <italic>sigh</italic>. Here are a few words from her. I've also scanned in a picture of her party. Tell your boss thanks for letting us keep in touch by email. Laura --Snip snip snip Content-type: audio/basic Content-transfer-encoding: base64 Content-description: Sara says "I love you, Steve" (awww) /Xr++/hoX2lqeXt8d/7z8/D5+PLw7/b+9fD09319/vz5f3j//Pz9fHp7fvrs9Wz/eH59d omitted... /////////////////y8= --Snip snip snip Content-type: image/gif Content-transfer-encoding: base64 Content-description: Cutting the cake, sort of R0lGODdhQAHIAKMAAAAAAP+2bQAAACQAAAAASEgAAAAkSEgkJG0kJJEkAABIkZFIJCRttrZt omitted... l7Vry4B9aM+yKjifMosAADs= --Snip snip snip-- This example mail message is transformed by the Camel mail component to a Camel message, however the attachment headers “Content-description: Sara says "I love you, Steve" (awww)” and “Content-description: Cutting the cake, sort of” get lost. These use cases show that attachment headers would bring a valuable improvement for Camel. Therefore I think the improvement proposed in https://issues.apache.org/jira/browse/CAMEL-9880 should be added to the Camel 2.18. From the proposed solutions in https://issues.apache.org/jira/browse/CAMEL-9880, I prefer the third solution which introduces a new interface “Attachment” and methods in the Camel Message class: public interface Attachment { DataHandler getDataHandler(); String getHeader(String name); Collection<String> getHeaderNames(); Map<String, String> getHeaders(); } Methods in the Camel Message Attachment getAttachmentObject(String id); void addAttachmentObject(String id, Attachment content); Map<String, Attachment> getAttachmentObjects(); void setAttachmentObjects(Map<String, Attachment> attachments); Due to compatibility reasons we still have to support the “old” attachment methods in the Camel Message which could be marked as deprecated. Best Regards Franz