1

我在使用 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")

就像圣诞节晚上拉尔菲带着他值得信赖的红骑士 BB 枪一样,世界上一切都很好。

所以,现在我想把这个纯骆驼应用程序放在 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 确实尝试解释路由,但由于“没有可用的“java.lang.String”的限定 bean 类型而引发失败,因为这是方法调用中的第一个参数......

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

4

1 回答 1

0

我想通了,我没有正确使用注释我将以下内容添加到我的 AppConfig 类中:

@Configuration
public class AppConfig{

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

我不确定上面的建议是否有效,但这显然有效。

于 2018-07-23T14:13:05.260 回答