Just a guess but could it be that you are converting the attachment to a string`? In the documentation it is converted to a byte[] first.
On Thu, Apr 6, 2017 at 12:12 AM, Gary [via Camel] < ml-node+s465427n5797032...@n5.nabble.com> wrote: > here is my code for extracting attachments - thank you - I also use this > with CSV files and it works ok. > > public class EmailProcessor implements Processor { > > private static final Logger LOG = > Logger.getLogger(EmailProcessor.class); > > > private SimpleDateFormat sdf = new > SimpleDateFormat("yyyy-MM-dd-hh-mm-ss"); > > > public void process(Exchange exchange) throws Exception { > > LOG.debug("Entering EmailProcessor..."); > > Map<String, DataHandler> attachments = exchange.getIn() > .getAttachments(); > > if ((null == attachments) || (attachments.size() < 1)) { > throw new EmailProcessorException("Null or 0 > attachements"); > } else { > LOG.debug("attachments.size = " + > attachments.size()); > } > > Map<String, String> emailAttr = > gatherEmailHeaderInformation(exchange); > > List<String> attachmentFilenames = new > ArrayList<String>(); > > try { > > List<FilenameAndContents> attachmentArray = new > ArrayList<FilenameAndContents>(); > > for (String name : attachments.keySet()) { > > DataHandler dh = attachments.get(name); > > // get the file name > String filename = dh.getName(); > > // convert the input string to a string > String contents = > exchange.getContext().getTypeConverter() > > .convertTo(String.class, > dh.getInputStream()); > > LOG.info("filename: " + filename); > > attachmentFilenames.add(filename); > > FilenameAndContents attachmentFile = new > FilenameAndContents(); > attachmentFile.setFileContents(contents); > attachmentFile.setFileName(filename); > attachmentArray.add(attachmentFile); > > } > > exchange.getIn().setBody(attachmentArray); > > } catch (org.apache.camel.TypeConversionException tce) { > throw new EmailProcessorException( > "Unable to type convert from file > to string", tce); > } catch (java.io.IOException ioe) { > throw new EmailProcessorException( > "IOException while obtaining Input > Stream", ioe); > } catch (java.lang.UnsupportedOperationException uoe) { > throw new EmailProcessorException( > "UnsupportedOperationException add > operation is not supported by list", > uoe); > } catch (java.lang.ClassCastException cce) { > throw new EmailProcessorException( > "ClassCastException element > prevents it from being added to list", > cce); > } catch (java.lang.NullPointerException npe) { > throw new EmailProcessorException( > "NullPointerException element is > null", npe); > } catch (java.lang.IllegalArgumentException iae) { > throw new EmailProcessorException( > "IllegalArgumentException property > of element prevents it from being added to list", > iae); > } > > archiveEmail(emailAttr, attachmentFilenames, exchange); > > LOG.debug("Exiting EmailProcessor."); > } > > private Map<String, String> gatherEmailHeaderInformation(Exchange > exchange) { > > final String emailBody = > exchange.getIn().getBody(String.class); > > > final Message mailMessage = exchange.getIn().getBody( > javax.mail.Message.class); > > Map<String, String> attr = new HashMap<String, String>(); > > try { > if (null != mailMessage) { > > final Address[] fromArray = > mailMessage.getFrom(); > if (null != fromArray) { > String fromStr = > convertAddressListToString(fromArray); > attr.put("from", fromStr); > } > > final Address[] toArray = mailMessage > .getRecipients(javax.mail. > Message.RecipientType.TO); > if (null != toArray) { > String toStr = > convertAddressListToString(fromArray); > attr.put("to", toStr); > } > > final Address[] ccArray = mailMessage > .getRecipients(javax.mail. > Message.RecipientType.CC); > if (null != ccArray) { > String ccStr = > convertAddressListToString(fromArray); > attr.put("CC", ccStr); > } > > final Address[] bccArray = mailMessage > > .getRecipients(javax.mail.Message.RecipientType.BCC); > > if (null != bccArray) { > String bccStr = > convertAddressListToString(fromArray); > attr.put("BCC", bccStr); > } > > final String subjectStr = > mailMessage.getSubject(); > if (null != subjectStr) { > attr.put("subject", subjectStr); > } > > final Date sentDate = > mailMessage.getReceivedDate(); > if (null != sentDate) { > attr.put("sentDate", > sdf.format(sentDate)); > } > > final Date receivedDate = > mailMessage.getSentDate(); > if (null != receivedDate) { > attr.put("receivedDate", > sdf.format(receivedDate)); > } > > if (null != emailBody) { > attr.put("body", emailBody); > } > > } > } catch (javax.mail.MessagingException me) { > LOG.error("Unable to gather email header > information"); > } > > return attr; > > } > > private void archiveEmail(Map<String, String> attr, > List<String> attachmentFilenames, Exchange > exchange) { > > final String archivePath = > exchange.getIn().getHeader("emailArchive", > > String.class); > > Path parentP = Paths.get(archivePath); > Path fileP; > if (null != attr.get("receivedDate")) { > fileP = Paths.get(archivePath, > exchange.getExchangeId() + "." > + attr.get("receivedDate")); > } else { > fileP = Paths.get(archivePath, > exchange.getExchangeId()); > } > > try { > Files.createDirectories(parentP); > } catch (IOException ioe) { > LOG.error("Unable to create email archive > directories"); > ioe.printStackTrace(); > } > > Charset charset = Charset.forName("utf-8"); > > try (BufferedWriter bufferedWriter = > Files.newBufferedWriter(fileP, > charset)) { > > if (null != attr.get("from")) { > bufferedWriter.write("From:" + > attr.get("from")); > bufferedWriter.newLine(); > } > > if (null != attr.get("to")) { > bufferedWriter.write("To:" + > attr.get("to")); > bufferedWriter.newLine(); > } > > if (null != attr.get("CC")) { > bufferedWriter.write("CC:" + > attr.get("CC")); > bufferedWriter.newLine(); > } > > if (null != attr.get("BCC")) { > bufferedWriter.write("BCC" + > attr.get("BCC")); > bufferedWriter.newLine(); > } > > if (null != attr.get("subject")) { > bufferedWriter.write("Subject:" + > attr.get("subject")); > bufferedWriter.newLine(); > } > > if (null != attr.get("sentDate")) { > bufferedWriter.write("Sent Date:" + > attr.get("sentDate")); > bufferedWriter.newLine(); > } > > if (null != attr.get("receivedDate")) { > bufferedWriter.write("Received Date:" > + > attr.get("receivedDate")); > bufferedWriter.newLine(); > } > > if (null != attr.get("body")) { > bufferedWriter.write("Body:" + > attr.get("body")); > bufferedWriter.newLine(); > } > > for (String s : attachmentFilenames) { > bufferedWriter.write("Attachment File:" + > s); > bufferedWriter.newLine(); > } > > } catch (IOException ioe) { > LOG.error("Unable to write email archive"); > ioe.printStackTrace(); > } > > } > > private String convertAddressListToString(Address[] adds) { > > String returnStr = ""; > > for (Address adr : adds) { > returnStr = returnStr + adr.toString() + " "; > } > > return returnStr; > > } > } > Gary Lee Mills > > > ------------------------------ > If you reply to this email, your message will be added to the discussion > below: > http://camel.465427.n5.nabble.com/JAXB-Marshalling-from- > email-route-tp5797029p5797032.html > To start a new topic under Camel - Users, email > ml-node+s465427n465428...@n5.nabble.com > To unsubscribe from Camel - Users, click here > <http://camel.465427.n5.nabble.com/template/NamlServlet.jtp?macro=unsubscribe_by_code&node=465428&code=c291Y2lhbmNlLmVxZGFtLnJhc2h0aUBnbWFpbC5jb218NDY1NDI4fDE1MzI5MTE2NTY=> > . > NAML > <http://camel.465427.n5.nabble.com/template/NamlServlet.jtp?macro=macro_viewer&id=instant_html%21nabble%3Aemail.naml&base=nabble.naml.namespaces.BasicNamespace-nabble.view.web.template.NabbleNamespace-nabble.view.web.template.NodeNamespace&breadcrumbs=notify_subscribers%21nabble%3Aemail.naml-instant_emails%21nabble%3Aemail.naml-send_instant_email%21nabble%3Aemail.naml> > -- View this message in context: http://camel.465427.n5.nabble.com/JAXB-Marshalling-from-email-route-tp5797029p5797033.html Sent from the Camel - Users mailing list archive at Nabble.com.