我在使用 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,以便骆驼可以在运行时找到它......或者至少这是我理解需要发生的......那么我该怎么做呢?