Repository: camel
Updated Branches:
  refs/heads/master 00b59137b -> 50d6d4fb9


http://git-wip-us.apache.org/repos/asf/camel/blob/50d6d4fb/components/camel-mail/src/test/java/org/apache/camel/dataformat/mime/multipart/MimeMultipartDataFormatTest.java
----------------------------------------------------------------------
diff --git 
a/components/camel-mail/src/test/java/org/apache/camel/dataformat/mime/multipart/MimeMultipartDataFormatTest.java
 
b/components/camel-mail/src/test/java/org/apache/camel/dataformat/mime/multipart/MimeMultipartDataFormatTest.java
index 7759c49..ada79c0 100644
--- 
a/components/camel-mail/src/test/java/org/apache/camel/dataformat/mime/multipart/MimeMultipartDataFormatTest.java
+++ 
b/components/camel-mail/src/test/java/org/apache/camel/dataformat/mime/multipart/MimeMultipartDataFormatTest.java
@@ -22,14 +22,18 @@ import java.io.File;
 import java.io.IOException;
 import java.io.InputStream;
 import java.io.UnsupportedEncodingException;
+import java.util.HashMap;
+import java.util.Map;
 
 import javax.activation.DataHandler;
 import javax.activation.DataSource;
 import javax.mail.util.ByteArrayDataSource;
 
+import org.apache.camel.Attachment;
 import org.apache.camel.Exchange;
 import org.apache.camel.Message;
 import org.apache.camel.builder.RouteBuilder;
+import org.apache.camel.impl.DefaultAttachment;
 import org.apache.camel.impl.DefaultExchange;
 import org.apache.camel.test.junit4.CamelTestSupport;
 import org.apache.camel.util.IOHelper;
@@ -61,7 +65,10 @@ public class MimeMultipartDataFormatTest extends 
CamelTestSupport {
         in.setBody("Body text");
         in.setHeader(Exchange.CONTENT_TYPE, 
"text/plain;charset=iso8859-1;other-parameter=true");
         in.setHeader(Exchange.CONTENT_ENCODING, "UTF8");
-        addAttachment(attContentType, attText, attFileName);
+        Map<String, String> headers = new HashMap<String, String>();
+        headers.put("Content-Description", "Sample Attachment Data");
+        headers.put("X-AdditionalData", "additional data");
+        addAttachment(attContentType, attText, attFileName, headers);
         Exchange result = template.send("direct:roundtrip", exchange);
         Message out = result.getOut();
         assertEquals("Body text", out.getBody(String.class));
@@ -70,13 +77,16 @@ public class MimeMultipartDataFormatTest extends 
CamelTestSupport {
         assertTrue(out.hasAttachments());
         assertEquals(1, out.getAttachmentNames().size());
         assertThat(out.getAttachmentNames(), hasItem(attFileName));
-        DataHandler dh = out.getAttachment(attFileName);
+        Attachment att = out.getAttachmentObject(attFileName);
+        DataHandler dh = att.getDataHandler();
         assertNotNull(dh);
         assertEquals(attContentType, dh.getContentType());
         InputStream is = dh.getInputStream();
         ByteArrayOutputStream os = new ByteArrayOutputStream();
         IOHelper.copyAndCloseInput(is, os);
         assertEquals(attText, new String(os.toByteArray()));
+        assertEquals("Sample Attachment Data", 
att.getHeader("content-description"));
+        assertEquals("additional data", att.getHeader("X-AdditionalData"));
     }
 
     @Test
@@ -245,9 +255,14 @@ public class MimeMultipartDataFormatTest extends 
CamelTestSupport {
     public void marhsalOnlyMixed() throws IOException {
         in.setBody("Body text");
         in.setHeader("Content-Type", "text/plain");
-        addAttachment("application/octet-stream", "foobar", "attachment.bin");
+        Map<String, String> headers = new HashMap<String, String>();
+        headers.put("Content-Description", "Sample Attachment Data");
+        headers.put("X-AdditionalData", "additional data");
+        addAttachment("application/octet-stream", "foobar", "attachment.bin", 
headers);
         Exchange result = template.send("direct:marshalonlymixed", exchange);
         assertThat(result.getOut().getHeader("Content-Type", String.class), 
startsWith("multipart/mixed"));
+        String resultBody = result.getOut().getBody(String.class);
+        assertThat(resultBody, containsString("Content-Description: Sample 
Attachment Data"));
     }
 
     @Test
@@ -291,7 +306,11 @@ public class MimeMultipartDataFormatTest extends 
CamelTestSupport {
     @Test
     public void unmarshalRelated() throws IOException {
         in.setBody(new File("src/test/resources/multipart-related.txt"));
-        unmarshalAndCheckAttachmentName("950120.a...@xison.com");
+        Attachment dh = 
unmarshalAndCheckAttachmentName("950120.a...@xison.com");
+        assertNotNull(dh);
+        assertEquals("The fixed length records", 
dh.getHeader("Content-Description"));
+        assertEquals("header value1,header value2", 
dh.getHeader("X-Additional-Header"));
+        assertEquals(2, dh.getHeaderAsList("X-Additional-Header").size());
     }
 
     @Test
@@ -332,7 +351,7 @@ public class MimeMultipartDataFormatTest extends 
CamelTestSupport {
         assertEquals("This is not a MIME-Multipart", bodyStr);
     }
 
-    private void unmarshalAndCheckAttachmentName(String matcher) throws 
IOException, UnsupportedEncodingException {
+    private Attachment unmarshalAndCheckAttachmentName(String matcher) throws 
IOException, UnsupportedEncodingException {
         Exchange intermediate = 
template.send("direct:unmarshalonlyinlineheaders", exchange);
         assertNotNull(intermediate.getOut());
         String bodyStr = intermediate.getOut().getBody(String.class);
@@ -340,17 +359,29 @@ public class MimeMultipartDataFormatTest extends 
CamelTestSupport {
         assertThat(bodyStr, startsWith("25"));
         assertEquals(1, intermediate.getOut().getAttachmentNames().size());
         
assertThat(intermediate.getOut().getAttachmentNames().iterator().next(), 
containsString(matcher));
-        DataHandler dh = 
intermediate.getOut().getAttachment(intermediate.getOut().getAttachmentNames().iterator().next());
+        Attachment att = 
intermediate.getOut().getAttachmentObject(intermediate.getOut().getAttachmentNames().iterator().next());
+        DataHandler dh = att.getDataHandler();
         assertNotNull(dh);
         ByteArrayOutputStream bos = new ByteArrayOutputStream();
         dh.writeTo(bos);
         String attachmentString = new String(bos.toByteArray(), "UTF-8");
         assertThat(attachmentString, startsWith("Old MacDonald had a farm"));
+        return att;
     }
 
     private void addAttachment(String attContentType, String attText, String 
attFileName) throws IOException {
+        addAttachment(attContentType, attText, attFileName, null);
+    }
+
+    private void addAttachment(String attContentType, String attText, String 
attFileName, Map<String, String> headers) throws IOException {
         DataSource ds = new ByteArrayDataSource(attText, attContentType);
-        in.addAttachment(attFileName, new DataHandler(ds));
+        DefaultAttachment attachment = new DefaultAttachment(ds);
+        if (headers != null) {
+            for (String headerName : headers.keySet()) {
+                attachment.addHeader(headerName, headers.get(headerName));
+            }
+        }
+        in.addAttachmentObject(attFileName, attachment);
     }
 
     @Override

http://git-wip-us.apache.org/repos/asf/camel/blob/50d6d4fb/components/camel-mail/src/test/resources/multipart-related.txt
----------------------------------------------------------------------
diff --git a/components/camel-mail/src/test/resources/multipart-related.txt 
b/components/camel-mail/src/test/resources/multipart-related.txt
index 71b9e1c..1455c53 100644
--- a/components/camel-mail/src/test/resources/multipart-related.txt
+++ b/components/camel-mail/src/test/resources/multipart-related.txt
@@ -16,6 +16,8 @@ Content-ID: <950120.a...@xison.com>
 --example-1
 Content-Type: Application/octet-stream
 Content-Description: The fixed length records
+X-Additional-Header: header value1
+X-Additional-Header: header value2
 Content-Transfer-Encoding: base64
 Content-ID: <950120.a...@xison.com>
 

http://git-wip-us.apache.org/repos/asf/camel/blob/50d6d4fb/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/internal/processor/AnalyticsApiProcessor.java
----------------------------------------------------------------------
diff --git 
a/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/internal/processor/AnalyticsApiProcessor.java
 
b/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/internal/processor/AnalyticsApiProcessor.java
index cb01912..2a35f62 100644
--- 
a/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/internal/processor/AnalyticsApiProcessor.java
+++ 
b/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/internal/processor/AnalyticsApiProcessor.java
@@ -209,7 +209,7 @@ public class AnalyticsApiProcessor extends 
AbstractSalesforceProcessor {
 
         // copy headers and attachments
         out.getHeaders().putAll(exchange.getIn().getHeaders());
-        out.getAttachments().putAll(exchange.getIn().getAttachments());
+        
out.getAttachmentObjects().putAll(exchange.getIn().getAttachmentObjects());
 
         // signal exchange completion
         callback.done(false);

http://git-wip-us.apache.org/repos/asf/camel/blob/50d6d4fb/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/internal/processor/BulkApiProcessor.java
----------------------------------------------------------------------
diff --git 
a/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/internal/processor/BulkApiProcessor.java
 
b/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/internal/processor/BulkApiProcessor.java
index f83ad9d..b1be0e4 100644
--- 
a/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/internal/processor/BulkApiProcessor.java
+++ 
b/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/internal/processor/BulkApiProcessor.java
@@ -416,7 +416,7 @@ public class BulkApiProcessor extends 
AbstractSalesforceProcessor {
 
         // copy headers and attachments
         out.getHeaders().putAll(exchange.getIn().getHeaders());
-        out.getAttachments().putAll(exchange.getIn().getAttachments());
+        
out.getAttachmentObjects().putAll(exchange.getIn().getAttachmentObjects());
 
         // signal exchange completion
         callback.done(false);

http://git-wip-us.apache.org/repos/asf/camel/blob/50d6d4fb/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/internal/processor/JsonRestProcessor.java
----------------------------------------------------------------------
diff --git 
a/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/internal/processor/JsonRestProcessor.java
 
b/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/internal/processor/JsonRestProcessor.java
index 1e8f948..4005dc4 100644
--- 
a/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/internal/processor/JsonRestProcessor.java
+++ 
b/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/internal/processor/JsonRestProcessor.java
@@ -169,7 +169,7 @@ public class JsonRestProcessor extends 
AbstractRestProcessor {
             }
             // copy headers and attachments
             
exchange.getOut().getHeaders().putAll(exchange.getIn().getHeaders());
-            
exchange.getOut().getAttachments().putAll(exchange.getIn().getAttachments());
+            
exchange.getOut().getAttachmentObjects().putAll(exchange.getIn().getAttachmentObjects());
         } catch (IOException e) {
             String msg = "Error parsing JSON response: " + e.getMessage();
             exchange.setException(new SalesforceException(msg, e));

http://git-wip-us.apache.org/repos/asf/camel/blob/50d6d4fb/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/internal/processor/XmlRestProcessor.java
----------------------------------------------------------------------
diff --git 
a/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/internal/processor/XmlRestProcessor.java
 
b/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/internal/processor/XmlRestProcessor.java
index 3f8756f..4979197 100644
--- 
a/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/internal/processor/XmlRestProcessor.java
+++ 
b/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/internal/processor/XmlRestProcessor.java
@@ -234,7 +234,7 @@ public class XmlRestProcessor extends AbstractRestProcessor 
{
             }
             // copy headers and attachments
             
exchange.getOut().getHeaders().putAll(exchange.getIn().getHeaders());
-            
exchange.getOut().getAttachments().putAll(exchange.getIn().getAttachments());
+            
exchange.getOut().getAttachmentObjects().putAll(exchange.getIn().getAttachmentObjects());
         } catch (XStreamException e) {
             String msg = "Error parsing XML response: " + e.getMessage();
             exchange.setException(new SalesforceException(msg, e));

http://git-wip-us.apache.org/repos/asf/camel/blob/50d6d4fb/components/camel-scala/src/main/scala/org/apache/camel/scala/RichMessage.scala
----------------------------------------------------------------------
diff --git 
a/components/camel-scala/src/main/scala/org/apache/camel/scala/RichMessage.scala
 
b/components/camel-scala/src/main/scala/org/apache/camel/scala/RichMessage.scala
index bc5cec0..627bb7c 100644
--- 
a/components/camel-scala/src/main/scala/org/apache/camel/scala/RichMessage.scala
+++ 
b/components/camel-scala/src/main/scala/org/apache/camel/scala/RichMessage.scala
@@ -16,6 +16,7 @@
  */
 package org.apache.camel.scala
 
+import org.apache.camel.Attachment
 import org.apache.camel.Message
 import javax.activation.DataHandler
 import java.util
@@ -27,6 +28,8 @@ class RichMessage(val message: Message) extends Message {
 
   def addAttachment(id: String, content: DataHandler) = 
message.addAttachment(id, content)
 
+  def addAttachmentObject(id: String, content: Attachment) = 
message.addAttachmentObject(id, content)
+
   def copy = new RichMessage(message.copy)
 
   def copyAttachments(other: Message) = message.copyAttachments(other)
@@ -38,10 +41,14 @@ class RichMessage(val message: Message) extends Message {
 
   def getAttachment(id: String) = message.getAttachment(id)
 
+  def getAttachmentObject(id: String) = message.getAttachmentObject(id)
+
   def getAttachmentNames = message.getAttachmentNames
 
   def getAttachments = message.getAttachments
 
+  def getAttachmentObjects = message.getAttachmentObjects
+
   def getBody = message.getBody
 
   def getBody[T](bodyType: Class[T]) = message.getBody(bodyType)
@@ -80,6 +87,8 @@ class RichMessage(val message: Message) extends Message {
 
   def setAttachments(attachments: util.Map[String, DataHandler]) = 
message.setAttachments(attachments)
 
+  def setAttachmentObjects(attachments: util.Map[String, Attachment]) = 
message.setAttachmentObjects(attachments)
+
   def setBody(body: Any) = message.setBody(body)
 
   def setBody[T](body: Any, bodyType: Class[T]) = message.setBody(body, 
bodyType)

http://git-wip-us.apache.org/repos/asf/camel/blob/50d6d4fb/components/camel-scala/src/test/scala/org/apache/camel/scala/dsl/PipelineTest.scala
----------------------------------------------------------------------
diff --git 
a/components/camel-scala/src/test/scala/org/apache/camel/scala/dsl/PipelineTest.scala
 
b/components/camel-scala/src/test/scala/org/apache/camel/scala/dsl/PipelineTest.scala
index c067b92..2597d39 100644
--- 
a/components/camel-scala/src/test/scala/org/apache/camel/scala/dsl/PipelineTest.scala
+++ 
b/components/camel-scala/src/test/scala/org/apache/camel/scala/dsl/PipelineTest.scala
@@ -38,6 +38,7 @@ class PipelineTest extends ScalaTestSupport {
 
     out.setHeader("test", "testValue")
     out.addAttachment("test1.xml", new DataHandler(new 
FileDataSource("pom.xml")))
+    out.getAttachmentObject("test1.xml").addHeader("attachmentHeader", 
"testvalue")
   }
 
   val removeHeaderAndAttachment = (exchange: Exchange) => {
@@ -45,6 +46,7 @@ class PipelineTest extends ScalaTestSupport {
     out.copyFrom(exchange.getIn)
 
     assertNotNull("The test attachment should not be null", 
out.getAttachment("test1.xml"))
+    assertNotNull("The test attachement header should not be null", 
out.getAttachmentObject("test1.xml").getHeader("attachmentHeader"))
     assertNotNull("The test header should not be null", out.getHeader("test"))
     out.removeAttachment("test1.xml")
     out.removeHeader("test") : Unit

http://git-wip-us.apache.org/repos/asf/camel/blob/50d6d4fb/components/camel-servlet/src/main/java/org/apache/camel/component/servlet/AttachmentHttpBinding.java
----------------------------------------------------------------------
diff --git 
a/components/camel-servlet/src/main/java/org/apache/camel/component/servlet/AttachmentHttpBinding.java
 
b/components/camel-servlet/src/main/java/org/apache/camel/component/servlet/AttachmentHttpBinding.java
index 084e1a3..d84a271 100644
--- 
a/components/camel-servlet/src/main/java/org/apache/camel/component/servlet/AttachmentHttpBinding.java
+++ 
b/components/camel-servlet/src/main/java/org/apache/camel/component/servlet/AttachmentHttpBinding.java
@@ -20,14 +20,15 @@ import java.io.IOException;
 import java.io.InputStream;
 import java.io.OutputStream;
 import java.util.Collection;
-import javax.activation.DataHandler;
 import javax.activation.DataSource;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.Part;
 
+import org.apache.camel.Attachment;
 import org.apache.camel.RuntimeCamelException;
 import org.apache.camel.http.common.DefaultHttpBinding;
 import org.apache.camel.http.common.HttpMessage;
+import org.apache.camel.impl.DefaultAttachment;
 
 /**
  * To handle attachments with Servlet.
@@ -45,7 +46,13 @@ final class AttachmentHttpBinding extends DefaultHttpBinding 
{
             Collection<Part> parts = request.getParts();
             for (Part part : parts) {
                 DataSource ds = new PartDataSource(part);
-                message.addAttachment(part.getName(), new DataHandler(ds));
+                Attachment attachment = new DefaultAttachment(ds);
+                for (String headerName : part.getHeaderNames()) {
+                    for (String headerValue : part.getHeaders(headerName)) {
+                        attachment.addHeader(headerName, headerValue);
+                    }
+                }
+                message.addAttachmentObject(part.getName(), attachment);
             }
         } catch (Exception e) {
             throw new RuntimeCamelException("Cannot populate attachments", e);

http://git-wip-us.apache.org/repos/asf/camel/blob/50d6d4fb/components/camel-sjms/src/main/java/org/apache/camel/component/sjms/SjmsMessage.java
----------------------------------------------------------------------
diff --git 
a/components/camel-sjms/src/main/java/org/apache/camel/component/sjms/SjmsMessage.java
 
b/components/camel-sjms/src/main/java/org/apache/camel/component/sjms/SjmsMessage.java
index 92f8531..907985e 100644
--- 
a/components/camel-sjms/src/main/java/org/apache/camel/component/sjms/SjmsMessage.java
+++ 
b/components/camel-sjms/src/main/java/org/apache/camel/component/sjms/SjmsMessage.java
@@ -99,7 +99,7 @@ public class SjmsMessage extends DefaultMessage {
 
         getAttachments().clear();
         if (that.hasAttachments()) {
-            getAttachments().putAll(that.getAttachments());
+            getAttachmentObjects().putAll(that.getAttachmentObjects());
         }
     }
 

Reply via email to