Apache骆驼多部分路由
我试图通过Apache Camel将文件路由到HTTP文件上传API。但我得到以下例外Apache骆驼多部分路由
org.apache.camel.InvalidPayloadException: No body available of type: java.io.InputStream but has value: [email protected] of type: org.apache.http.entity.mime.MultipartFormEntity on: [email protected] Caused by: No type converter available to convert from type: org.apache.http.entity.mime.MultipartFormEntity to the required type: java.io.InputStream with value [email protected] Exchange[[email protected]]. Caused by: [org.apache.camel.NoTypeConversionAvailableException - No type converter available to convert from type: org.apache.http.entity.mime.MultipartFormEntity to the required type: java.io.InputStream with value [email protected]]
任何人都可以在这里帮助吗? 以下是我试过到目前为止
我的文件上传控制方法与URL映射的API /文件上传需要一个MultipartHttpServletRequest
MyCamelRouter.java
public class MyCamelRouter extends RouteBuilder {
@Override
public void configure() throws Exception {
from("file:C:/src")
.process(new MyProcessor())
.log("POST ${header.CamelFileName} to /upload")
.setHeader(Exchange.CONTENT_TYPE, constant("multipart/form-data"))
.setHeader(Exchange.HTTP_METHOD, constant("POST"))
.to("http:localhost:8080/sampleUploader/api/fileupload")
.log("HTTP response status: ${header.CamelHttpResponseCode}")
.log(LoggingLevel.DEBUG, "HTTP response body:\n${body}");
}
}
和MyProcessor.java
public class MyProcessor implements Processor {
public void process(Exchange exchange) throws Exception {
File filetoUpload = exchange.getIn().getBody(File.class);
String fileName = exchange.getIn().getHeader(Exchange.FILE_NAME, String.class);
MultipartEntityBuilder entity = MultipartEntityBuilder.create();
entity.addTextBody("fileName", fileName);
entity.addBinaryBody("file", new File(filePath));
exchange.getOut().setBody(entity.build());
}
}
This是我跟着链接,这个(斯卡拉DSL)
的信息是明确的,当它说,你需要一个InputStream
的方法构建返回HttpEntity。
您可以用该方法的getContent()尝试
试图改变自己:
exchange.getOut().setBody(entity.build());
到:
exchange.getOut().setBody(entity.build().getContent());
UPDATE
您的评论,你可以做其他的事情以后是:
ByteArrayOutputStream out = new ByteArrayOutputStream();
entity.build().writeTo(out);
InputStream inputStream = new ByteArrayInputStream(out.toByteArray());
exchange.getOut().setBody(inputStream);
感谢您的回复。我尝试了你的建议,但我得到以下异常'java.lang.UnsupportedOperationException:多部分表单实体没有实现#getContent()'有没有其他方法? – 2015-03-03 12:56:34
我编辑了我的答案 – Panchitoboy 2015-03-03 13:09:48
现在我可以将请求发送到API。但我认为它不包含实际的文件。请参阅 以下的API实现'public void handleFileUpload(MultipartHttpServletRequest request){ Iterator
我的回答可以帮助您? – Panchitoboy 2015-03-06 10:56:49
@Panchitoboy是的我设法用HTTPClient在外部发布请求。非常感谢您的帮助... – 2015-03-09 18:03:09