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()); } }