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

Reply via email to