我正在尝试设置一个用于通过HTTP传输文件的Camel路由。我也试图理解这个概念,因为我是新手。
当我编写类似下面的内容时,这是否意味着我通过HTTP路由一条简单的消息?在这种情况下,我可以将Jetty称为消费者吗?我可以运行以下代码并调用浏览器并成功查看消息。
from("jetty://http://localhost:32112/greeting")
.setBody(simple("Hello, world!"));
但是,我想通过HTTP发送一条简单的消息(最终是一个XML),之后我想将它保存在磁盘上并进一步分析。代码如下工作吗?
CamelContext context = new DefaultCamelContext();
ProducerTemplate template = context.createProducerTemplate();
template.sendBody("direct:start", "This is a test message");
from("direct:start")
.to("jetty://localhost:32112/greeting");
from("jetty://http://localhost:32112/greeting")
.to("direct:end");
我应该不使用direct:从这里开始解析XML吗?
非常感谢你的帮助。
答案 0 :(得分:0)
首先,您必须创建路线并开始上下文。然后,您可以通过模板发送消息。
路线可能如下所示
from("jetty:http://0.0.0.0:32112/greeting")
.routeId("xml-converter-route").autoStartup(false)
.bean(xmlConverterBean, "convertXmlMethodToBeCalledInBean()")
;
答案 1 :(得分:0)
如果您只想传输数据,则不使用restlet或netty-http4。比码头更轻盈。
from("restlet:/http://localhost:32112/greeting").convertBodyTo(String.class).log(LoggingLevel.INFO, "filetransfer", "log of body: ${body} and headers ${headers}").to("file://C:/test?fileName=body.txt");
答案 2 :(得分:0)
这是一个骆驼测试,可以帮助您了解这些组件的工作原理。
public class CamelRESTExampleTest extends CamelTestSupport {
Logger LOG = LoggerFactory.getLogger(CamelRESTExampleTest.class);
@Override
protected RouteBuilder createRouteBuilder() {
return new RouteBuilder() {
public void configure() {
// Create a service listening on port 8080
from("restlet:http://localhost:8080/xmlFileService?restletMethod=post")
.process(new Processor() {
public void process(Exchange exchange) throws Exception {
String rawXML = exchange.getIn().getBody(String.class);
LOG.info("rawXML=" + rawXML);
}
});
// Read files from the local directory and send to the service.
// Create a test.xml file in this directory and it will be read in
from("file:src/test/resources/data?noop=true")
.to("restlet:http://localhost:8080/xmlFileService?restletMethod=post");
}
};
}
@Test
public void test() throws InterruptedException {
// Give the route time to complete
TimeUnit.SECONDS.sleep(5);
}
}