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?

Reply via email to