在春季骆驼头HeaderFilterStrategy Bean注册

时间:2018-07-18 20:49:58

标签: spring spring-boot apache-camel javabeans spring-camel

Spring-Camel在将HeaderFilterStrategy类注册为Bean时遇到了困难,因此可以通过Camel Route找到它。我尝试注释HeaderFilterStrategy自定义类的尝试似乎是徒劳的...所以我该如何注册该东西以便在运行时找到它?

我有一个骆驼应用程序,该应用程序具有使用自定义HeaderFilterStrategy的路由

策略类如下:

public class HeaderFilter implements HeaderFilterStrategy {
    @Override
    public boolean applyFilterToCamelHeaders(String s, Object o, Exchange exchange) {
      return false;
    }

   @Override
   public boolean applyFilterToExternalHeaders(String s, Object o, Exchange exchange) {
    return true;
   }
}

我使用一个简单的注册表向骆驼注册:

    SimpleRegistry registry = new SimpleRegistry();
    registry.put("HeaderFilter" ,new HeaderFilter());
    .
    .
    final CamelContext ctx = new DefaultCamelContext(registry);

我在“路线”中引用了它

.to("https://myhost/endpoint&headerFilterStrategy=#HeaderFilter")

在圣诞节之夜,就像拉尔夫(Ralphy)带着他值得信赖的Red Rider BB Gun一样,一切都与世界同在。

因此,现在我正尝试将这个纯骆驼应用程序放在Spring之下。我确保所有适当的Camel以及Spring-Camel和Spring都已导入。.但是,当我尝试将HeaderStrategy注释为Spring Bean时,它失败了:

@Component
public class HeaderFilter implements HeaderFilterStrategy {

@Bean
  @Override
  public boolean applyFilterToCamelHeaders(String s, Object o, Exchange exchange) {
    return false;
  }
  @Override
  public boolean applyFilterToExternalHeaders(String s, Object o, Exchange exchange) {
    return true;
  }
}

现在,当我执行此操作时,IDE基本上会告诉我它无法自动连接方法调用中的任何参数,因为存在多个String或Object类型的bean,并且没有找到Exchange类型的bean。 >

在运行时,Camel确实尝试解释路由,但是由于“没有合格的Bean类型的“ java.lang.String”可用而引发了故障,因为这是方法调用中的第一个参数...

那么,如何获得能够正确注册注释的东西?还是手动注册此bean,而不尝试自动装配?我所需要做的就是将该类注册为BEAN,以便可以在运行时通过骆驼找到它。或者至少这就是我所理解的需要发生的事情……那么我该怎么做呢?

1 个答案:

答案 0 :(得分:0)

我弄清楚了,我没有正确使用批注我在AppConfig类中添加了以下内容:

@Configuration
public class AppConfig{

  @Bean 
  public HeaderFilter HeaderFilter(){
    return new HeaderFilter();
  }
}

我不确定以上建议是否会奏效,但这显然可以。