我很难让Spring-Camel获得一个注册为Bean的HeaderFilterStrategy类,这样它就可以被Camel Route找到。我尝试注释HeaderFilterStrategy定制类似乎是徒劳的……那么我如何注册这个东西,以便在运行时找到它呢?
我有一个camel应用程序,其中包含一个利用自定义HeaderFilterStrategy的路由
Strategy类如下所示:
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;
}
}我使用一个简单的注册表将其注册到camel:
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确实尝试解释该路由,但抛出了一个失败消息,"No Qualifying type of "java.lang.String“available,因为这是方法调用中的第一个参数……
那么,我如何让这个东西能够正确地注册注释呢?或者手动注册此bean而不尝试自动连接?我所需要的就是注册为BEAN的类,这样它就可以在运行时被camel找到…至少这是我所理解的需要发生的事情。那么我到底该怎么做呢?
发布于 2018-07-23 22:13:05
我弄明白了,我没有正确使用添加到我的AppConfig类中的annotationsI:
@Configuration
public class AppConfig{
@Bean
public HeaderFilter HeaderFilter(){
return new HeaderFilter();
}
}我不确定上面的建议是否会奏效,但这显然是可行的。
https://stackoverflow.com/questions/51410789
复制相似问题