创建自定义组件扩展UriEndpointComponent时出错(无法自动创建组件)

时间:2014-06-11 11:32:51

标签: java apache-camel

我为专有产品创建了一个组件(使用maven archetype generate)。它似乎工作得很好(uri参数到字段的自动映射简直太棒了)。现在我阅读about Annotations,如@UriParam来优化生成的maven站点(我还注释了Endpoint:@UriEndpoint(scheme = "myScheme"))。在同一页面上,我读到最好从UriEndpointComponent扩展为此我必须在组件中添加构造函数:

public mySchemeComponent(final Class<? extends Endpoint> endpointClass) {
    super(endpointClass);
}

但是没有停止工作: Pro ...因为无法解析端点:myScheme:...由于:无法自动创建组件:myScheme

那么如何正确扩展UriEndpointComponent 或者是否有使用此示例?我发现只有this,但这也是“仅”扩展DefaultComponent。

2 个答案:

答案 0 :(得分:0)

Camel使用服务查找器模式来定位新添加的组件。

这里引用Writing Components

  

支持自动发现组件添加文件   META-INF / services / org / apache / camel / component / FOO其中FOO是URI   组件的方案以及在组件上创建的任何相关端点   飞。后一个文件应包含组件的定义   类。例如,如果您的组件是由实现的   com.example.CustomComponent类,服务文件应该包含   以下行 -      class=com.example.CustomComponent

答案 1 :(得分:0)

我自己找到了一个例子(间接链接自here):

https://github.com/apache/camel/blob/trunk/camel-core/src/main/java/org/apache/camel/component/timer/TimerComponent.java

Trick是提供默认构造函数:

  public TimerComponent() {
        super(TimerEndpoint.class);
  }

就我而言:

  public mySchemeComponent() {
        super(mySchemeEndpoint.class);
  }

这样就可以了。