I am having difficulty with Spring-Camel getting a HeaderFilterStrategy class
registered as a Bean so it can be found by the Camel Route. My attempts to
annotate the HeaderFilterStrategy custom class seem futile... so how do I
register this thing so it gets found at run time?
I have a camel application with a route utilizing a custom HeaderFilterStrategy
The Strategy Class looks like :
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;
}
}
I register it with camel using a simple registry:
SimpleRegistry registry = new SimpleRegistry();
registry.put("HeaderFilter" ,new HeaderFilter());
.
.
final CamelContext ctx = new DefaultCamelContext(registry);
And I reference it in my Route in
.to("https://myhost/endpoint&headerFilterStrategy=#HeaderFilter")
And all like Ralphy on Christmas night with his trusty Red Rider BB Gun, all is
right with the world.
So, now I am trying to take this pure camel app and put it under Spring. I make
sure all the appropriate Camel, and Spring-Camel and Spring things are
imported.. However, when I attempt to annotate my HeaderStrategy as a Bean for
Spring and it fails:
@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;
}
}
Now when I do this, the IDE basically tells me it can't autowire any of the
parameters in the method calls because there is more than one bean of type
String or Object and no beans of type Exchange found..
At Runtime, Camel does attempt to interpret the route, but throws a failure
with "No Qualifying bean type of "java.lang.String" available, since this is
the first parameter in the method call...
So, How do I get this thing to be able register with annotations correctly? Or
manually register this bean without it attempting to autowire? All I need is
the class to be registered as a BEAN so it can be found by camel at runtime...
Or at least that is what I understand needs to happen... so how the heck to I
do this?