This is an automated email from the ASF dual-hosted git repository. davsclaus pushed a commit to branch CAMEL-13678 in repository https://gitbox.apache.org/repos/asf/camel.git
commit 381624851961237bc981a7704c52c63af43b63d4 Author: Claus Ibsen <claus.ib...@gmail.com> AuthorDate: Mon Jul 8 09:12:19 2019 +0200 CAMEL-13678: Move attachments out of camel-core into camel-attachments. --- bom/camel-bom/pom.xml | 5 ++ .../camel/component/chunk/ChunkEndpoint.java | 1 - components/camel-cxf/pom.xml | 4 + .../camel/component/cxf/DefaultCxfBinding.java | 60 +++++++------- .../component/cxf/jaxrs/SimpleCxfRsBinding.java | 7 +- .../camel/component/cxf/DefaultCxfBindingTest.java | 13 ++-- .../CxfRsConsumerSimpleBindingTest.java | 9 ++- .../cxf/mtom/CxfJavaMtomProducerPayloadTest.java | 3 +- .../cxf/mtom/CxfMtomConsumerPayloadModeTest.java | 13 ++-- .../component/cxf/mtom/CxfMtomConsumerTest.java | 3 +- .../CxfMtomDisabledConsumerPayloadModeTest.java | 9 ++- .../CxfMtomDisabledProducerPayloadModeTest.java | 9 ++- .../cxf/mtom/CxfMtomPOJOProducerTest.java | 3 +- .../cxf/mtom/CxfMtomProducerPayloadModeTest.java | 9 ++- .../component/freemarker/FreemarkerEndpoint.java | 1 - .../apache/camel/component/gora/GoraProducer.java | 3 +- components/camel-http-common/pom.xml | 11 ++- .../camel/http/common/DefaultHttpBinding.java | 4 +- .../component/jetty9/AttachmentHttpBinding.java | 16 ++-- .../jetty/HttpBridgeMultipartRouteTest.java | 3 +- .../component/jetty/MultiPartFormOkHttpTest.java | 8 +- .../camel/component/jetty/MultiPartFormTest.java | 3 +- .../jetty/MultiPartFormWithCustomFilterTest.java | 6 +- .../org/apache/camel/component/jms/JmsMessage.java | 5 -- .../apache/camel/component/jolt/JoltEndpoint.java | 1 - .../apache/camel/component/ldap/LdapProducer.java | 1 - components/camel-mail/pom.xml | 4 + .../apache/camel/component/mail/MailBinding.java | 13 ++-- .../apache/camel/component/mail/MailConsumer.java | 1 - .../apache/camel/component/mail/MailMessage.java | 23 ------ .../component/mail/SplitAttachmentsExpression.java | 12 +-- .../mime/multipart/MimeMultipartDataFormat.java | 49 ++++++------ .../mail/MailAttachmentDuplicateNamesTest.java | 7 +- .../mail/MailAttachmentRedeliveryTest.java | 9 ++- .../camel/component/mail/MailAttachmentTest.java | 11 +-- .../mail/MailAttachmentsUmlautIssueTest.java | 7 +- .../mail/MailBindingAttachmentFileTest.java | 3 +- .../mail/MailContentTypeResolverTest.java | 7 +- .../component/mail/MailHtmlAttachmentTest.java | 7 +- .../apache/camel/component/mail/MailRouteTest.java | 3 +- .../component/mail/MailSplitAttachmentsTest.java | 11 +-- .../camel/component/mail/MailSubjectTest.java | 3 +- .../component/mail/MimeMessageConsumeTest.java | 7 +- .../mail/MimeMultipartAlternativeTest.java | 5 +- ...MultipartAlternativeWithLongerFilenameTest.java | 5 +- .../mail/NestedMimeMessageConsumeTest.java | 7 +- .../mail/SpringMailSplitAttachmentsTest.java | 11 +-- .../multipart/MimeMultipartDataFormatTest.java | 37 +++++---- .../component/servlet/AttachmentHttpBinding.java | 8 +- .../apache/camel/component/sql/SqlProducer.java | 3 - .../component/sql/SqlProducerOutputAttachment.java | 91 ---------------------- .../apache/camel/component/ssh/SshProducer.java | 3 +- .../undertow/DefaultUndertowHttpBinding.java | 9 ++- .../component/undertow/MultiPartFormTest.java | 5 +- parent/pom.xml | 5 ++ 55 files changed, 260 insertions(+), 316 deletions(-) diff --git a/bom/camel-bom/pom.xml b/bom/camel-bom/pom.xml index 22c93e9..494b298 100644 --- a/bom/camel-bom/pom.xml +++ b/bom/camel-bom/pom.xml @@ -173,6 +173,11 @@ </dependency> <dependency> <groupId>org.apache.camel</groupId> + <artifactId>camel-attachments</artifactId> + <version>${project.version}</version> + </dependency> + <dependency> + <groupId>org.apache.camel</groupId> <artifactId>camel-avro</artifactId> <version>${project.version}</version> </dependency> diff --git a/components/camel-chunk/src/main/java/org/apache/camel/component/chunk/ChunkEndpoint.java b/components/camel-chunk/src/main/java/org/apache/camel/component/chunk/ChunkEndpoint.java index 52d618d..9773a80 100644 --- a/components/camel-chunk/src/main/java/org/apache/camel/component/chunk/ChunkEndpoint.java +++ b/components/camel-chunk/src/main/java/org/apache/camel/component/chunk/ChunkEndpoint.java @@ -114,7 +114,6 @@ public class ChunkEndpoint extends ResourceEndpoint { Message out = exchange.getOut(); out.setBody(newChunk.toString()); out.setHeaders(exchange.getIn().getHeaders()); - out.setAttachments(exchange.getIn().getAttachments()); } else { exchange.getIn().removeHeader(ChunkConstants.CHUNK_RESOURCE_URI); ChunkEndpoint newEndpoint = getCamelContext().getEndpoint(CHUNK_ENDPOINT_URI_PREFIX + newResourceUri, ChunkEndpoint.class); diff --git a/components/camel-cxf/pom.xml b/components/camel-cxf/pom.xml index f1a083b..e636a86 100644 --- a/components/camel-cxf/pom.xml +++ b/components/camel-cxf/pom.xml @@ -77,6 +77,10 @@ </dependency> <dependency> <groupId>org.apache.camel</groupId> + <artifactId>camel-attachments</artifactId> + </dependency> + <dependency> + <groupId>org.apache.camel</groupId> <artifactId>camel-spring</artifactId> </dependency> <dependency> diff --git a/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/DefaultCxfBinding.java b/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/DefaultCxfBinding.java index b6b9348..2c1e632 100644 --- a/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/DefaultCxfBinding.java +++ b/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/DefaultCxfBinding.java @@ -45,12 +45,13 @@ import org.w3c.dom.Node; import org.apache.camel.Exchange; import org.apache.camel.ExchangePattern; +import org.apache.camel.attachment.AttachmentMessage; +import org.apache.camel.attachment.DefaultAttachment; import org.apache.camel.component.cxf.common.header.CxfHeaderHelper; import org.apache.camel.component.cxf.common.message.CxfConstants; import org.apache.camel.component.cxf.util.ReaderInputStream; import org.apache.camel.spi.HeaderFilterStrategy; import org.apache.camel.spi.HeaderFilterStrategyAware; -import org.apache.camel.support.DefaultAttachment; import org.apache.camel.support.ExchangeHelper; import org.apache.camel.util.ObjectHelper; import org.apache.cxf.attachment.AttachmentImpl; @@ -132,18 +133,20 @@ public class DefaultCxfBinding implements CxfBinding, HeaderFilterStrategyAware // we should avoid adding the attachments if the data format is CXFMESSAGE, as the message stream // already has the attachment information if (!DataFormat.CXF_MESSAGE.equals(dataFormat)) { - for (Map.Entry<String, org.apache.camel.Attachment> entry : camelExchange.getIn().getAttachmentObjects().entrySet()) { - if (attachments == null) { - attachments = new HashSet<>(); - } - AttachmentImpl attachment = new AttachmentImpl(entry.getKey()); - org.apache.camel.Attachment camelAttachment = entry.getValue(); - attachment.setDataHandler(camelAttachment.getDataHandler()); - for (String name : camelAttachment.getHeaderNames()) { - attachment.setHeader(name, camelAttachment.getHeader(name)); + if (camelExchange.getIn(AttachmentMessage.class).hasAttachments()) { + for (Map.Entry<String, org.apache.camel.attachment.Attachment> entry : camelExchange.getIn(AttachmentMessage.class).getAttachmentObjects().entrySet()) { + if (attachments == null) { + attachments = new HashSet<>(); + } + AttachmentImpl attachment = new AttachmentImpl(entry.getKey()); + org.apache.camel.attachment.Attachment camelAttachment = entry.getValue(); + attachment.setDataHandler(camelAttachment.getDataHandler()); + for (String name : camelAttachment.getHeaderNames()) { + attachment.setHeader(name, camelAttachment.getHeader(name)); + } + attachment.setXOP(isXop); + attachments.add(attachment); } - attachment.setXOP(isXop); - attachments.add(attachment); } } @@ -193,7 +196,7 @@ public class DefaultCxfBinding implements CxfBinding, HeaderFilterStrategyAware if (cxfMessage.getAttachments() != null) { // propagate attachments for (Attachment attachment : cxfMessage.getAttachments()) { - camelExchange.getOut().addAttachmentObject(attachment.getId(), createCamelAttachment(attachment)); + camelExchange.getOut(AttachmentMessage.class).addAttachmentObject(attachment.getId(), createCamelAttachment(attachment)); } } } @@ -308,7 +311,7 @@ public class DefaultCxfBinding implements CxfBinding, HeaderFilterStrategyAware if (cxfMessage.getAttachments() != null && !camelExchange.getProperty(CxfConstants.DATA_FORMAT_PROPERTY, DataFormat.class).equals(DataFormat.POJO)) { for (Attachment attachment : cxfMessage.getAttachments()) { - camelExchange.getIn().addAttachmentObject(attachment.getId(), createCamelAttachment(attachment)); + camelExchange.getIn(AttachmentMessage.class).addAttachmentObject(attachment.getId(), createCamelAttachment(attachment)); } } } @@ -408,28 +411,27 @@ public class DefaultCxfBinding implements CxfBinding, HeaderFilterStrategyAware } // propagate attachments - Set<Attachment> attachments = null; boolean isXop = Boolean.valueOf(camelExchange.getProperty(Message.MTOM_ENABLED, String.class)); - for (Map.Entry<String, org.apache.camel.Attachment> entry : camelExchange.getOut().getAttachmentObjects().entrySet()) { - if (attachments == null) { - attachments = new HashSet<>(); - } - AttachmentImpl attachment = new AttachmentImpl(entry.getKey()); - org.apache.camel.Attachment camelAttachment = entry.getValue(); - attachment.setDataHandler(camelAttachment.getDataHandler()); - for (String name : camelAttachment.getHeaderNames()) { - attachment.setHeader(name, camelAttachment.getHeader(name)); + if (camelExchange.getOut(AttachmentMessage.class).hasAttachments()) { + for (Map.Entry<String, org.apache.camel.attachment.Attachment> entry : camelExchange.getOut(AttachmentMessage.class).getAttachmentObjects().entrySet()) { + if (attachments == null) { + attachments = new HashSet<>(); + } + AttachmentImpl attachment = new AttachmentImpl(entry.getKey()); + org.apache.camel.attachment.Attachment camelAttachment = entry.getValue(); + attachment.setDataHandler(camelAttachment.getDataHandler()); + for (String name : camelAttachment.getHeaderNames()) { + attachment.setHeader(name, camelAttachment.getHeader(name)); + } + attachment.setXOP(isXop); + attachments.add(attachment); } - attachment.setXOP(isXop); - attachments.add(attachment); } - if (attachments != null) { outMessage.setAttachments(attachments); } - - + BindingOperationInfo boi = cxfExchange.get(BindingOperationInfo.class); if (boi != null) { cxfExchange.put(BindingMessageInfo.class, boi.getOutput()); diff --git a/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/jaxrs/SimpleCxfRsBinding.java b/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/jaxrs/SimpleCxfRsBinding.java index ee02d5a..f582c7a 100644 --- a/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/jaxrs/SimpleCxfRsBinding.java +++ b/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/jaxrs/SimpleCxfRsBinding.java @@ -43,8 +43,9 @@ import javax.ws.rs.core.Response.ResponseBuilder; import javax.ws.rs.core.Response.Status; import org.apache.camel.Message; +import org.apache.camel.attachment.AttachmentMessage; +import org.apache.camel.attachment.DefaultAttachment; import org.apache.camel.spi.HeaderFilterStrategy; -import org.apache.camel.support.DefaultAttachment; import org.apache.cxf.jaxrs.ext.multipart.Attachment; import org.apache.cxf.jaxrs.ext.multipart.InputStreamDataSource; import org.apache.cxf.jaxrs.ext.multipart.Multipart; @@ -280,7 +281,7 @@ public class SimpleCxfRsBinding extends DefaultCxfRsBinding { } private void transferBinaryMultipartParameter(Object toMap, String parameterName, String multipartType, Message in) { - org.apache.camel.Attachment dh = null; + org.apache.camel.attachment.Attachment dh = null; if (toMap instanceof Attachment) { dh = createCamelAttachment((Attachment) toMap); } else if (toMap instanceof DataSource) { @@ -291,7 +292,7 @@ public class SimpleCxfRsBinding extends DefaultCxfRsBinding { dh = new DefaultAttachment(new InputStreamDataSource((InputStream) toMap, multipartType == null ? "application/octet-stream" : multipartType)); } if (dh != null) { - in.addAttachmentObject(parameterName, dh); + in.getExchange().getMessage(AttachmentMessage.class).addAttachmentObject(parameterName, dh); } } diff --git a/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/DefaultCxfBindingTest.java b/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/DefaultCxfBindingTest.java index b2b86dd..47addfb 100644 --- a/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/DefaultCxfBindingTest.java +++ b/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/DefaultCxfBindingTest.java @@ -29,6 +29,7 @@ import javax.activation.FileDataSource; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; +import org.apache.camel.attachment.AttachmentMessage; import org.w3c.dom.Document; import org.w3c.dom.Element; import org.w3c.dom.Node; @@ -156,8 +157,8 @@ public class DefaultCxfBindingTest extends Assert { exchange.getIn().setHeader("soapAction", "urn:hello:world"); exchange.getIn().setHeader("MyFruitHeader", "peach"); exchange.getIn().setHeader("MyBrewHeader", Arrays.asList("cappuccino", "espresso")); - exchange.getIn().addAttachment("att-1", new DataHandler(new FileDataSource("pom.xml"))); - exchange.getIn().getAttachmentObject("att-1").setHeader("attachment-header", "value 1"); + exchange.getIn(AttachmentMessage.class).addAttachment("att-1", new DataHandler(new FileDataSource("pom.xml"))); + exchange.getIn(AttachmentMessage.class).getAttachmentObject("att-1").setHeader("attachment-header", "value 1"); cxfBinding.populateCxfRequestFromExchange(cxfExchange, exchange, requestContext); @@ -246,7 +247,7 @@ public class DefaultCxfBindingTest extends Assert { assertNotNull(camelHeaders); assertEquals(responseContext, camelHeaders.get(Client.RESPONSE_CONTEXT)); - Map<String, org.apache.camel.Attachment> camelAttachments = exchange.getOut().getAttachmentObjects(); + Map<String, org.apache.camel.attachment.Attachment> camelAttachments = exchange.getOut(AttachmentMessage.class).getAttachmentObjects(); assertNotNull(camelAttachments); assertNotNull(camelAttachments.get("att-1")); assertEquals("value 1", camelAttachments.get("att-1").getHeader("additional-header")); @@ -286,8 +287,8 @@ public class DefaultCxfBindingTest extends Assert { exchange.getOut().setHeader("soapAction", "urn:hello:world"); exchange.getOut().setHeader("MyFruitHeader", "peach"); - exchange.getOut().addAttachment("att-1", new DataHandler(new FileDataSource("pom.xml"))); - exchange.getOut().getAttachmentObject("att-1").setHeader("attachment-header", "value 1"); + exchange.getOut(AttachmentMessage.class).addAttachment("att-1", new DataHandler(new FileDataSource("pom.xml"))); + exchange.getOut(AttachmentMessage.class).getAttachmentObject("att-1").setHeader("attachment-header", "value 1"); Endpoint endpoint = mock(Endpoint.class); Binding binding = mock(Binding.class); @@ -355,7 +356,7 @@ public class DefaultCxfBindingTest extends Assert { assertEquals("peach", camelHeaders.get("MyFruitHeader")); assertEquals(Arrays.asList("cappuccino", "espresso"), camelHeaders.get("MyBrewHeader")); - Map<String, org.apache.camel.Attachment> camelAttachments = exchange.getIn().getAttachmentObjects(); + Map<String, org.apache.camel.attachment.Attachment> camelAttachments = exchange.getIn(AttachmentMessage.class).getAttachmentObjects(); assertNotNull(camelAttachments); assertNotNull(camelAttachments.get("att-1")); assertEquals("value 1", camelAttachments.get("att-1").getHeader("attachment-header")); diff --git a/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/jaxrs/simplebinding/CxfRsConsumerSimpleBindingTest.java b/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/jaxrs/simplebinding/CxfRsConsumerSimpleBindingTest.java index ffe8127..0b521d7 100644 --- a/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/jaxrs/simplebinding/CxfRsConsumerSimpleBindingTest.java +++ b/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/jaxrs/simplebinding/CxfRsConsumerSimpleBindingTest.java @@ -27,6 +27,7 @@ import javax.xml.bind.JAXBContext; import org.apache.camel.Exchange; import org.apache.camel.Processor; +import org.apache.camel.attachment.AttachmentMessage; import org.apache.camel.builder.RouteBuilder; import org.apache.camel.component.cxf.CXFTestSupport; import org.apache.camel.component.cxf.jaxrs.simplebinding.testbean.Customer; @@ -175,8 +176,8 @@ public class CxfRsConsumerSimpleBindingTest extends CamelTestSupport { public void process(Exchange exchange) throws Exception { assertEquals("abcd", exchange.getIn().getHeader("query")); assertEquals("123", exchange.getIn().getHeader("id")); - assertNotNull(exchange.getIn().getAttachment("part1")); - assertNotNull(exchange.getIn().getAttachment("part2")); + assertNotNull(exchange.getIn(AttachmentMessage.class).getAttachment("part1")); + assertNotNull(exchange.getIn(AttachmentMessage.class).getAttachment("part2")); assertNull(exchange.getIn().getHeader("part1")); assertNull(exchange.getIn().getHeader("part2")); assertEquals(Customer.class, exchange.getIn().getHeader("body").getClass()); @@ -186,8 +187,8 @@ public class CxfRsConsumerSimpleBindingTest extends CamelTestSupport { from("direct:multipartPostWithoutParameters").process(new Processor() { public void process(Exchange exchange) throws Exception { - assertNotNull(exchange.getIn().getAttachment("part1")); - assertNotNull(exchange.getIn().getAttachment("part2")); + assertNotNull(exchange.getIn(AttachmentMessage.class).getAttachment("part1")); + assertNotNull(exchange.getIn(AttachmentMessage.class).getAttachment("part2")); assertNull(exchange.getIn().getHeader("part1")); assertNull(exchange.getIn().getHeader("part2")); assertEquals(Customer.class, exchange.getIn().getHeader("body").getClass()); diff --git a/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/mtom/CxfJavaMtomProducerPayloadTest.java b/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/mtom/CxfJavaMtomProducerPayloadTest.java index 15f4016..24a7902 100644 --- a/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/mtom/CxfJavaMtomProducerPayloadTest.java +++ b/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/mtom/CxfJavaMtomProducerPayloadTest.java @@ -22,6 +22,7 @@ import javax.xml.ws.Holder; import org.apache.camel.Exchange; import org.apache.camel.Processor; +import org.apache.camel.attachment.AttachmentMessage; import org.junit.Test; public class CxfJavaMtomProducerPayloadTest extends CxfMtomConsumerTest { @@ -50,7 +51,7 @@ public class CxfJavaMtomProducerPayloadTest extends CxfMtomConsumerTest { }); // Make sure we don't put the attachement into out message - assertEquals("The attachement size should be 0 ", 0, exchange.getOut().getAttachments().size()); + assertEquals("The attachement size should be 0 ", 0, exchange.getOut(AttachmentMessage.class).getAttachments().size()); Object[] result = exchange.getOut().getBody(Object[].class); diff --git a/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/mtom/CxfMtomConsumerPayloadModeTest.java b/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/mtom/CxfMtomConsumerPayloadModeTest.java index ad538cf..360bd3a 100644 --- a/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/mtom/CxfMtomConsumerPayloadModeTest.java +++ b/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/mtom/CxfMtomConsumerPayloadModeTest.java @@ -28,6 +28,7 @@ import javax.xml.transform.Source; import javax.xml.transform.dom.DOMSource; import javax.xml.xpath.XPathConstants; +import org.apache.camel.attachment.AttachmentMessage; import org.w3c.dom.Element; import org.apache.camel.CamelContext; @@ -75,10 +76,10 @@ public class CxfMtomConsumerPayloadModeTest extends AbstractJUnit4SpringContextT CxfPayload<SoapHeader> body = new CxfPayload<>(new ArrayList<SoapHeader>(), elements, null); exchange.getIn().setBody(body); - exchange.getIn().addAttachment(MtomTestHelper.REQ_PHOTO_CID, + exchange.getIn(AttachmentMessage.class).addAttachment(MtomTestHelper.REQ_PHOTO_CID, new DataHandler(new ByteArrayDataSource(MtomTestHelper.REQ_PHOTO_DATA, "application/octet-stream"))); - exchange.getIn().addAttachment(MtomTestHelper.REQ_IMAGE_CID, + exchange.getIn(AttachmentMessage.class).addAttachment(MtomTestHelper.REQ_IMAGE_CID, new DataHandler(new ByteArrayDataSource(MtomTestHelper.requestJpeg, "image/jpeg"))); } }); @@ -110,11 +111,11 @@ public class CxfMtomConsumerPayloadModeTest extends AbstractJUnit4SpringContextT String imageId = ele.getAttribute("href").substring(4); // skip "cid:" assertEquals(MtomTestHelper.REQ_IMAGE_CID, imageId); - DataHandler dr = exchange.getIn().getAttachment(photoId); + DataHandler dr = exchange.getIn(AttachmentMessage.class).getAttachment(photoId); assertEquals("application/octet-stream", dr.getContentType()); MtomTestHelper.assertEquals(MtomTestHelper.REQ_PHOTO_DATA, IOUtils.readBytesFromStream(dr.getInputStream())); - dr = exchange.getIn().getAttachment(imageId); + dr = exchange.getIn(AttachmentMessage.class).getAttachment(imageId); assertEquals("image/jpeg", dr.getContentType()); MtomTestHelper.assertEquals(MtomTestHelper.requestJpeg, IOUtils.readBytesFromStream(dr.getInputStream())); @@ -124,10 +125,10 @@ public class CxfMtomConsumerPayloadModeTest extends AbstractJUnit4SpringContextT CxfPayload<SoapHeader> sbody = new CxfPayload<>(new ArrayList<SoapHeader>(), elements, null); exchange.getOut().setBody(sbody); - exchange.getOut().addAttachment(MtomTestHelper.RESP_PHOTO_CID, + exchange.getOut(AttachmentMessage.class).addAttachment(MtomTestHelper.RESP_PHOTO_CID, new DataHandler(new ByteArrayDataSource(MtomTestHelper.RESP_PHOTO_DATA, "application/octet-stream"))); - exchange.getOut().addAttachment(MtomTestHelper.RESP_IMAGE_CID, + exchange.getOut(AttachmentMessage.class).addAttachment(MtomTestHelper.RESP_IMAGE_CID, new DataHandler(new ByteArrayDataSource(MtomTestHelper.responseJpeg, "image/jpeg"))); } diff --git a/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/mtom/CxfMtomConsumerTest.java b/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/mtom/CxfMtomConsumerTest.java index 0a84fcf..df22843 100644 --- a/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/mtom/CxfMtomConsumerTest.java +++ b/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/mtom/CxfMtomConsumerTest.java @@ -29,6 +29,7 @@ import javax.xml.ws.soap.SOAPBinding; import org.apache.camel.Exchange; import org.apache.camel.Message; import org.apache.camel.Processor; +import org.apache.camel.attachment.AttachmentMessage; import org.apache.camel.builder.RouteBuilder; import org.apache.camel.component.cxf.CXFTestSupport; import org.apache.camel.cxf.mtom_feature.Hello; @@ -53,7 +54,7 @@ public class CxfMtomConsumerTest extends CamelTestSupport { from(MTOM_ENDPOINT_URI).process(new Processor() { @SuppressWarnings("unchecked") public void process(final Exchange exchange) throws Exception { - Message in = exchange.getIn(); + AttachmentMessage in = exchange.getIn(AttachmentMessage.class); assertEquals("We should not get any attachements here.", 0, in.getAttachments().size()); assertEquals("Get a wrong Content-Type header", "application/xop+xml", in.getHeader("Content-Type")); // Get the parameter list diff --git a/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/mtom/CxfMtomDisabledConsumerPayloadModeTest.java b/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/mtom/CxfMtomDisabledConsumerPayloadModeTest.java index eef3b39..f872e05 100644 --- a/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/mtom/CxfMtomDisabledConsumerPayloadModeTest.java +++ b/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/mtom/CxfMtomDisabledConsumerPayloadModeTest.java @@ -27,6 +27,7 @@ import javax.xml.transform.dom.DOMSource; import org.apache.camel.Exchange; import org.apache.camel.Processor; +import org.apache.camel.attachment.AttachmentMessage; import org.apache.camel.component.cxf.CXFTestSupport; import org.apache.camel.component.cxf.CxfPayload; import org.apache.cxf.binding.soap.SoapHeader; @@ -57,11 +58,11 @@ public class CxfMtomDisabledConsumerPayloadModeTest extends CxfMtomConsumerPaylo // verify request Assert.assertEquals(1, in.getBody().size()); - DataHandler dr = exchange.getIn().getAttachment(MtomTestHelper.REQ_PHOTO_CID); + DataHandler dr = exchange.getIn(AttachmentMessage.class).getAttachment(MtomTestHelper.REQ_PHOTO_CID); Assert.assertEquals("application/octet-stream", dr.getContentType()); MtomTestHelper.assertEquals(MtomTestHelper.REQ_PHOTO_DATA, IOUtils.readBytesFromStream(dr.getInputStream())); - dr = exchange.getIn().getAttachment(MtomTestHelper.REQ_IMAGE_CID); + dr = exchange.getIn(AttachmentMessage.class).getAttachment(MtomTestHelper.REQ_IMAGE_CID); Assert.assertEquals("image/jpeg", dr.getContentType()); MtomTestHelper.assertEquals(MtomTestHelper.requestJpeg, IOUtils.readBytesFromStream(dr.getInputStream())); @@ -71,10 +72,10 @@ public class CxfMtomDisabledConsumerPayloadModeTest extends CxfMtomConsumerPaylo CxfPayload<SoapHeader> body = new CxfPayload<>(new ArrayList<SoapHeader>(), elements, null); exchange.getOut().setBody(body); - exchange.getOut().addAttachment(MtomTestHelper.RESP_PHOTO_CID, + exchange.getOut(AttachmentMessage.class).addAttachment(MtomTestHelper.RESP_PHOTO_CID, new DataHandler(new ByteArrayDataSource(MtomTestHelper.RESP_PHOTO_DATA, "application/octet-stream"))); - exchange.getOut().addAttachment(MtomTestHelper.RESP_IMAGE_CID, + exchange.getOut(AttachmentMessage.class).addAttachment(MtomTestHelper.RESP_IMAGE_CID, new DataHandler(new ByteArrayDataSource(MtomTestHelper.responseJpeg, "image/jpeg"))); } diff --git a/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/mtom/CxfMtomDisabledProducerPayloadModeTest.java b/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/mtom/CxfMtomDisabledProducerPayloadModeTest.java index ea5b945..d2671e5 100644 --- a/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/mtom/CxfMtomDisabledProducerPayloadModeTest.java +++ b/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/mtom/CxfMtomDisabledProducerPayloadModeTest.java @@ -39,6 +39,7 @@ import javax.xml.ws.handler.MessageContext; import org.apache.camel.Exchange; import org.apache.camel.ExchangePattern; import org.apache.camel.Processor; +import org.apache.camel.attachment.AttachmentMessage; import org.apache.camel.component.cxf.CxfPayload; import org.apache.camel.cxf.mtom_feature.Hello; import org.apache.cxf.attachment.AttachmentDataSource; @@ -86,10 +87,10 @@ public class CxfMtomDisabledProducerPayloadModeTest extends CxfMtomProducerPaylo CxfPayload<SoapHeader> body = new CxfPayload<>(new ArrayList<SoapHeader>(), elements, null); exchange.getIn().setBody(body); - exchange.getIn().addAttachment(MtomTestHelper.REQ_PHOTO_CID, + exchange.getIn(AttachmentMessage.class).addAttachment(MtomTestHelper.REQ_PHOTO_CID, new DataHandler(new ByteArrayDataSource(MtomTestHelper.REQ_PHOTO_DATA, "application/octet-stream"))); - exchange.getIn().addAttachment(MtomTestHelper.REQ_IMAGE_CID, + exchange.getIn(AttachmentMessage.class).addAttachment(MtomTestHelper.REQ_IMAGE_CID, new DataHandler(new ByteArrayDataSource(MtomTestHelper.requestJpeg, "image/jpeg"))); } @@ -102,11 +103,11 @@ public class CxfMtomDisabledProducerPayloadModeTest extends CxfMtomProducerPaylo Assert.assertEquals(1, out.getBody().size()); - DataHandler dr = exchange.getOut().getAttachment(MtomTestHelper.RESP_PHOTO_CID); + DataHandler dr = exchange.getOut(AttachmentMessage.class).getAttachment(MtomTestHelper.RESP_PHOTO_CID); Assert.assertEquals("application/octet-stream", dr.getContentType()); MtomTestHelper.assertEquals(MtomTestHelper.RESP_PHOTO_DATA, IOUtils.readBytesFromStream(dr.getInputStream())); - dr = exchange.getOut().getAttachment(MtomTestHelper.RESP_IMAGE_CID); + dr = exchange.getOut(AttachmentMessage.class).getAttachment(MtomTestHelper.RESP_IMAGE_CID); Assert.assertEquals("image/jpeg", dr.getContentType()); BufferedImage image = ImageIO.read(dr.getInputStream()); diff --git a/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/mtom/CxfMtomPOJOProducerTest.java b/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/mtom/CxfMtomPOJOProducerTest.java index 32e319d..a918eb0 100644 --- a/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/mtom/CxfMtomPOJOProducerTest.java +++ b/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/mtom/CxfMtomPOJOProducerTest.java @@ -27,6 +27,7 @@ import javax.xml.ws.soap.SOAPBinding; import org.apache.camel.CamelContext; import org.apache.camel.Exchange; import org.apache.camel.Processor; +import org.apache.camel.attachment.AttachmentMessage; import org.apache.camel.component.cxf.CXFTestSupport; import org.junit.After; import org.junit.Assert; @@ -84,7 +85,7 @@ public class CxfMtomPOJOProducerTest extends AbstractJUnit4SpringContextTests { }); - assertEquals("The attachement size should be 2 ", 2, exchange.getOut().getAttachments().size()); + assertEquals("The attachement size should be 2 ", 2, exchange.getOut(AttachmentMessage.class).getAttachments().size()); Object[] result = exchange.getOut().getBody(Object[].class); Holder<byte[]> photo1 = (Holder<byte[]>) result[1]; diff --git a/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/mtom/CxfMtomProducerPayloadModeTest.java b/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/mtom/CxfMtomProducerPayloadModeTest.java index e75a9f7..0bbe8fc 100644 --- a/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/mtom/CxfMtomProducerPayloadModeTest.java +++ b/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/mtom/CxfMtomProducerPayloadModeTest.java @@ -33,6 +33,7 @@ import javax.xml.ws.Endpoint; import javax.xml.ws.soap.SOAPBinding; import javax.xml.xpath.XPathConstants; +import org.apache.camel.attachment.AttachmentMessage; import org.w3c.dom.Element; import org.apache.camel.CamelContext; @@ -99,10 +100,10 @@ public class CxfMtomProducerPayloadModeTest extends AbstractJUnit4SpringContextT CxfPayload<SoapHeader> body = new CxfPayload<>(new ArrayList<SoapHeader>(), elements, null); exchange.getIn().setBody(body); - exchange.getIn().addAttachment(MtomTestHelper.REQ_PHOTO_CID, + exchange.getIn(AttachmentMessage.class).addAttachment(MtomTestHelper.REQ_PHOTO_CID, new DataHandler(new ByteArrayDataSource(MtomTestHelper.REQ_PHOTO_DATA, "application/octet-stream"))); - exchange.getIn().addAttachment(MtomTestHelper.REQ_IMAGE_CID, + exchange.getIn(AttachmentMessage.class).addAttachment(MtomTestHelper.REQ_IMAGE_CID, new DataHandler(new ByteArrayDataSource(MtomTestHelper.requestJpeg, "image/jpeg"))); } @@ -129,11 +130,11 @@ public class CxfMtomProducerPayloadModeTest extends AbstractJUnit4SpringContextT String imageId = ele.getAttribute("href").substring(4); // skip "cid:" - DataHandler dr = exchange.getOut().getAttachment(decodingReference(photoId)); + DataHandler dr = exchange.getOut(AttachmentMessage.class).getAttachment(decodingReference(photoId)); Assert.assertEquals("application/octet-stream", dr.getContentType()); MtomTestHelper.assertEquals(MtomTestHelper.RESP_PHOTO_DATA, IOUtils.readBytesFromStream(dr.getInputStream())); - dr = exchange.getOut().getAttachment(decodingReference(imageId)); + dr = exchange.getOut(AttachmentMessage.class).getAttachment(decodingReference(imageId)); Assert.assertEquals("image/jpeg", dr.getContentType()); BufferedImage image = ImageIO.read(dr.getInputStream()); diff --git a/components/camel-freemarker/src/main/java/org/apache/camel/component/freemarker/FreemarkerEndpoint.java b/components/camel-freemarker/src/main/java/org/apache/camel/component/freemarker/FreemarkerEndpoint.java index 4fe1013..00541bd 100644 --- a/components/camel-freemarker/src/main/java/org/apache/camel/component/freemarker/FreemarkerEndpoint.java +++ b/components/camel-freemarker/src/main/java/org/apache/camel/component/freemarker/FreemarkerEndpoint.java @@ -157,6 +157,5 @@ public class FreemarkerEndpoint extends ResourceEndpoint { Message out = exchange.getOut(); out.setBody(buffer.toString()); out.setHeaders(exchange.getIn().getHeaders()); - out.setAttachments(exchange.getIn().getAttachments()); } } \ No newline at end of file diff --git a/components/camel-gora/src/main/java/org/apache/camel/component/gora/GoraProducer.java b/components/camel-gora/src/main/java/org/apache/camel/component/gora/GoraProducer.java index 0ff3b2a..2fa389a 100644 --- a/components/camel-gora/src/main/java/org/apache/camel/component/gora/GoraProducer.java +++ b/components/camel-gora/src/main/java/org/apache/camel/component/gora/GoraProducer.java @@ -102,9 +102,8 @@ public class GoraProducer extends DefaultProducer { } exchange.getOut().setBody(result); - // preserve headers and attachments + // preserve headers exchange.getOut().setHeaders(exchange.getIn().getHeaders()); - exchange.getOut().setAttachments(exchange.getIn().getAttachments()); } } diff --git a/components/camel-http-common/pom.xml b/components/camel-http-common/pom.xml index 5336a42..0e08ff4 100644 --- a/components/camel-http-common/pom.xml +++ b/components/camel-http-common/pom.xml @@ -44,9 +44,18 @@ <!-- TODO: requires camel-core due camel.cloud is not in camel-support --> <dependency> <groupId>org.apache.camel</groupId> - <artifactId>camel-core</artifactId> + <artifactId>camel-cloud</artifactId> </dependency> <dependency> + <groupId>org.apache.camel</groupId> + <artifactId>camel-support</artifactId> + </dependency> + <dependency> + <groupId>org.apache.camel</groupId> + <artifactId>camel-attachments</artifactId> + </dependency> + + <dependency> <groupId>javax.servlet</groupId> <artifactId>javax.servlet-api</artifactId> <version>${javax.servlet-api-version}</version> diff --git a/components/camel-http-common/src/main/java/org/apache/camel/http/common/DefaultHttpBinding.java b/components/camel-http-common/src/main/java/org/apache/camel/http/common/DefaultHttpBinding.java index 78efca1..320fd2a 100644 --- a/components/camel-http-common/src/main/java/org/apache/camel/http/common/DefaultHttpBinding.java +++ b/components/camel-http-common/src/main/java/org/apache/camel/http/common/DefaultHttpBinding.java @@ -44,6 +44,7 @@ import org.apache.camel.InvalidPayloadException; import org.apache.camel.Message; import org.apache.camel.RuntimeCamelException; import org.apache.camel.StreamCache; +import org.apache.camel.attachment.AttachmentMessage; import org.apache.camel.converter.stream.CachedOutputStream; import org.apache.camel.spi.HeaderFilterStrategy; import org.apache.camel.support.ExchangeHelper; @@ -316,7 +317,8 @@ public class DefaultHttpBinding implements HttpBinding { } } if (accepted) { - message.addAttachment(fileName, new DataHandler(new CamelFileDataSource((File) object, fileName))); + AttachmentMessage am = message.getExchange().getMessage(AttachmentMessage.class); + am.addAttachment(fileName, new DataHandler(new CamelFileDataSource((File) object, fileName))); } else { LOG.debug("Cannot add file as attachment: {} because the file is not accepted according to fileNameExtWhitelist: {}", fileName, fileNameExtWhitelist); } diff --git a/components/camel-jetty/src/main/java/org/apache/camel/component/jetty9/AttachmentHttpBinding.java b/components/camel-jetty/src/main/java/org/apache/camel/component/jetty9/AttachmentHttpBinding.java index fd5c00a..10ff26a 100644 --- a/components/camel-jetty/src/main/java/org/apache/camel/component/jetty9/AttachmentHttpBinding.java +++ b/components/camel-jetty/src/main/java/org/apache/camel/component/jetty9/AttachmentHttpBinding.java @@ -28,13 +28,14 @@ import javax.activation.DataSource; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.Part; -import org.apache.camel.Attachment; import org.apache.camel.Exchange; import org.apache.camel.RuntimeCamelException; +import org.apache.camel.attachment.Attachment; +import org.apache.camel.attachment.AttachmentMessage; +import org.apache.camel.attachment.DefaultAttachment; import org.apache.camel.http.common.DefaultHttpBinding; import org.apache.camel.http.common.HttpHelper; import org.apache.camel.http.common.HttpMessage; -import org.apache.camel.support.DefaultAttachment; import org.eclipse.jetty.util.MultiPartInputStreamParser; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -66,7 +67,8 @@ final class AttachmentHttpBinding extends DefaultHttpBinding { attachment.addHeader(headerName, headerValue); } } - message.addAttachmentObject(part.getName(), attachment); + AttachmentMessage am = message.getExchange().getMessage(AttachmentMessage.class); + am.addAttachmentObject(part.getName(), attachment); } } catch (Exception e) { throw new RuntimeCamelException("Cannot populate attachments", e); @@ -82,12 +84,14 @@ final class AttachmentHttpBinding extends DefaultHttpBinding { org.eclipse.jetty.server.Request jettyRequest = (org.eclipse.jetty.server.Request)request; jettyRequest.getHttpFields().remove(Exchange.CONTENT_ENCODING); } - + + AttachmentMessage am = message.getExchange().getMessage(AttachmentMessage.class); + Enumeration<?> names = request.getParameterNames(); while (names.hasMoreElements()) { String name = (String)names.nextElement(); - if (message.getAttachment(name) != null) { - DataHandler dh = message.getAttachment(name); + if (am.getAttachment(name) != null) { + DataHandler dh = am.getAttachment(name); Object value = dh; if (dh.getContentType() == null || dh.getContentType().startsWith("text/plain")) { value = request.getParameter(name); diff --git a/components/camel-jetty/src/test/java/org/apache/camel/component/jetty/HttpBridgeMultipartRouteTest.java b/components/camel-jetty/src/test/java/org/apache/camel/component/jetty/HttpBridgeMultipartRouteTest.java index bd69e9c..53d0bd0 100644 --- a/components/camel-jetty/src/test/java/org/apache/camel/component/jetty/HttpBridgeMultipartRouteTest.java +++ b/components/camel-jetty/src/test/java/org/apache/camel/component/jetty/HttpBridgeMultipartRouteTest.java @@ -21,6 +21,7 @@ import java.io.File; import org.apache.camel.Exchange; import org.apache.camel.Message; import org.apache.camel.Processor; +import org.apache.camel.attachment.AttachmentMessage; import org.apache.camel.builder.RouteBuilder; import org.apache.camel.component.http4.HttpEndpoint; import org.apache.camel.support.DefaultHeaderFilterStrategy; @@ -79,7 +80,7 @@ public class HttpBridgeMultipartRouteTest extends BaseJettyTest { Processor serviceProc = new Processor() { public void process(Exchange exchange) throws Exception { - Message in = exchange.getIn(); + AttachmentMessage in = exchange.getIn(AttachmentMessage.class); // put the number of attachments in a response header exchange.getOut().setHeader("numAttachments", in.getAttachments().size()); exchange.getOut().setBody(in.getHeader("body")); diff --git a/components/camel-jetty/src/test/java/org/apache/camel/component/jetty/MultiPartFormOkHttpTest.java b/components/camel-jetty/src/test/java/org/apache/camel/component/jetty/MultiPartFormOkHttpTest.java index 6e05b96..fa2483e 100644 --- a/components/camel-jetty/src/test/java/org/apache/camel/component/jetty/MultiPartFormOkHttpTest.java +++ b/components/camel-jetty/src/test/java/org/apache/camel/component/jetty/MultiPartFormOkHttpTest.java @@ -25,6 +25,7 @@ import okhttp3.RequestBody; import okhttp3.Response; import org.apache.camel.Exchange; import org.apache.camel.Processor; +import org.apache.camel.attachment.AttachmentMessage; import org.apache.camel.builder.RouteBuilder; import org.junit.Test; @@ -58,11 +59,12 @@ public class MultiPartFormOkHttpTest extends BaseJettyTest { public void configure() throws Exception { from("jetty://http://localhost:{{port}}/test").process(new Processor() { public void process(Exchange exchange) throws Exception { - assertTrue("Should have attachment", exchange.getIn().hasAttachments()); + AttachmentMessage message = exchange.getMessage(AttachmentMessage.class); + assertTrue("Should have attachment", message.hasAttachments()); - InputStream is = exchange.getIn().getAttachment("test").getInputStream(); + InputStream is = message.getAttachment("test").getInputStream(); assertNotNull(is); - assertEquals("form-data; name=\"test\"", exchange.getIn().getAttachmentObject("test").getHeader("content-disposition")); + assertEquals("form-data; name=\"test\"", message.getAttachmentObject("test").getHeader("content-disposition")); String data = exchange.getContext().getTypeConverter().convertTo(String.class, exchange, is); assertNotNull("Should have data", data); assertEquals("some data here", data); diff --git a/components/camel-jetty/src/test/java/org/apache/camel/component/jetty/MultiPartFormTest.java b/components/camel-jetty/src/test/java/org/apache/camel/component/jetty/MultiPartFormTest.java index 51740f1..2b884ae 100644 --- a/components/camel-jetty/src/test/java/org/apache/camel/component/jetty/MultiPartFormTest.java +++ b/components/camel-jetty/src/test/java/org/apache/camel/component/jetty/MultiPartFormTest.java @@ -23,6 +23,7 @@ import javax.activation.DataHandler; import org.apache.camel.Exchange; import org.apache.camel.Message; import org.apache.camel.Processor; +import org.apache.camel.attachment.AttachmentMessage; import org.apache.camel.builder.RouteBuilder; import org.apache.camel.util.IOHelper; import org.apache.http.HttpEntity; @@ -76,7 +77,7 @@ public class MultiPartFormTest extends BaseJettyTest { from("jetty://http://localhost:{{port}}/test").process(new Processor() { public void process(Exchange exchange) throws Exception { - Message in = exchange.getIn(); + AttachmentMessage in = exchange.getIn(AttachmentMessage.class); assertEquals("Get a wrong attachement size", 2, in.getAttachments().size()); // The file name is attachment id DataHandler data = in.getAttachment("log4j2.properties"); diff --git a/components/camel-jetty/src/test/java/org/apache/camel/component/jetty/MultiPartFormWithCustomFilterTest.java b/components/camel-jetty/src/test/java/org/apache/camel/component/jetty/MultiPartFormWithCustomFilterTest.java index 22b40de..4a5face 100644 --- a/components/camel-jetty/src/test/java/org/apache/camel/component/jetty/MultiPartFormWithCustomFilterTest.java +++ b/components/camel-jetty/src/test/java/org/apache/camel/component/jetty/MultiPartFormWithCustomFilterTest.java @@ -27,8 +27,8 @@ import javax.servlet.ServletResponse; import javax.servlet.http.HttpServletResponse; import org.apache.camel.Exchange; -import org.apache.camel.Message; import org.apache.camel.Processor; +import org.apache.camel.attachment.AttachmentMessage; import org.apache.camel.builder.RouteBuilder; import org.apache.camel.impl.JndiRegistry; import org.apache.commons.httpclient.HttpClient; @@ -113,7 +113,7 @@ public class MultiPartFormWithCustomFilterTest extends BaseJettyTest { from("jetty://http://localhost:{{port}}/test?multipartFilterRef=myMultipartFilter").process(new Processor() { public void process(Exchange exchange) throws Exception { - Message in = exchange.getIn(); + AttachmentMessage in = exchange.getMessage(AttachmentMessage.class); assertEquals("Get a wrong attachement size", 2, in.getAttachments().size()); // The file name is attachment id DataHandler data = in.getAttachment("log4j2.properties"); @@ -137,7 +137,7 @@ public class MultiPartFormWithCustomFilterTest extends BaseJettyTest { // Test to ensure that setting a multipartFilterRef overrides the enableMultipartFilter=false parameter from("jetty://http://localhost:{{port}}/test2?multipartFilterRef=myMultipartFilter&enableMultipartFilter=false").process(new Processor() { public void process(Exchange exchange) throws Exception { - Message in = exchange.getIn(); + AttachmentMessage in = exchange.getMessage(AttachmentMessage.class); assertEquals("Get a wrong attachement size", 2, in.getAttachments().size()); DataHandler data = in.getAttachment("log4j2.properties"); diff --git a/components/camel-jms/src/main/java/org/apache/camel/component/jms/JmsMessage.java b/components/camel-jms/src/main/java/org/apache/camel/component/jms/JmsMessage.java index 73fdb45..440635d 100644 --- a/components/camel-jms/src/main/java/org/apache/camel/component/jms/JmsMessage.java +++ b/components/camel-jms/src/main/java/org/apache/camel/component/jms/JmsMessage.java @@ -100,11 +100,6 @@ public class JmsMessage extends DefaultMessage { if (that.hasHeaders()) { getHeaders().putAll(that.getHeaders()); } - - getAttachments().clear(); - if (that.hasAttachments()) { - getAttachmentObjects().putAll(that.getAttachmentObjects()); - } } public JmsBinding getBinding() { diff --git a/components/camel-jolt/src/main/java/org/apache/camel/component/jolt/JoltEndpoint.java b/components/camel-jolt/src/main/java/org/apache/camel/component/jolt/JoltEndpoint.java index 246dfc2..b55e2d4 100644 --- a/components/camel-jolt/src/main/java/org/apache/camel/component/jolt/JoltEndpoint.java +++ b/components/camel-jolt/src/main/java/org/apache/camel/component/jolt/JoltEndpoint.java @@ -191,6 +191,5 @@ public class JoltEndpoint extends ResourceEndpoint { out.setBody(output); } out.setHeaders(exchange.getIn().getHeaders()); - out.setAttachments(exchange.getIn().getAttachments()); } } diff --git a/components/camel-ldap/src/main/java/org/apache/camel/component/ldap/LdapProducer.java b/components/camel-ldap/src/main/java/org/apache/camel/component/ldap/LdapProducer.java index a6f9462..ecaa452 100644 --- a/components/camel-ldap/src/main/java/org/apache/camel/component/ldap/LdapProducer.java +++ b/components/camel-ldap/src/main/java/org/apache/camel/component/ldap/LdapProducer.java @@ -78,7 +78,6 @@ public class LdapProducer extends DefaultProducer { } exchange.getOut().setBody(data); exchange.getOut().setHeaders(exchange.getIn().getHeaders()); - exchange.getOut().setAttachments(exchange.getIn().getAttachments()); } finally { if (dirContext != null) { dirContext.close(); diff --git a/components/camel-mail/pom.xml b/components/camel-mail/pom.xml index a0d0f766..253350b 100644 --- a/components/camel-mail/pom.xml +++ b/components/camel-mail/pom.xml @@ -41,6 +41,10 @@ <artifactId>camel-support</artifactId> </dependency> <dependency> + <groupId>org.apache.camel</groupId> + <artifactId>camel-attachments</artifactId> + </dependency> + <dependency> <groupId>com.sun.mail</groupId> <artifactId>javax.mail</artifactId> <version>${javax-mail-version}</version> diff --git a/components/camel-mail/src/main/java/org/apache/camel/component/mail/MailBinding.java b/components/camel-mail/src/main/java/org/apache/camel/component/mail/MailBinding.java index 048bc4d..603313b 100644 --- a/components/camel-mail/src/main/java/org/apache/camel/component/mail/MailBinding.java +++ b/components/camel-mail/src/main/java/org/apache/camel/component/mail/MailBinding.java @@ -45,11 +45,12 @@ import javax.mail.internet.MimeMultipart; import javax.mail.internet.MimeUtility; import javax.mail.util.ByteArrayDataSource; -import org.apache.camel.Attachment; import org.apache.camel.Exchange; import org.apache.camel.RuntimeCamelException; +import org.apache.camel.attachment.Attachment; +import org.apache.camel.attachment.AttachmentMessage; +import org.apache.camel.attachment.DefaultAttachment; import org.apache.camel.spi.HeaderFilterStrategy; -import org.apache.camel.support.DefaultAttachment; import org.apache.camel.support.DefaultHeaderFilterStrategy; import org.apache.camel.support.ExchangeHelper; import org.apache.camel.support.ObjectHelper; @@ -129,7 +130,7 @@ public class MailBinding { if (hasAlternativeBody(endpoint.getConfiguration(), exchange)) { createMultipartAlternativeMessage(mimeMessage, endpoint.getConfiguration(), exchange); } else { - if (exchange.getIn().hasAttachments()) { + if (exchange.getIn(AttachmentMessage.class).hasAttachments()) { appendAttachmentsFromCamel(mimeMessage, endpoint.getConfiguration(), exchange); } else { populateContentOnMimeMessage(mimeMessage, endpoint.getConfiguration(), exchange); @@ -467,7 +468,7 @@ public class MailBinding { addBodyToMultipart(configuration, multipart, exchange); String partDisposition = configuration.isUseInlineAttachments() ? Part.INLINE : Part.ATTACHMENT; AttachmentsContentTransferEncodingResolver contentTransferEncodingResolver = configuration.getAttachmentsContentTransferEncodingResolver(); - if (exchange.getIn().hasAttachments()) { + if (exchange.getIn(AttachmentMessage.class).hasAttachments()) { addAttachmentsToMultipart(multipart, partDisposition, contentTransferEncodingResolver, exchange); } return multipart; @@ -477,7 +478,7 @@ public class MailBinding { AttachmentsContentTransferEncodingResolver encodingResolver, Exchange exchange) throws MessagingException { LOG.trace("Adding attachments +++ start +++"); int i = 0; - for (Map.Entry<String, Attachment> entry : exchange.getIn().getAttachmentObjects().entrySet()) { + for (Map.Entry<String, Attachment> entry : exchange.getIn(AttachmentMessage.class).getAttachmentObjects().entrySet()) { String attachmentFilename = entry.getKey(); Attachment attachment = entry.getValue(); @@ -565,7 +566,7 @@ public class MailBinding { multipartAlternative.addBodyPart(plainText); // if there are no attachments, add the body to the same mulitpart message - if (!exchange.getIn().hasAttachments()) { + if (!exchange.getIn(AttachmentMessage.class).hasAttachments()) { addBodyToMultipart(configuration, multipartAlternative, exchange); } else { // if there are attachments, but they aren't set to be inline, add them to diff --git a/components/camel-mail/src/main/java/org/apache/camel/component/mail/MailConsumer.java b/components/camel-mail/src/main/java/org/apache/camel/component/mail/MailConsumer.java index 9384976..6acb9f5 100644 --- a/components/camel-mail/src/main/java/org/apache/camel/component/mail/MailConsumer.java +++ b/components/camel-mail/src/main/java/org/apache/camel/component/mail/MailConsumer.java @@ -351,7 +351,6 @@ public class MailConsumer extends ScheduledBatchPollingConsumer { log.trace("Mapping #{} from javax.mail.Message to Camel MailMessage", i); exchange.getIn().getBody(); exchange.getIn().getHeaders(); - exchange.getIn().getAttachments(); } // If the protocol is POP3 we need to remember the uid on the exchange diff --git a/components/camel-mail/src/main/java/org/apache/camel/component/mail/MailMessage.java b/components/camel-mail/src/main/java/org/apache/camel/component/mail/MailMessage.java index 6c24104..836c9ee 100644 --- a/components/camel-mail/src/main/java/org/apache/camel/component/mail/MailMessage.java +++ b/components/camel-mail/src/main/java/org/apache/camel/component/mail/MailMessage.java @@ -18,11 +18,9 @@ package org.apache.camel.component.mail; import java.io.IOException; import java.util.Map; - import javax.mail.Message; import javax.mail.MessagingException; -import org.apache.camel.Attachment; import org.apache.camel.Exchange; import org.apache.camel.RuntimeCamelException; import org.apache.camel.support.DefaultMessage; @@ -55,13 +53,6 @@ public class MailMessage extends DefaultMessage { MailMessage answer = (MailMessage)super.copy(); answer.originalMailMessage = originalMailMessage; answer.mailMessage = mailMessage; - - if (mapMailMessage) { - // force attachments to be created (by getting attachments) to ensure they are always available due Camel error handler - // makes defensive copies, and we have optimized it to avoid populating initial attachments, when not needed, - // as all other Camel components do not use attachments - getAttachments(); - } return answer; } @@ -116,20 +107,6 @@ public class MailMessage extends DefaultMessage { } } - @Override - protected void populateInitialAttachments(Map<String, Attachment> map) { - if (mailMessage != null) { - try { - MailBinding binding = ExchangeHelper.getBinding(getExchange(), MailBinding.class); - if (binding != null) { - binding.extractAttachmentsFromMail(mailMessage, map); - } - } catch (Exception e) { - throw new RuntimeCamelException("Error populating the initial mail message attachments", e); - } - } - } - public void copyFrom(org.apache.camel.Message that) { // only do a deep copy if we need to (yes when that is not a mail message, or if the mapMailMessage is true) boolean needCopy = !(that instanceof MailMessage) || (((MailMessage) that).mapMailMessage); diff --git a/components/camel-mail/src/main/java/org/apache/camel/component/mail/SplitAttachmentsExpression.java b/components/camel-mail/src/main/java/org/apache/camel/component/mail/SplitAttachmentsExpression.java index 98f57c4..66feaf7 100644 --- a/components/camel-mail/src/main/java/org/apache/camel/component/mail/SplitAttachmentsExpression.java +++ b/components/camel-mail/src/main/java/org/apache/camel/component/mail/SplitAttachmentsExpression.java @@ -22,10 +22,11 @@ import java.util.ArrayList; import java.util.List; import java.util.Map; -import org.apache.camel.Attachment; import org.apache.camel.Exchange; import org.apache.camel.Message; import org.apache.camel.RuntimeCamelException; +import org.apache.camel.attachment.AttachmentMessage; +import org.apache.camel.attachment.Attachment; import org.apache.camel.support.DefaultMessage; import org.apache.camel.support.ExpressionAdapter; import org.apache.camel.util.IOHelper; @@ -71,13 +72,13 @@ public class SplitAttachmentsExpression extends ExpressionAdapter { @Override public Object evaluate(Exchange exchange) { // must use getAttachments to ensure attachments is initial populated - if (exchange.getIn().getAttachments().isEmpty()) { + if (!exchange.getIn(AttachmentMessage.class).hasAttachments()) { return null; } try { List<Message> answer = new ArrayList<>(); - Message inMessage = exchange.getIn(); + AttachmentMessage inMessage = exchange.getIn(AttachmentMessage.class); for (Map.Entry<String, Attachment> entry : inMessage.getAttachmentObjects().entrySet()) { Message attachmentMessage; if (extractAttachments) { @@ -99,14 +100,15 @@ public class SplitAttachmentsExpression extends ExpressionAdapter { private Message splitAttachment(Message inMessage, String attachmentName, Attachment attachmentHandler) { final Message copy = inMessage.copy(); - Map<String, Attachment> attachments = copy.getAttachmentObjects(); + final AttachmentMessage am = copy.getExchange().getMessage(AttachmentMessage.class); + Map<String, Attachment> attachments = am.getAttachmentObjects(); attachments.clear(); attachments.put(attachmentName, attachmentHandler); copy.setHeader(HEADER_NAME, attachmentName); return copy; } - private Message extractAttachment(Message inMessage, String attachmentName) throws Exception { + private Message extractAttachment(AttachmentMessage inMessage, String attachmentName) throws Exception { final Message outMessage = new DefaultMessage(inMessage.getExchange().getContext()); outMessage.setHeader(HEADER_NAME, attachmentName); Object attachment = inMessage.getAttachment(attachmentName).getContent(); diff --git a/components/camel-mail/src/main/java/org/apache/camel/dataformat/mime/multipart/MimeMultipartDataFormat.java b/components/camel-mail/src/main/java/org/apache/camel/dataformat/mime/multipart/MimeMultipartDataFormat.java index 975902f..95ce503 100644 --- a/components/camel-mail/src/main/java/org/apache/camel/dataformat/mime/multipart/MimeMultipartDataFormat.java +++ b/components/camel-mail/src/main/java/org/apache/camel/dataformat/mime/multipart/MimeMultipartDataFormat.java @@ -44,12 +44,13 @@ import javax.mail.internet.MimeUtility; import javax.mail.internet.ParseException; import javax.mail.util.ByteArrayDataSource; -import org.apache.camel.Attachment; import org.apache.camel.Exchange; import org.apache.camel.Message; import org.apache.camel.NoTypeConversionAvailableException; +import org.apache.camel.attachment.Attachment; +import org.apache.camel.attachment.AttachmentMessage; +import org.apache.camel.attachment.DefaultAttachment; import org.apache.camel.spi.annotations.Dataformat; -import org.apache.camel.support.DefaultAttachment; import org.apache.camel.support.DefaultDataFormat; import org.apache.camel.support.ExchangeHelper; import org.apache.camel.support.MessageHelper; @@ -94,7 +95,7 @@ public class MimeMultipartDataFormat extends DefaultDataFormat { @Override public void marshal(Exchange exchange, Object graph, OutputStream stream) throws NoTypeConversionAvailableException, MessagingException, IOException { - if (multipartWithoutAttachment || headersInline || exchange.getIn().hasAttachments()) { + if (multipartWithoutAttachment || headersInline || exchange.getIn(AttachmentMessage.class).hasAttachments()) { ContentType contentType = getContentType(exchange); // remove the Content-Type header. This will be wrong afterwards... exchange.getOut().removeHeader(Exchange.CONTENT_TYPE); @@ -105,27 +106,29 @@ public class MimeMultipartDataFormat extends DefaultDataFormat { BodyPart part = new MimeBodyPart(); writeBodyPart(bodyContent, part, contentType); mp.addBodyPart(part); - for (Map.Entry<String, Attachment> entry : exchange.getIn().getAttachmentObjects().entrySet()) { - String attachmentFilename = entry.getKey(); - Attachment attachment = entry.getValue(); - part = new MimeBodyPart(); - part.setDataHandler(attachment.getDataHandler()); - part.setFileName(MimeUtility.encodeText(attachmentFilename, "UTF-8", null)); - String ct = attachment.getDataHandler().getContentType(); - contentType = new ContentType(ct); - part.setHeader(CONTENT_TYPE, ct); - if (!contentType.match("text/*") && binaryContent) { - part.setHeader(CONTENT_TRANSFER_ENCODING, "binary"); - } - // Set headers to the attachment - for (String headerName : attachment.getHeaderNames()) { - List<String> values = attachment.getHeaderAsList(headerName); - for (String value : values) { - part.setHeader(headerName, value); + if (exchange.getIn(AttachmentMessage.class).hasAttachments()) { + for (Map.Entry<String, Attachment> entry : exchange.getIn(AttachmentMessage.class).getAttachmentObjects().entrySet()) { + String attachmentFilename = entry.getKey(); + Attachment attachment = entry.getValue(); + part = new MimeBodyPart(); + part.setDataHandler(attachment.getDataHandler()); + part.setFileName(MimeUtility.encodeText(attachmentFilename, "UTF-8", null)); + String ct = attachment.getDataHandler().getContentType(); + contentType = new ContentType(ct); + part.setHeader(CONTENT_TYPE, ct); + if (!contentType.match("text/*") && binaryContent) { + part.setHeader(CONTENT_TRANSFER_ENCODING, "binary"); + } + // Set headers to the attachment + for (String headerName : attachment.getHeaderNames()) { + List<String> values = attachment.getHeaderAsList(headerName); + for (String value : values) { + part.setHeader(headerName, value); + } } + mp.addBodyPart(part); + exchange.getOut(AttachmentMessage.class).removeAttachment(attachmentFilename); } - mp.addBodyPart(part); - exchange.getOut().removeAttachment(attachmentFilename); } mm.setContent(mp); // copy headers if required and if the content can be converted into @@ -256,7 +259,7 @@ public class MimeMultipartDataFormat extends DefaultDataFormat { Header header = headers.nextElement(); camelAttachment.addHeader(header.getName(), header.getValue()); } - camelMessage.addAttachmentObject(getAttachmentKey(bp), camelAttachment); + camelMessage.getExchange().getOut(AttachmentMessage.class).addAttachmentObject(getAttachmentKey(bp), camelAttachment); } } if (content instanceof BodyPart) { diff --git a/components/camel-mail/src/test/java/org/apache/camel/component/mail/MailAttachmentDuplicateNamesTest.java b/components/camel-mail/src/test/java/org/apache/camel/component/mail/MailAttachmentDuplicateNamesTest.java index f2c1143..44ba7a2 100644 --- a/components/camel-mail/src/test/java/org/apache/camel/component/mail/MailAttachmentDuplicateNamesTest.java +++ b/components/camel-mail/src/test/java/org/apache/camel/component/mail/MailAttachmentDuplicateNamesTest.java @@ -25,6 +25,7 @@ import org.apache.camel.Endpoint; import org.apache.camel.Exchange; import org.apache.camel.Message; import org.apache.camel.Producer; +import org.apache.camel.attachment.AttachmentMessage; import org.apache.camel.builder.RouteBuilder; import org.apache.camel.component.mock.MockEndpoint; import org.apache.camel.test.junit4.CamelTestSupport; @@ -48,7 +49,7 @@ public class MailAttachmentDuplicateNamesTest extends CamelTestSupport { // create the exchange with the mail message that is multipart with a file and a Hello World text/plain message. Exchange exchange = endpoint.createExchange(); - Message in = exchange.getIn(); + AttachmentMessage in = exchange.getIn(AttachmentMessage.class); in.setBody("Hello World"); in.addAttachment("logo.jpeg", new DataHandler(new FileDataSource("src/test/data/logo.jpeg"))); in.addAttachment("logo.jpeg", new DataHandler(new FileDataSource("src/test/data/logo.jpeg"))); @@ -71,11 +72,11 @@ public class MailAttachmentDuplicateNamesTest extends CamelTestSupport { assertEquals("Hello World", out.getIn().getBody(String.class)); // attachment - Map<String, DataHandler> attachments = out.getIn().getAttachments(); + Map<String, DataHandler> attachments = out.getIn(AttachmentMessage.class).getAttachments(); assertNotNull("Should have attachments", attachments); assertEquals(1, attachments.size()); - DataHandler handler = out.getIn().getAttachment("logo.jpeg"); + DataHandler handler = out.getIn(AttachmentMessage.class).getAttachment("logo.jpeg"); assertNotNull("The logo should be there", handler); // content type should match diff --git a/components/camel-mail/src/test/java/org/apache/camel/component/mail/MailAttachmentRedeliveryTest.java b/components/camel-mail/src/test/java/org/apache/camel/component/mail/MailAttachmentRedeliveryTest.java index 909fcb8..7e3d170 100644 --- a/components/camel-mail/src/test/java/org/apache/camel/component/mail/MailAttachmentRedeliveryTest.java +++ b/components/camel-mail/src/test/java/org/apache/camel/component/mail/MailAttachmentRedeliveryTest.java @@ -28,6 +28,7 @@ import org.apache.camel.Exchange; import org.apache.camel.Message; import org.apache.camel.Processor; import org.apache.camel.Producer; +import org.apache.camel.attachment.AttachmentMessage; import org.apache.camel.builder.RouteBuilder; import org.apache.camel.component.mock.MockEndpoint; import org.apache.camel.test.junit4.CamelTestSupport; @@ -51,7 +52,7 @@ public class MailAttachmentRedeliveryTest extends CamelTestSupport { // create the exchange with the mail message that is multipart with a file and a Hello World text/plain message. Exchange exchange = endpoint.createExchange(); - Message in = exchange.getIn(); + AttachmentMessage in = exchange.getIn(AttachmentMessage.class); in.setBody("Hello World"); in.addAttachment("logo.jpeg", new DataHandler(new FileDataSource("src/test/data/logo.jpeg"))); @@ -71,11 +72,11 @@ public class MailAttachmentRedeliveryTest extends CamelTestSupport { assertEquals("Hello World", out.getIn().getBody(String.class)); // attachment - Map<String, DataHandler> attachments = out.getIn().getAttachments(); + Map<String, DataHandler> attachments = out.getIn(AttachmentMessage.class).getAttachments(); assertNotNull("Should have attachments", attachments); assertEquals(1, attachments.size()); - DataHandler handler = out.getIn().getAttachment("logo.jpeg"); + DataHandler handler = out.getIn(AttachmentMessage.class).getAttachment("logo.jpeg"); assertNotNull("The logo should be there", handler); // content type should match @@ -103,7 +104,7 @@ public class MailAttachmentRedeliveryTest extends CamelTestSupport { private int counter; @Override public void process(Exchange exchange) throws Exception { - Map<String, DataHandler> map = exchange.getIn().getAttachments(); + Map<String, DataHandler> map = exchange.getIn(AttachmentMessage.class).getAttachments(); assertNotNull(map); assertEquals(1, map.size()); names.add(map.keySet().iterator().next()); diff --git a/components/camel-mail/src/test/java/org/apache/camel/component/mail/MailAttachmentTest.java b/components/camel-mail/src/test/java/org/apache/camel/component/mail/MailAttachmentTest.java index 0a2f4f0..3bfc4f1 100644 --- a/components/camel-mail/src/test/java/org/apache/camel/component/mail/MailAttachmentTest.java +++ b/components/camel-mail/src/test/java/org/apache/camel/component/mail/MailAttachmentTest.java @@ -21,14 +21,15 @@ import java.util.Map; import javax.activation.DataHandler; import javax.activation.FileDataSource; -import org.apache.camel.Attachment; import org.apache.camel.Endpoint; import org.apache.camel.Exchange; import org.apache.camel.Message; import org.apache.camel.Producer; +import org.apache.camel.attachment.Attachment; +import org.apache.camel.attachment.AttachmentMessage; +import org.apache.camel.attachment.DefaultAttachment; import org.apache.camel.builder.RouteBuilder; import org.apache.camel.component.mock.MockEndpoint; -import org.apache.camel.support.DefaultAttachment; import org.apache.camel.test.junit4.CamelTestSupport; import org.junit.Test; import org.jvnet.mock_javamail.Mailbox; @@ -50,7 +51,7 @@ public class MailAttachmentTest extends CamelTestSupport { // create the exchange with the mail message that is multipart with a file and a Hello World text/plain message. Exchange exchange = endpoint.createExchange(); - Message in = exchange.getIn(); + AttachmentMessage in = exchange.getIn(AttachmentMessage.class); in.setBody("Hello World"); DefaultAttachment att = new DefaultAttachment(new FileDataSource("src/test/data/logo.jpeg")); att.addHeader("Content-Description", "some sample content"); @@ -74,11 +75,11 @@ public class MailAttachmentTest extends CamelTestSupport { assertEquals("Hello World", out.getIn().getBody(String.class)); // attachment - Map<String, Attachment> attachments = out.getIn().getAttachmentObjects(); + Map<String, Attachment> attachments = out.getIn(AttachmentMessage.class).getAttachmentObjects(); assertNotNull("Should have attachments", attachments); assertEquals(1, attachments.size()); - Attachment attachment = out.getIn().getAttachmentObject("logo.jpeg"); + Attachment attachment = out.getIn(AttachmentMessage.class).getAttachmentObject("logo.jpeg"); DataHandler handler = attachment.getDataHandler(); assertNotNull("The logo should be there", handler); diff --git a/components/camel-mail/src/test/java/org/apache/camel/component/mail/MailAttachmentsUmlautIssueTest.java b/components/camel-mail/src/test/java/org/apache/camel/component/mail/MailAttachmentsUmlautIssueTest.java index d6df901..c58226b 100644 --- a/components/camel-mail/src/test/java/org/apache/camel/component/mail/MailAttachmentsUmlautIssueTest.java +++ b/components/camel-mail/src/test/java/org/apache/camel/component/mail/MailAttachmentsUmlautIssueTest.java @@ -27,6 +27,7 @@ import org.apache.camel.Endpoint; import org.apache.camel.Exchange; import org.apache.camel.Message; import org.apache.camel.Producer; +import org.apache.camel.attachment.AttachmentMessage; import org.apache.camel.builder.RouteBuilder; import org.apache.camel.component.mock.MockEndpoint; import org.apache.camel.test.junit4.CamelTestSupport; @@ -50,7 +51,7 @@ public class MailAttachmentsUmlautIssueTest extends CamelTestSupport { // create the exchange with the mail message that is multipart with a file and a Hello World text/plain message. Exchange exchange = endpoint.createExchange(); - Message in = exchange.getIn(); + AttachmentMessage in = exchange.getIn(AttachmentMessage.class); in.setBody("Hello World"); // unicode 00DC is german umlaut String name = "logo2\u00DC"; @@ -76,11 +77,11 @@ public class MailAttachmentsUmlautIssueTest extends CamelTestSupport { assertEquals("Hello World", out.getIn().getBody(String.class)); // attachment - Map<String, DataHandler> attachments = out.getIn().getAttachments(); + Map<String, DataHandler> attachments = out.getIn(AttachmentMessage.class).getAttachments(); assertNotNull("Should have attachments", attachments); assertEquals(1, attachments.size()); - DataHandler handler = out.getIn().getAttachment(name); + DataHandler handler = out.getIn(AttachmentMessage.class).getAttachment(name); assertNotNull("The " + name + " should be there", handler); String nameURLEncoded = URLEncoder.encode(name, Charset.defaultCharset().name()); diff --git a/components/camel-mail/src/test/java/org/apache/camel/component/mail/MailBindingAttachmentFileTest.java b/components/camel-mail/src/test/java/org/apache/camel/component/mail/MailBindingAttachmentFileTest.java index 9293e0c..882c28d 100644 --- a/components/camel-mail/src/test/java/org/apache/camel/component/mail/MailBindingAttachmentFileTest.java +++ b/components/camel-mail/src/test/java/org/apache/camel/component/mail/MailBindingAttachmentFileTest.java @@ -21,7 +21,6 @@ import java.util.Arrays; import java.util.HashMap; import java.util.Map; import java.util.Properties; - import javax.activation.DataHandler; import javax.mail.Message; import javax.mail.MessagingException; @@ -31,7 +30,7 @@ import javax.mail.internet.MimeBodyPart; import javax.mail.internet.MimeMessage; import javax.mail.internet.MimeMultipart; -import org.apache.camel.Attachment; +import org.apache.camel.attachment.Attachment; import org.junit.Test; import org.junit.runner.RunWith; import org.junit.runners.Parameterized; diff --git a/components/camel-mail/src/test/java/org/apache/camel/component/mail/MailContentTypeResolverTest.java b/components/camel-mail/src/test/java/org/apache/camel/component/mail/MailContentTypeResolverTest.java index 9b0505f..25c3a87 100644 --- a/components/camel-mail/src/test/java/org/apache/camel/component/mail/MailContentTypeResolverTest.java +++ b/components/camel-mail/src/test/java/org/apache/camel/component/mail/MailContentTypeResolverTest.java @@ -25,6 +25,7 @@ import org.apache.camel.Endpoint; import org.apache.camel.Exchange; import org.apache.camel.Message; import org.apache.camel.Producer; +import org.apache.camel.attachment.AttachmentMessage; import org.apache.camel.builder.RouteBuilder; import org.apache.camel.component.mock.MockEndpoint; import org.apache.camel.test.junit4.CamelTestSupport; @@ -46,7 +47,7 @@ public class MailContentTypeResolverTest extends CamelTestSupport { // create the exchange with the mail message that is multipart with a file and a Hello World text/plain message. Exchange exchange = endpoint.createExchange(); - Message in = exchange.getIn(); + AttachmentMessage in = exchange.getIn(AttachmentMessage.class); in.setBody("Hello World"); in.addAttachment("logo.jpeg", new DataHandler(new FileDataSource("src/test/data/logo.jpeg"))); @@ -66,11 +67,11 @@ public class MailContentTypeResolverTest extends CamelTestSupport { assertEquals("Hello World", out.getIn().getBody(String.class)); // attachment - Map<String, DataHandler> attachments = out.getIn().getAttachments(); + Map<String, DataHandler> attachments = out.getIn(AttachmentMessage.class).getAttachments(); assertNotNull("Should have attachments", attachments); assertEquals(1, attachments.size()); - DataHandler handler = out.getIn().getAttachment("logo.jpeg"); + DataHandler handler = out.getIn(AttachmentMessage.class).getAttachment("logo.jpeg"); assertNotNull("The logo should be there", handler); // as we use a custom content type resolver the content type should then be fixed and correct diff --git a/components/camel-mail/src/test/java/org/apache/camel/component/mail/MailHtmlAttachmentTest.java b/components/camel-mail/src/test/java/org/apache/camel/component/mail/MailHtmlAttachmentTest.java index ff80ac6..4b06949 100644 --- a/components/camel-mail/src/test/java/org/apache/camel/component/mail/MailHtmlAttachmentTest.java +++ b/components/camel-mail/src/test/java/org/apache/camel/component/mail/MailHtmlAttachmentTest.java @@ -25,6 +25,7 @@ import org.apache.camel.Endpoint; import org.apache.camel.Exchange; import org.apache.camel.Message; import org.apache.camel.Producer; +import org.apache.camel.attachment.AttachmentMessage; import org.apache.camel.builder.RouteBuilder; import org.apache.camel.component.mock.MockEndpoint; import org.apache.camel.test.junit4.CamelTestSupport; @@ -48,7 +49,7 @@ public class MailHtmlAttachmentTest extends CamelTestSupport { // create the exchange with the mail message that is multipart with a file and a Hello World text/plain message. Exchange exchange = endpoint.createExchange(); - Message in = exchange.getIn(); + AttachmentMessage in = exchange.getIn(AttachmentMessage.class); in.setBody("<html><body><h1>Hello</h1>World</body></html>"); in.addAttachment("logo.jpeg", new DataHandler(new FileDataSource("src/test/data/logo.jpeg"))); @@ -73,11 +74,11 @@ public class MailHtmlAttachmentTest extends CamelTestSupport { assertEquals("<html><body><h1>Hello</h1>World</body></html>", out.getIn().getBody(String.class)); // attachment - Map<String, DataHandler> attachments = out.getIn().getAttachments(); + Map<String, DataHandler> attachments = out.getIn(AttachmentMessage.class).getAttachments(); assertNotNull("Should have attachments", attachments); assertEquals(1, attachments.size()); - DataHandler handler = out.getIn().getAttachment("logo.jpeg"); + DataHandler handler = out.getIn(AttachmentMessage.class).getAttachment("logo.jpeg"); assertNotNull("The logo should be there", handler); byte[] bytes = context.getTypeConverter().convertTo(byte[].class, handler.getInputStream()); assertNotNull("content should be there", bytes); diff --git a/components/camel-mail/src/test/java/org/apache/camel/component/mail/MailRouteTest.java b/components/camel-mail/src/test/java/org/apache/camel/component/mail/MailRouteTest.java index 351eacd..e7fc34e 100644 --- a/components/camel-mail/src/test/java/org/apache/camel/component/mail/MailRouteTest.java +++ b/components/camel-mail/src/test/java/org/apache/camel/component/mail/MailRouteTest.java @@ -27,6 +27,7 @@ import javax.mail.MessagingException; import org.apache.camel.Exchange; import org.apache.camel.Processor; +import org.apache.camel.attachment.AttachmentMessage; import org.apache.camel.builder.RouteBuilder; import org.apache.camel.component.mock.MockEndpoint; import org.apache.camel.test.junit4.CamelTestSupport; @@ -85,7 +86,7 @@ public class MailRouteTest extends CamelTestSupport { mock.assertIsSatisfied(); - assertFalse("Should not have attachements", mock.getExchanges().get(0).getIn().hasAttachments()); + assertFalse("Should not have attachements", mock.getExchanges().get(0).getIn(AttachmentMessage.class).hasAttachments()); } diff --git a/components/camel-mail/src/test/java/org/apache/camel/component/mail/MailSplitAttachmentsTest.java b/components/camel-mail/src/test/java/org/apache/camel/component/mail/MailSplitAttachmentsTest.java index ed75cd8..21f6728 100644 --- a/components/camel-mail/src/test/java/org/apache/camel/component/mail/MailSplitAttachmentsTest.java +++ b/components/camel-mail/src/test/java/org/apache/camel/component/mail/MailSplitAttachmentsTest.java @@ -23,6 +23,7 @@ import org.apache.camel.Endpoint; import org.apache.camel.Exchange; import org.apache.camel.Message; import org.apache.camel.Producer; +import org.apache.camel.attachment.AttachmentMessage; import org.apache.camel.builder.RouteBuilder; import org.apache.camel.component.mock.MockEndpoint; import org.apache.camel.test.junit4.CamelTestSupport; @@ -50,7 +51,7 @@ public class MailSplitAttachmentsTest extends CamelTestSupport { // create the exchange with the mail message that is multipart with a file and a Hello World text/plain message. endpoint = context.getEndpoint("smtp://ja...@mymailserver.com?password=secret"); exchange = endpoint.createExchange(); - Message in = exchange.getIn(); + AttachmentMessage in = exchange.getIn(AttachmentMessage.class); in.setBody("Hello World"); in.addAttachment("logo.jpeg", new DataHandler(new FileDataSource("src/test/data/logo.jpeg"))); in.addAttachment("log4j2.properties", new DataHandler(new FileDataSource("src/test/resources/log4j2.properties"))); @@ -67,8 +68,8 @@ public class MailSplitAttachmentsTest extends CamelTestSupport { mock.assertIsSatisfied(); - Message first = mock.getReceivedExchanges().get(0).getIn(); - Message second = mock.getReceivedExchanges().get(1).getIn(); + AttachmentMessage first = mock.getReceivedExchanges().get(0).getIn(AttachmentMessage.class); + AttachmentMessage second = mock.getReceivedExchanges().get(1).getIn(AttachmentMessage.class); assertEquals(1, first.getAttachments().size()); assertEquals(1, second.getAttachments().size()); @@ -97,8 +98,8 @@ public class MailSplitAttachmentsTest extends CamelTestSupport { mock.assertIsSatisfied(); - Message first = mock.getReceivedExchanges().get(0).getIn(); - Message second = mock.getReceivedExchanges().get(1).getIn(); + AttachmentMessage first = mock.getReceivedExchanges().get(0).getIn(AttachmentMessage.class); + AttachmentMessage second = mock.getReceivedExchanges().get(1).getIn(AttachmentMessage.class); // check it's no longer an attachment, but is the message body assertEquals(0, first.getAttachments().size()); diff --git a/components/camel-mail/src/test/java/org/apache/camel/component/mail/MailSubjectTest.java b/components/camel-mail/src/test/java/org/apache/camel/component/mail/MailSubjectTest.java index b578e2e..1dfeec8 100644 --- a/components/camel-mail/src/test/java/org/apache/camel/component/mail/MailSubjectTest.java +++ b/components/camel-mail/src/test/java/org/apache/camel/component/mail/MailSubjectTest.java @@ -16,6 +16,7 @@ */ package org.apache.camel.component.mail; +import org.apache.camel.attachment.AttachmentMessage; import org.apache.camel.builder.RouteBuilder; import org.apache.camel.component.mock.MockEndpoint; import org.apache.camel.test.junit4.CamelTestSupport; @@ -43,7 +44,7 @@ public class MailSubjectTest extends CamelTestSupport { mock.assertIsSatisfied(); - assertFalse("Should not have attachements", mock.getExchanges().get(0).getIn().hasAttachments()); + assertFalse("Should not have attachements", mock.getExchanges().get(0).getIn(AttachmentMessage.class).hasAttachments()); } protected RouteBuilder createRouteBuilder() throws Exception { diff --git a/components/camel-mail/src/test/java/org/apache/camel/component/mail/MimeMessageConsumeTest.java b/components/camel-mail/src/test/java/org/apache/camel/component/mail/MimeMessageConsumeTest.java index 169b1c8..f171b66 100644 --- a/components/camel-mail/src/test/java/org/apache/camel/component/mail/MimeMessageConsumeTest.java +++ b/components/camel-mail/src/test/java/org/apache/camel/component/mail/MimeMessageConsumeTest.java @@ -36,6 +36,7 @@ import javax.mail.internet.MimeMessage; import javax.mail.internet.MimeMultipart; import org.apache.camel.Exchange; +import org.apache.camel.attachment.AttachmentMessage; import org.apache.camel.builder.RouteBuilder; import org.apache.camel.component.mock.MockEndpoint; import org.apache.camel.test.junit4.CamelTestSupport; @@ -70,9 +71,9 @@ public class MimeMessageConsumeTest extends CamelTestSupport { String text = exchange.getIn().getBody(String.class); assertEquals("mail body", body, text); - assertNotNull("attachments got lost", exchange.getIn().getAttachments()); - for (String s : exchange.getIn().getAttachmentNames()) { - DataHandler dh = exchange.getIn().getAttachment(s); + assertNotNull("attachments got lost", exchange.getIn(AttachmentMessage.class).getAttachments()); + for (String s : exchange.getIn(AttachmentMessage.class).getAttachmentNames()) { + DataHandler dh = exchange.getIn(AttachmentMessage.class).getAttachment(s); Object content = dh.getContent(); assertNotNull("Content should not be empty", content); assertEquals("log4j2.properties", dh.getName()); diff --git a/components/camel-mail/src/test/java/org/apache/camel/component/mail/MimeMultipartAlternativeTest.java b/components/camel-mail/src/test/java/org/apache/camel/component/mail/MimeMultipartAlternativeTest.java index a0be602..c4b07b8 100644 --- a/components/camel-mail/src/test/java/org/apache/camel/component/mail/MimeMultipartAlternativeTest.java +++ b/components/camel-mail/src/test/java/org/apache/camel/component/mail/MimeMultipartAlternativeTest.java @@ -25,6 +25,7 @@ import javax.mail.internet.MimeMultipart; import org.apache.camel.Exchange; import org.apache.camel.Message; +import org.apache.camel.attachment.AttachmentMessage; import org.apache.camel.builder.RouteBuilder; import org.apache.camel.component.mock.MockEndpoint; import org.apache.camel.test.junit4.CamelTestSupport; @@ -47,7 +48,7 @@ public class MimeMultipartAlternativeTest extends CamelTestSupport { // create the exchange with the mail message that is multipart with a file and a Hello World text/plain message. Exchange exchange = endpoint.createExchange(); - Message in = exchange.getIn(); + AttachmentMessage in = exchange.getIn(AttachmentMessage.class); in.setBody(htmlBody); in.setHeader(MAIL_ALTERNATIVE_BODY, alternativeBody); in.addAttachment("cid:0001", new DataHandler(new FileDataSource("src/test/data/logo.jpeg"))); @@ -75,7 +76,7 @@ public class MimeMultipartAlternativeTest extends CamelTestSupport { assertEquals(alternativeBody, out.getIn().getBody(String.class)); // attachment - Map<String, DataHandler> attachments = out.getIn().getAttachments(); + Map<String, DataHandler> attachments = out.getIn(AttachmentMessage.class).getAttachments(); assertNotNull("Should not have null attachments", attachments); assertEquals(1, attachments.size()); assertEquals("multipart body should have 2 parts", 2, out.getIn().getBody(MimeMultipart.class).getCount()); diff --git a/components/camel-mail/src/test/java/org/apache/camel/component/mail/MimeMultipartAlternativeWithLongerFilenameTest.java b/components/camel-mail/src/test/java/org/apache/camel/component/mail/MimeMultipartAlternativeWithLongerFilenameTest.java index e73f415..6712c3c 100644 --- a/components/camel-mail/src/test/java/org/apache/camel/component/mail/MimeMultipartAlternativeWithLongerFilenameTest.java +++ b/components/camel-mail/src/test/java/org/apache/camel/component/mail/MimeMultipartAlternativeWithLongerFilenameTest.java @@ -25,6 +25,7 @@ import javax.mail.internet.MimeMultipart; import org.apache.camel.Exchange; import org.apache.camel.Message; +import org.apache.camel.attachment.AttachmentMessage; import org.apache.camel.builder.RouteBuilder; import org.apache.camel.component.mock.MockEndpoint; import org.apache.camel.test.junit4.CamelTestSupport; @@ -47,7 +48,7 @@ public class MimeMultipartAlternativeWithLongerFilenameTest extends CamelTestSup // create the exchange with the mail message that is multipart with a file and a Hello World text/plain message. Exchange exchange = endpoint.createExchange(); - Message in = exchange.getIn(); + AttachmentMessage in = exchange.getIn(AttachmentMessage.class); in.setBody(htmlBody); in.setHeader(MAIL_ALTERNATIVE_BODY, alternativeBody); in.addAttachment("cid:myCoolLogo.jpeg", new DataHandler(new FileDataSource("src/test/data/logo.jpeg"))); @@ -75,7 +76,7 @@ public class MimeMultipartAlternativeWithLongerFilenameTest extends CamelTestSup assertEquals(alternativeBody, out.getIn().getBody(String.class)); // attachment - Map<String, DataHandler> attachments = out.getIn().getAttachments(); + Map<String, DataHandler> attachments = out.getIn(AttachmentMessage.class).getAttachments(); assertNotNull("Should not have null attachments", attachments); assertEquals(1, attachments.size()); assertEquals("multipart body should have 2 parts", 2, out.getIn().getBody(MimeMultipart.class).getCount()); diff --git a/components/camel-mail/src/test/java/org/apache/camel/component/mail/NestedMimeMessageConsumeTest.java b/components/camel-mail/src/test/java/org/apache/camel/component/mail/NestedMimeMessageConsumeTest.java index 212b320..323e074 100644 --- a/components/camel-mail/src/test/java/org/apache/camel/component/mail/NestedMimeMessageConsumeTest.java +++ b/components/camel-mail/src/test/java/org/apache/camel/component/mail/NestedMimeMessageConsumeTest.java @@ -26,8 +26,9 @@ import javax.mail.MessagingException; import javax.mail.Store; import javax.mail.internet.MimeMessage; -import org.apache.camel.Attachment; import org.apache.camel.Exchange; +import org.apache.camel.attachment.Attachment; +import org.apache.camel.attachment.AttachmentMessage; import org.apache.camel.builder.RouteBuilder; import org.apache.camel.component.mock.MockEndpoint; import org.apache.camel.test.junit4.CamelTestSupport; @@ -56,11 +57,11 @@ public class NestedMimeMessageConsumeTest extends CamelTestSupport { assertThat(text, containsString("Test with bold face, pictures and attachments")); assertEquals("text/plain; charset=us-ascii", exchange.getIn().getHeader("Content-Type")); - Set<String> attachmentNames = exchange.getIn().getAttachmentNames(); + Set<String> attachmentNames = exchange.getIn(AttachmentMessage.class).getAttachmentNames(); assertNotNull("attachments got lost", attachmentNames); assertEquals(2, attachmentNames.size()); for (String s : attachmentNames) { - Attachment att = exchange.getIn().getAttachmentObject(s); + Attachment att = exchange.getIn(AttachmentMessage.class).getAttachmentObject(s); DataHandler dh = att.getDataHandler(); Object content = dh.getContent(); assertNotNull("Content should not be empty", content); diff --git a/components/camel-mail/src/test/java/org/apache/camel/component/mail/SpringMailSplitAttachmentsTest.java b/components/camel-mail/src/test/java/org/apache/camel/component/mail/SpringMailSplitAttachmentsTest.java index e2a4652..c12f7f9 100644 --- a/components/camel-mail/src/test/java/org/apache/camel/component/mail/SpringMailSplitAttachmentsTest.java +++ b/components/camel-mail/src/test/java/org/apache/camel/component/mail/SpringMailSplitAttachmentsTest.java @@ -23,6 +23,7 @@ import org.apache.camel.Endpoint; import org.apache.camel.Exchange; import org.apache.camel.Message; import org.apache.camel.Producer; +import org.apache.camel.attachment.AttachmentMessage; import org.apache.camel.component.mock.MockEndpoint; import org.apache.camel.test.spring.CamelSpringTestSupport; import org.apache.commons.io.IOUtils; @@ -55,7 +56,7 @@ public class SpringMailSplitAttachmentsTest extends CamelSpringTestSupport { // create the exchange with the mail message that is multipart with a file and a Hello World text/plain message. endpoint = context.getEndpoint("smtp://ja...@mymailserver.com?password=secret"); exchange = endpoint.createExchange(); - Message in = exchange.getIn(); + AttachmentMessage in = exchange.getIn(AttachmentMessage.class); in.setBody("Hello World"); in.addAttachment("logo.jpeg", new DataHandler(new FileDataSource("src/test/data/logo.jpeg"))); in.addAttachment("log4j2.properties", new DataHandler(new FileDataSource("src/test/resources/log4j2.properties"))); @@ -72,8 +73,8 @@ public class SpringMailSplitAttachmentsTest extends CamelSpringTestSupport { mock.assertIsSatisfied(); - Message first = mock.getReceivedExchanges().get(0).getIn(); - Message second = mock.getReceivedExchanges().get(1).getIn(); + AttachmentMessage first = mock.getReceivedExchanges().get(0).getIn(AttachmentMessage.class); + AttachmentMessage second = mock.getReceivedExchanges().get(1).getIn(AttachmentMessage.class); assertEquals(1, first.getAttachments().size()); assertEquals(1, second.getAttachments().size()); @@ -103,8 +104,8 @@ public class SpringMailSplitAttachmentsTest extends CamelSpringTestSupport { mock.assertIsSatisfied(); - Message first = mock.getReceivedExchanges().get(0).getIn(); - Message second = mock.getReceivedExchanges().get(1).getIn(); + AttachmentMessage first = mock.getReceivedExchanges().get(0).getIn(AttachmentMessage.class); + AttachmentMessage second = mock.getReceivedExchanges().get(1).getIn(AttachmentMessage.class); // check it's no longer an attachment, but is the message body assertEquals(0, first.getAttachments().size()); 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 d3e9cd8..e9e29e9 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 @@ -24,16 +24,15 @@ 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.attachment.Attachment; +import org.apache.camel.attachment.AttachmentMessage; +import org.apache.camel.attachment.DefaultAttachment; import org.apache.camel.builder.RouteBuilder; -import org.apache.camel.support.DefaultAttachment; import org.apache.camel.support.DefaultExchange; import org.apache.camel.test.junit4.CamelTestSupport; import org.apache.camel.util.IOHelper; @@ -48,13 +47,13 @@ import static org.hamcrest.core.StringStartsWith.startsWith; public class MimeMultipartDataFormatTest extends CamelTestSupport { private Exchange exchange; - private Message in; + private AttachmentMessage in; @Before public void setUp() throws Exception { super.setUp(); exchange = new DefaultExchange(context); - in = exchange.getIn(); + in = exchange.getIn(AttachmentMessage.class); } @Test @@ -70,7 +69,7 @@ public class MimeMultipartDataFormatTest extends CamelTestSupport { headers.put("X-AdditionalData", "additional data"); addAttachment(attContentType, attText, attFileName, headers); Exchange result = template.send("direct:roundtrip", exchange); - Message out = result.getOut(); + AttachmentMessage out = result.getOut(AttachmentMessage.class); assertEquals("Body text", out.getBody(String.class)); assertThat(out.getHeader(Exchange.CONTENT_TYPE, String.class), startsWith("text/plain")); assertEquals("UTF8", out.getHeader(Exchange.CONTENT_ENCODING)); @@ -99,7 +98,7 @@ public class MimeMultipartDataFormatTest extends CamelTestSupport { in.setHeader(Exchange.CONTENT_ENCODING, "UTF8"); addAttachment(attContentType, attText, attFileName); Exchange result = template.send("direct:roundtripinlineheaders", exchange); - Message out = result.getOut(); + AttachmentMessage out = result.getOut(AttachmentMessage.class); assertEquals("Body text", out.getBody(String.class)); assertThat(out.getHeader(Exchange.CONTENT_TYPE, String.class), startsWith("text/plain")); assertEquals("UTF8", out.getHeader(Exchange.CONTENT_ENCODING)); @@ -126,7 +125,7 @@ public class MimeMultipartDataFormatTest extends CamelTestSupport { in.setHeader(Exchange.CONTENT_ENCODING, "UTF8"); addAttachment(attContentType, attText, attFileName); Exchange result = template.send("direct:roundtrip", exchange); - Message out = result.getOut(); + AttachmentMessage out = result.getOut(AttachmentMessage.class); assertEquals("Body text with special characters: \u00A9", out.getBody(String.class)); assertThat(out.getHeader(Exchange.CONTENT_TYPE, String.class), startsWith("text/plain")); assertEquals("UTF8", out.getHeader(Exchange.CONTENT_ENCODING)); @@ -151,7 +150,7 @@ public class MimeMultipartDataFormatTest extends CamelTestSupport { in.setHeader(Exchange.CONTENT_TYPE, "text/plain;charset=iso8859-1;other-parameter=true"); addAttachment(attContentType, attText, attFileName); Exchange result = template.send("direct:roundtripbinarycontent", exchange); - Message out = result.getOut(); + AttachmentMessage out = result.getOut(AttachmentMessage.class); assertEquals("Body text", out.getBody(String.class)); assertThat(out.getHeader(Exchange.CONTENT_TYPE, String.class), startsWith("text/plain")); assertEquals("iso8859-1", out.getHeader(Exchange.CONTENT_ENCODING)); @@ -176,7 +175,7 @@ public class MimeMultipartDataFormatTest extends CamelTestSupport { DataSource ds = new ByteArrayDataSource(attText, attContentType); in.addAttachment(attFileName, new DataHandler(ds)); Exchange result = template.send("direct:roundtrip", exchange); - Message out = result.getOut(); + AttachmentMessage out = result.getOut(AttachmentMessage.class); assertEquals("Body text", out.getBody(String.class)); assertTrue(out.hasAttachments()); assertEquals(1, out.getAttachmentNames().size()); @@ -199,7 +198,7 @@ public class MimeMultipartDataFormatTest extends CamelTestSupport { DataSource ds = new ByteArrayDataSource(attText, attContentType); in.addAttachment(attFileName, new DataHandler(ds)); Exchange result = template.send("direct:roundtripbinarycontent", exchange); - Message out = result.getOut(); + AttachmentMessage out = result.getOut(AttachmentMessage.class); assertEquals("Body text", out.getBody(String.class)); assertTrue(out.hasAttachments()); assertEquals(1, out.getAttachmentNames().size()); @@ -217,7 +216,7 @@ public class MimeMultipartDataFormatTest extends CamelTestSupport { public void roundtripWithoutAttachments() throws IOException { in.setBody("Body text"); Exchange result = template.send("direct:roundtrip", exchange); - Message out = result.getOut(); + AttachmentMessage out = result.getOut(AttachmentMessage.class); assertEquals("Body text", out.getBody(String.class)); assertFalse(out.hasAttachments()); } @@ -226,7 +225,7 @@ public class MimeMultipartDataFormatTest extends CamelTestSupport { public void roundtripWithoutAttachmentsToMultipart() throws IOException { in.setBody("Body text"); Exchange result = template.send("direct:roundtripmultipart", exchange); - Message out = result.getOut(); + AttachmentMessage out = result.getOut(AttachmentMessage.class); assertEquals("Body text", out.getBody(String.class)); assertFalse(out.hasAttachments()); } @@ -236,7 +235,7 @@ public class MimeMultipartDataFormatTest extends CamelTestSupport { in.setBody("Body text"); in.setHeader("Content-Type", "text/plain"); Exchange result = template.send("direct:roundtrip", exchange); - Message out = result.getOut(); + AttachmentMessage out = result.getOut(AttachmentMessage.class); assertEquals("Body text", out.getBody(String.class)); assertFalse(out.hasAttachments()); } @@ -246,7 +245,7 @@ public class MimeMultipartDataFormatTest extends CamelTestSupport { in.setBody("Body text"); in.setHeader("Content-Type", "text?plain"); Exchange result = template.send("direct:roundtrip", exchange); - Message out = result.getOut(); + AttachmentMessage out = result.getOut(AttachmentMessage.class); assertEquals("Body text", out.getBody(String.class)); assertFalse(out.hasAttachments()); } @@ -357,9 +356,9 @@ public class MimeMultipartDataFormatTest extends CamelTestSupport { String bodyStr = intermediate.getOut().getBody(String.class); assertNotNull(bodyStr); assertThat(bodyStr, startsWith("25")); - assertEquals(1, intermediate.getOut().getAttachmentNames().size()); - assertThat(intermediate.getOut().getAttachmentNames().iterator().next(), containsString(matcher)); - Attachment att = intermediate.getOut().getAttachmentObject(intermediate.getOut().getAttachmentNames().iterator().next()); + assertEquals(1, intermediate.getOut(AttachmentMessage.class).getAttachmentNames().size()); + assertThat(intermediate.getOut(AttachmentMessage.class).getAttachmentNames().iterator().next(), containsString(matcher)); + Attachment att = intermediate.getOut(AttachmentMessage.class).getAttachmentObject(intermediate.getOut(AttachmentMessage.class).getAttachmentNames().iterator().next()); DataHandler dh = att.getDataHandler(); assertNotNull(dh); ByteArrayOutputStream bos = new ByteArrayOutputStream(); 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 ad040bc..e688a7e 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 @@ -25,11 +25,12 @@ 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.attachment.Attachment; +import org.apache.camel.attachment.AttachmentMessage; +import org.apache.camel.attachment.DefaultAttachment; import org.apache.camel.http.common.DefaultHttpBinding; import org.apache.camel.http.common.HttpMessage; -import org.apache.camel.support.DefaultAttachment; import org.apache.camel.util.FileUtil; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -73,7 +74,8 @@ public final class AttachmentHttpBinding extends DefaultHttpBinding { attachment.addHeader(headerName, headerValue); } } - message.addAttachmentObject(part.getName(), attachment); + AttachmentMessage am = message.getExchange().getMessage(AttachmentMessage.class); + am.addAttachmentObject(part.getName(), attachment); } else { LOG.debug("Cannot add file as attachment: {} because the file is not accepted according to fileNameExtWhitelist: {}", fileName, getFileNameExtWhitelist()); } diff --git a/components/camel-sql/src/main/java/org/apache/camel/component/sql/SqlProducer.java b/components/camel-sql/src/main/java/org/apache/camel/component/sql/SqlProducer.java index e46e16f..b5276b6 100644 --- a/components/camel-sql/src/main/java/org/apache/camel/component/sql/SqlProducer.java +++ b/components/camel-sql/src/main/java/org/apache/camel/component/sql/SqlProducer.java @@ -162,7 +162,6 @@ public class SqlProducer extends DefaultProducer { if (isResultSet) { // preserve headers first, so we can override the SQL_ROW_COUNT header exchange.getOut().getHeaders().putAll(exchange.getIn().getHeaders()); - exchange.getOut().getAttachments().putAll(exchange.getIn().getAttachments()); rs = ps.getResultSet(); SqlOutputType outputType = getEndpoint().getOutputType(); @@ -212,7 +211,6 @@ public class SqlProducer extends DefaultProducer { // if no OUT message yet then create one and propagate headers if (!exchange.hasOut()) { exchange.getOut().getHeaders().putAll(exchange.getIn().getHeaders()); - exchange.getOut().getAttachments().putAll(exchange.getIn().getAttachments()); } if (isResultSet) { @@ -284,7 +282,6 @@ public class SqlProducer extends DefaultProducer { ResultSetIterator iterator = getEndpoint().queryForStreamList(con, ps, rs); //pass through all headers exchange.getOut().getHeaders().putAll(exchange.getIn().getHeaders()); - exchange.getOut().getAttachments().putAll(exchange.getIn().getAttachments()); if (getEndpoint().isNoop()) { exchange.getOut().setBody(exchange.getIn().getBody()); diff --git a/components/camel-sql/src/test/java/org/apache/camel/component/sql/SqlProducerOutputAttachment.java b/components/camel-sql/src/test/java/org/apache/camel/component/sql/SqlProducerOutputAttachment.java deleted file mode 100644 index 3306ae3..0000000 --- a/components/camel-sql/src/test/java/org/apache/camel/component/sql/SqlProducerOutputAttachment.java +++ /dev/null @@ -1,91 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.apache.camel.component.sql; - -import java.net.MalformedURLException; - -import org.apache.camel.Exchange; -import org.apache.camel.builder.RouteBuilder; -import org.apache.camel.component.mock.MockEndpoint; -import org.apache.camel.test.junit4.CamelTestSupport; -import org.junit.After; -import org.junit.Before; -import org.junit.Test; -import org.springframework.jdbc.datasource.embedded.EmbeddedDatabase; -import org.springframework.jdbc.datasource.embedded.EmbeddedDatabaseBuilder; -import org.springframework.jdbc.datasource.embedded.EmbeddedDatabaseType; - -import static org.hamcrest.core.Is.is; -import static org.hamcrest.core.IsNull.notNullValue; - -public class SqlProducerOutputAttachment extends CamelTestSupport { - - private EmbeddedDatabase db; - - @Before - public void setUp() throws Exception { - db = new EmbeddedDatabaseBuilder() - .setType(EmbeddedDatabaseType.DERBY).addScript("sql/createAndPopulateDatabase.sql").build(); - - super.setUp(); - } - - @After - public void tearDown() throws Exception { - super.tearDown(); - - db.shutdown(); - } - - @Test - public void testHeaderAreAvailableAfterProducer() - throws InterruptedException, MalformedURLException { - MockEndpoint mock = getMockEndpoint("mock:query"); - - mock.expectedMessageCount(1); - mock.expectedHeaderReceived(SqlConstants.SQL_ROW_COUNT, 1); - mock.expectedHeaderReceived("TheProjectID", 1); - mock.expectedHeaderReceived("maintain", "this"); - mock.expects(() -> { - assertThat(mock.getReceivedExchanges().get(0).getIn().getAttachments().size(), is(1)); - assertThat(mock.getReceivedExchanges().get(0).getIn().getAttachment("att1"), notNullValue()); - }); - mock.message(0).body().isEqualTo("Hi there!"); - - Exchange exchange = context.getEndpoint("direct:query").createExchange(); - exchange.getIn().setBody("Hi there!"); - exchange.getIn().setHeader("myProject", "Camel"); - exchange.getIn().setHeader("maintain", "this"); - template.send("direct:query", exchange); - - assertMockEndpointsSatisfied(); - } - - @Override - protected RouteBuilder createRouteBuilder() throws Exception { - return new RouteBuilder() { - @Override - public void configure() throws Exception { - // required for the sql component - getContext().getComponent("sql", SqlComponent.class).setDataSource(db); - - from("direct:query") - .to("sql:select id from projects where project = :#myProject?outputType=SelectOne&outputHeader=TheProjectID").to("mock:query"); - } - }; - } -} diff --git a/components/camel-ssh/src/main/java/org/apache/camel/component/ssh/SshProducer.java b/components/camel-ssh/src/main/java/org/apache/camel/component/ssh/SshProducer.java index 30e7657..654e6e8 100644 --- a/components/camel-ssh/src/main/java/org/apache/camel/component/ssh/SshProducer.java +++ b/components/camel-ssh/src/main/java/org/apache/camel/component/ssh/SshProducer.java @@ -73,8 +73,7 @@ public class SshProducer extends DefaultProducer { throw new CamelExchangeException("Cannot execute command: " + command, exchange, e); } - // propagate headers and attachments + // propagate headers exchange.getOut().getHeaders().putAll(in.getHeaders()); - exchange.getOut().setAttachments(in.getAttachments()); } } diff --git a/components/camel-undertow/src/main/java/org/apache/camel/component/undertow/DefaultUndertowHttpBinding.java b/components/camel-undertow/src/main/java/org/apache/camel/component/undertow/DefaultUndertowHttpBinding.java index 603a414..5926ba9 100644 --- a/components/camel-undertow/src/main/java/org/apache/camel/component/undertow/DefaultUndertowHttpBinding.java +++ b/components/camel-undertow/src/main/java/org/apache/camel/component/undertow/DefaultUndertowHttpBinding.java @@ -45,8 +45,10 @@ import io.undertow.util.Methods; import org.apache.camel.Exchange; import org.apache.camel.Message; import org.apache.camel.TypeConverter; +import org.apache.camel.attachment.AttachmentMessage; +import org.apache.camel.attachment.DefaultAttachment; +import org.apache.camel.attachment.DefaultAttachmentMessage; import org.apache.camel.spi.HeaderFilterStrategy; -import org.apache.camel.support.DefaultAttachment; import org.apache.camel.support.DefaultMessage; import org.apache.camel.support.ExchangeHelper; import org.apache.camel.support.MessageHelper; @@ -97,7 +99,7 @@ public class DefaultUndertowHttpBinding implements UndertowHttpBinding { @Override public Message toCamelMessage(HttpServerExchange httpExchange, Exchange exchange) throws Exception { - Message result = new DefaultMessage(exchange.getContext()); + Message result = new DefaultMessage(exchange); populateCamelHeaders(httpExchange, result.getHeaders(), exchange); @@ -109,7 +111,8 @@ public class DefaultUndertowHttpBinding implements UndertowHttpBinding { formData.get(key).forEach(value -> { if (value.isFile()) { DefaultAttachment attachment = new DefaultAttachment(new FilePartDataSource(value)); - result.addAttachmentObject(key, attachment); + AttachmentMessage am = result.getExchange().getMessage(AttachmentMessage.class); + am.addAttachmentObject(key, attachment); body.put(key, attachment.getDataHandler()); } else if (headerFilterStrategy != null && !headerFilterStrategy.applyFilterToExternalHeaders(key, value.getValue(), exchange)) { diff --git a/components/camel-undertow/src/test/java/org/apache/camel/component/undertow/MultiPartFormTest.java b/components/camel-undertow/src/test/java/org/apache/camel/component/undertow/MultiPartFormTest.java index 13f4ad1..ef32342 100644 --- a/components/camel-undertow/src/test/java/org/apache/camel/component/undertow/MultiPartFormTest.java +++ b/components/camel-undertow/src/test/java/org/apache/camel/component/undertow/MultiPartFormTest.java @@ -24,6 +24,7 @@ import javax.activation.DataHandler; import org.apache.camel.Exchange; import org.apache.camel.Message; import org.apache.camel.Processor; +import org.apache.camel.attachment.AttachmentMessage; import org.apache.camel.builder.RouteBuilder; import org.apache.camel.util.IOHelper; import org.apache.http.HttpEntity; @@ -34,13 +35,13 @@ import org.apache.http.impl.client.HttpClientBuilder; import org.junit.Test; public class MultiPartFormTest extends BaseUndertowTest { + private HttpEntity createMultipartRequestEntity() throws Exception { File file = new File("src/test/resources/log4j2.properties"); return MultipartEntityBuilder.create() .addTextBody("comment", "A binary file of some kind") .addBinaryBody(file.getName(), file) .build(); - } @Test @@ -69,7 +70,7 @@ public class MultiPartFormTest extends BaseUndertowTest { from("undertow://http://localhost:{{port}}/test").process(new Processor() { public void process(Exchange exchange) throws Exception { - Message in = exchange.getIn(); + AttachmentMessage in = exchange.getIn(AttachmentMessage.class); assertEquals("Get a wrong attachement size", 1, in.getAttachments().size()); // The file name is attachment id DataHandler data = in.getAttachment("log4j2.properties"); diff --git a/parent/pom.xml b/parent/pom.xml index 840ed85..b93c357 100644 --- a/parent/pom.xml +++ b/parent/pom.xml @@ -919,6 +919,11 @@ </dependency> <dependency> <groupId>org.apache.camel</groupId> + <artifactId>camel-attachments</artifactId> + <version>${project.version}</version> + </dependency> + <dependency> + <groupId>org.apache.camel</groupId> <artifactId>camel-atmos</artifactId> <version>${project.version}</version> </dependency>