Apache Camel无法创建端点

时间:2015-02-06 09:47:29

标签: apache maven apache-camel activemq

我是Apache Camel的新手,我需要将它与Apache ActiveMQ集成。

我尝试了一个基本的例子,我在我的计算机上安装了FileZilla Server和ActiveMQ(两者兼有),我想将一个文件从本地服务器复制到我在Active MQ中创建的JMS队列;问题是CamelContext的方法start()抛出 org.apache.camel.FailedToCreateRouteException

这是我的代码(ftpLocation中的地址是我计算机的静态地址):

import javax.jms.ConnectionFactory;

import org.apache.activemq.ActiveMQConnection;
import org.apache.activemq.ActiveMQConnectionFactory;
import org.apache.camel.CamelContext;
import org.apache.camel.Exchange;
import org.apache.camel.Processor;
import org.apache.camel.builder.RouteBuilder;
import org.apache.camel.component.jms.JmsComponent;
import org.apache.camel.impl.DefaultCamelContext;

public class FtpToJmsExample
{

    private static String url = ActiveMQConnection.DEFAULT_BROKER_URL;
    private static String ftpLocation = "ftp://192.168.1.10/incoming?username=Luca&password=Luca";

    public void start() throws Exception
    {
        CamelContext context = new DefaultCamelContext();
        ConnectionFactory connectionFactory = new ActiveMQConnectionFactory(url);
        context.addComponent("jms", JmsComponent.jmsComponentAutoAcknowledge(connectionFactory));

        context.addRoutes( 
                new RouteBuilder() {
                    public void configure() 
                    {
                        from(ftpLocation).
                        process(executeFirstProcessor()).
                        to("jms:TESTQUEUE");             
                    }
                });

        System.out.println("START");
        context.start();

        System.out.println("wait");
        System.out.println(loaded);

        Thread.sleep(3000);

        while (loaded == false) 
        { 
            System.out.println("in attesa\n");
        }

        context.stop();

        System.out.println("stop context!");
        System.out.println(loaded);
    }

    public static void main(String args[]) throws Exception
    {
        FtpToJmsExample example = new FtpToJmsExample();
        example.start();
    }

    private Processor executeFirstProcessor() 
    {
        return new Processor() {
            @Override
            public void process(Exchange exchange) 
            {
                System.out.println("We just downloaded : "+ 
                        exchange.getIn().getHeader("CamelFileName"));
                loaded = true;
            }
        };
    }
}

这是POM.xml

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">

    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.apache.camel</groupId>
        <artifactId>examples</artifactId>
        <version>2.11.0</version>
    </parent>
    <artifactId>camel-example-jms-file</artifactId>
    <name>Camel :: Example :: JMS-File</name>
    <description>An example that persists messages from FTP site to JMS</description>

    <dependencies>

        <!-- Camel dependencies -->
        <dependency>
            <groupId>org.apache.camel</groupId>
            <artifactId>camel-core</artifactId>
        </dependency>
        <dependency>
            <groupId>org.apache.camel</groupId>
            <artifactId>camel-jms</artifactId>
        </dependency>

        <!-- ActiveMQ dependencies -->
        <dependency>
            <groupId>org.apache.activemq</groupId>
            <artifactId>activemq-broker</artifactId>
        </dependency>
        <dependency>
            <groupId>org.apache.activemq</groupId>
            <artifactId>activemq-client</artifactId>
        </dependency>
        <dependency>
            <groupId>org.apache.activemq</groupId>
            <artifactId>activemq-camel</artifactId>
        </dependency>
        <dependency>
            <groupId>org.apache.xbean</groupId>
            <artifactId>xbean-spring</artifactId>
            <exclusions>
                <exclusion>
                    <groupId>org.springframework</groupId>
                    <artifactId>spring</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
    </dependencies>

    <profiles>
        <profile>
            <id>Example</id>
            <properties>
                <target.main.class>com.ftpToJms.FtpToJMSExample</target.main.class>
            </properties>
        </profile>
    </profiles>
</project>

这是错误的报告

Exception in thread "main" org.apache.camel.FailedToCreateRouteException: Failed to create route route1: Route(route1)[[From[ftp://192.168.1.10/incoming?username=Luc... because of Failed to resolve endpoint: ftp://192.168.1.10/incoming?password=Luca&username=Luca due to: No component found with scheme: ftp
    at org.apache.camel.model.RouteDefinition.addRoutes(RouteDefinition.java:181)
    at org.apache.camel.impl.DefaultCamelContext.startRoute(DefaultCamelContext.java:750)
    at org.apache.camel.impl.DefaultCamelContext.startRouteDefinitions(DefaultCamelContext.java:1829)
    at org.apache.camel.impl.DefaultCamelContext.doStartCamel(DefaultCamelContext.java:1609)
    at org.apache.camel.impl.DefaultCamelContext.doStart(DefaultCamelContext.java:1478)
    at org.apache.camel.support.ServiceSupport.start(ServiceSupport.java:61)
    at org.apache.camel.impl.DefaultCamelContext.start(DefaultCamelContext.java:1446)
    at ftptojms.FtpToJmsExample.start(FtpToJmsExample.java:51)
    at ftptojms.FtpToJmsExample.main(FtpToJmsExample.java:73)
Caused by: org.apache.camel.ResolveEndpointFailedException: Failed to resolve endpoint: ftp://192.168.1.10/incoming?password=Luca&username=Luca due to: No component found with scheme: ftp
    at org.apache.camel.impl.DefaultCamelContext.getEndpoint(DefaultCamelContext.java:514)
    at org.apache.camel.util.CamelContextHelper.getMandatoryEndpoint(CamelContextHelper.java:62)
    at org.apache.camel.model.RouteDefinition.resolveEndpoint(RouteDefinition.java:191)
    at org.apache.camel.impl.DefaultRouteContext.resolveEndpoint(DefaultRouteContext.java:108)
    at org.apache.camel.impl.DefaultRouteContext.resolveEndpoint(DefaultRouteContext.java:114)
    at org.apache.camel.model.FromDefinition.resolveEndpoint(FromDefinition.java:72)
    at org.apache.camel.impl.DefaultRouteContext.getEndpoint(DefaultRouteContext.java:90)
    at org.apache.camel.model.RouteDefinition.addRoutes(RouteDefinition.java:861)
    at org.apache.camel.model.RouteDefinition.addRoutes(RouteDefinition.java:176)
    ... 8 more

有人可以帮助我吗?

很抱歉这篇长文和不完美的英文。

1 个答案:

答案 0 :(得分:3)

您需要将camel-ftp添加到类路径中。如果您使用Maven,那么只需将其作为依赖项添加到pom.xml

即可