[ 
https://issues.apache.org/jira/browse/CAMEL-12078?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16554671#comment-16554671
 ] 

ASF GitHub Bot commented on CAMEL-12078:
----------------------------------------

aldettinger commented on a change in pull request #2185: Failing test for 
CAMEL-12078
URL: https://github.com/apache/camel/pull/2185#discussion_r204873667
 
 

 ##########
 File path: 
components/camel-mail/src/test/java/org/apache/camel/dataformat/mime/multipart/MimeMultipartDataFormatTest.java
 ##########
 @@ -351,6 +351,41 @@ public void unmarshalInlineHeadersNonMimeBodyStream() 
throws UnsupportedEncoding
         assertEquals("This is not a MIME-Multipart", bodyStr);
     }
 
+    @Test
+    public void attachmentReadOnce() throws IOException {
+        String attContentType = "text/plain";
+        String attText = "Attachment Text";
+        InputStream attInputStream = new 
ByteArrayInputStream(attText.getBytes());
+        String attFileName = "Attachment File Name";
+        in.setBody("Body text");
+        in.setHeader(Exchange.CONTENT_TYPE, 
"text/plain;charset=iso8859-1;other-parameter=true");
+        in.setHeader(Exchange.CONTENT_ENCODING, "UTF8");
+        Map<String, String> headers = new HashMap<String, String>();
+        headers.put("Content-Description", "Sample Attachment Data");
+        headers.put("X-AdditionalData", "additional data");
+        CountingByteArrayDataSource attachmentDs = new 
CountingByteArrayDataSource(attInputStream, attContentType);
+        addAttachment(attachmentDs, attFileName, headers);
+        Exchange result = template.send("direct:roundtrip", exchange);
+        Message out = result.getOut();
+        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));
+        assertTrue(out.hasAttachments());
+        assertEquals(1, out.getAttachmentNames().size());
+        assertThat(out.getAttachmentNames(), hasItem(attFileName));
+        Attachment att = out.getAttachmentObject(attFileName);
+        DataHandler dh = att.getDataHandler();
+        assertNotNull(dh);
+        assertEquals(attContentType, dh.getContentType());
+        InputStream is = dh.getInputStream();
+        ByteArrayOutputStream os = new ByteArrayOutputStream();
+        IOHelper.copyAndCloseInput(is, os);
+        assertEquals(attText, new String(os.toByteArray()));
+        assertEquals("Sample Attachment Data", 
att.getHeader("content-description"));
+        assertEquals("additional data", att.getHeader("X-AdditionalData"));
+        assertEquals(1, attachmentDs.readCounts); // Fails - input is read 
twice
 
 Review comment:
   @tdudgeon, IMHO the proposed test does not yet exhibit an issue as a valid 
DataSource.getInputStream() implementation would return [a new stream 
positioned at the beginning of the data each time it is 
called](https://docs.oracle.com/javase/8/docs/api/javax/activation/DataSource.html#getInputStream--).
   
   There I have 2 questions:
   Could it be that you faced an issue involving a wrong DataSource 
implementation ?
   Or, was your issue linked to a DataSource returning an input stream that 
don't support mark / reset ?

----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on GitHub and use the
URL above to go to the specific comment.
 
For queries about this service, please contact Infrastructure at:
[email protected]


> MIME-Mutipart DataFormat reads attachment DataSource twice
> ----------------------------------------------------------
>
>                 Key: CAMEL-12078
>                 URL: https://issues.apache.org/jira/browse/CAMEL-12078
>             Project: Camel
>          Issue Type: Bug
>          Components: camel-mail
>    Affects Versions: 2.20.1
>            Reporter: Tim Dudgeon
>            Priority: Minor
>             Fix For: Future
>
>
> As reported on mailing list if an attachment for MIME-Mutipart DataFormat is 
> defined using a DataSource that can only be read once you get an exception.
> http://mail-archives.apache.org/mod_mbox/camel-users/201712.mbox/%3C0e0d4b2e-dc32-c61e-3ccd-7ee14238c485%40gmail.com%3E
> For instance, this happens if the DataSource is created using an InputStream 
> that cannot be read multiple times
> It should be possible to post the data only reading the input a single time.
> I will add a test case shortly.



--
This message was sent by Atlassian JIRA
(v7.6.3#76005)

Reply via email to