Apache Camel“找不到使用scheme:stream的组件”

时间:2017-09-13 11:29:13

标签: java maven apache-camel

我刚刚开始了解Camel(和Maven),我有一个非常简单的Java示例:

 public static void main( String[] args ) throws Exception {    
    CamelContext context = new DefaultCamelContext();

    context.addRoutes(new RouteBuilder() {

          public void configure() { 
            from("direct:in").to("stream:out");     
          }

    });

    context.start();

    ProducerTemplate template = context.createProducerTemplate();
    template.sendBody("direct:in", "Hello Text World"); 
    template.sendBody("direct:in", "Hello Bytes World".getBytes());
}

我的maven POM文件包括:

<dependency>
     <groupId>org.apache.camel</groupId>
     <artifactId>camel-stream</artifactId>
     <version>2.19.2</version>
</dependency>

我仍然收到org.apache.camel.FailedToCreateRouteException,因为没有找到scheme:stream

的组件
  

线程“main”中的异常org.apache.camel.FailedToCreateRouteException:无法在以下位置创建路由route1:&gt;&gt;&gt;至[stream:out]&lt;&lt;&lt;在路线:路线(ro   to:找不到scheme:stream的组件           在org.apache.camel.model.RouteDefinition.addRoutes(RouteDefinition.java:1298)           在org.apache.camel.model.RouteDefinition.addRoutes(RouteDefinition.java:204)           at org.apache.camel.impl.DefaultCamelContext.startRoute(DefaultCamelContext.java:1087)           at org.apache.camel.impl.DefaultCamelContext.startRouteDefinitions(DefaultCamelContext.java:3544)           at org.apache.camel.impl.DefaultCamelContext.doStartCamel(DefaultCamelContext.java:3275)           at org.apache.camel.impl.DefaultCamelContext.access $ 000(DefaultCamelContext.java:202)           在org.apache.camel.impl.DefaultCamelContext $ 2.call(DefaultCamelContext.java:3093)           at org.apache.camel.impl.DefaultCamelContext $ 2.call(DefaultCamelContext.java:3089)           at org.apache.camel.impl.DefaultCamelContext.doWithDefinedClassLoader(DefaultCamelContext.java:3112)           at org.apache.camel.impl.DefaultCamelContext.doStart(DefaultCamelContext.java:3089)           在org.apache.camel.support.ServiceSupport.start(ServiceSupport.java:61)           at org.apache.camel.impl.DefaultCamelContext.start(DefaultCamelContext.java:3026)           在mavenCamelRiding.binFileStreamToCamel.MainStreamRouter.main(MainStreamRouter.java:37)   由以下原因引起:org.apache.camel.ResolveEndpointFailedException:无法解析端点:stream:// out,原因是:找不到带有scheme的流:stream           at org.apache.camel.impl.DefaultCamelContext.getEndpoint(DefaultCamelContext.java:729)           at org.apache.camel.util.CamelContextHelper.getMandatoryEndpoint(CamelContextHelper.java:80)           at org.apache.camel.model.RouteDefinition.resolveEndpoint(RouteDefinition.java:219)           at org.apache.camel.impl.DefaultRouteContext.resolveEndpoint(DefaultRouteContext.java:112)           at org.apache.camel.impl.DefaultRouteContext.resolveEndpoint(DefaultRouteContext.java:118)           at org.apache.camel.model.SendDefinition.resolveEndpoint(SendDefinition.java:62)           在org.apache.camel.model.SendDefinition.createProcessor(SendDefinition.java:56)           at org.apache.camel.model.ProcessorDefinition.makeProcessorImpl(ProcessorDefinition.java:549)           在org.apache.camel.model.ProcessorDefinition.makeProcessor(ProcessorDefinition.java:510)           at org.apache.camel.model.ProcessorDefinition.addRoutes(ProcessorDefinition.java:226)           在org.apache.camel.model.RouteDefinition.addRoutes(RouteDefinition.java:1295)

任何想法,问题可能在哪里?到目前为止,Google无法帮助我。

编辑1:这是我的POM文件的其余部分

  <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/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>

  <groupId>mavenCamelRiding</groupId>
  <artifactId>binFileStreamToCamel</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <packaging>jar</packaging>

  <name>binFileStreamToCamel</name>
  <url>http://maven.apache.org</url>

  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  </properties>

  <dependencies>

    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>3.8.1</version>
      <scope>test</scope>
    </dependency>

    <dependency>
        <groupId>org.apache.camel</groupId>
        <artifactId>camel-core</artifactId>
        <version>2.19.2</version>
    </dependency>

    <dependency>
         <groupId>org.apache.camel</groupId>
         <artifactId>camel-stream</artifactId>
         <version>2.19.2</version>
    </dependency>

  </dependencies>
</project>

编辑2:

这显然与我构建和启动程序的方式有关。这让我很困惑,因为到目前为止我没有遇到任何其他路由选项(jms,activemq,file,bean)。

我现在测试了构建并在Eclipse中运行而不是使用控制台。所以我右键点击了项目文件夹并选择了“Build Project”。然后我选择了“Run As”和“Java Application”。 Eclipse控制台为我提供了预期的hello-world输出。

为什么它不适用于控制台?

编辑3:

现在而不是先使用“mvn compile”,进入“target \ classes”文件夹然后运行“java package.classname”,我执行了这个:

mvn compile exec:java -Dexec.mainClass = package.classname

它给了我想要的hello-world-output。

听起来像课程路径问题?如何在没有maven的情况下启动示例程序?

2 个答案:

答案 0 :(得分:0)

我拿了你的来源并在我的机器上测试过并且能够看到输出,如下所示:

Hello Text World Hello Bytes World

您的本地.m2可能缺少camel-stream jar。或者你可以删除.m2 \ repository \ org \ apache \ camel \ camel-stream \ 2.19.2下的camel-stream文件夹,做一个maven clean install并尝试再次运行它。

答案 1 :(得分:0)

现在我有两个选项可以在控制台上运行我的示例程序:

第一个选项:

mvn编译exec:java -Dexec.mainClass = package.classname(在pom.xml文件夹中)

第二个选项:

  1. mvn依赖:copy-dependencies compile(在pom.xml文件夹中)
  2. java -classpath .. \ dependency *;。 package.classname(在文件夹target \ classes中)
  3. 所以这是一个类路径问题。它只是没有解释,为什么在早期的例子中java能够找到camel-core和camel-jms而没有额外的类路径信息,但不是camel-stream。