编辑:如果有人在这里遇到类似的问题寻找答案,抱歉,我没有任何有用的建议,我只是放弃并写下所有内容" pure"带有org.apache.commons.mail库的Java。 Apache Camel路由只是检测文件的存在并将文件地址提供给我的Java bean。
还解决了Ninja Code Monkey强调使用consumerTemplate抓取其他文件的问题。
以下原帖:
我正在开发一个Camel Route,它应该根据一些文件输入发送电子邮件(一个列出收件人地址,主题,正文等的自制XML文件)。
它可以正常处理没有附件的电子邮件,但我现在正在尝试添加对附件的支持,并且我不断收到以下异常:
javax.activation.UnsupportedDataTypeException: no object DCH for MIME type multipart/mixed;
我已经查看了Camel关于mail的页面,以及单元测试中的代码示例,但我没有看到我做错了什么。
这是我在Java DSL中的路线:
from("file: ...options... ")
.setHeader("To",xpath("/root/destinataire/text()"))
.setHeader("Subject",xpath("/root/sujet/text()"))
.setHeader("BodyPath",xpath("/root/body/text()"))
.setHeader("AttachementPath",xpath("/root/attachement/text()"))
.process(new org.apache.camel.Processor() {
public void process(org.apache.camel.Exchange exchange) throws Exception {
consumerTemplate = exchange.getContext().createConsumerTemplate();
String body_content = consumerTemplate.receiveBody("file: ...options... ", String.class);
//I'm using the consumerTemplate to get the file containing the body, works fine
exchange.getIn().setBody(body_content);
}
})
.process(new org.apache.camel.Processor() {
public void process(org.apache.camel.Exchange exchange) throws Exception {
String attachementPath = exchange.getIn().getHeader("AttachementPath", String.class);
//Camel's webpage and unit-tests are using addAttachment with DataHandler(FileDataSource), so I'm doing the same
DataHandler fileAttachment = new DataHandler(new FileDataSource(attachementPath));
exchange.getIn().addAttachment("filename.xxx", fileAttachment);
}
})
//the exception is thrown at the next instruction :
.to("smtp://esb@localhost: ... ?password= ...")
;
在搜索问题的时候,我发现了一些相关的信息,但是他们正在处理不同的Java对象,例如MimeBodyPart
,而addAttachment方法需要DataHandler
,所以我没有'我真的知道我应该怎么处理这件事。
至于配置信息,我们在Java 6上运行Camel 2.10.4(是的,它过时了,我们正在进行升级,但这条电子邮件路由应该在生产中在Camel升级之前的方式。)
编辑:其他信息,当我用fileAttachment.getContentType()
检查DataHandler对象时,它正在给我" text / plain"对于文本文件,或者" image / jpeg"和" image / png"与图像。
根据我的理解,这意味着我的问题不在于附件的MIME类型,而在于身体和附件混合在一起的方式。