使用camel通过HTTP进行文件传输

时间:2016-09-06 12:28:10

标签: java apache-camel

我正在尝试设置一个用于通过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吗?

非常感谢你的帮助。

3 个答案:

答案 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);
    }
}