Ich benutze Kamel ohne das Spring-Framework (mit CDI statt). Wie kann ich einen Filter für die camel-Datei-Komponente einstellen?camel-datei komponentenfilter mit cdi
sieht Mein Filterklasse wie folgt aus:
@Named
@Stateless
public class MyFilter<T> implements GenericFileFilter<T> {
System.out.println("MyFilter was triggered");
.......
So habe ich versucht, dies:
<route>
<from uri="file://somewhere?filter=#myFilter"/>
<to uri="...."/>
</route>
Aber ich bin immer:
java.lang.IllegalArgumentException: Could not find a suitable setter for
property: filter as there isn't a setter method with same type:
java.lang.String nor type conversion possible: No type converter
available to convert from type: java.lang.String to the required type:
org.apache.camel.component.file.GenericFileFilter with value #myFilter
Was bin ich?
Update:
Bitte beachten Sie, dass die Bohne registriert ist. Wenn ich benutze:
<to uri="ejb:java:global/Abc/MyFilter?method=accept"/>
dann MyFilter was triggered
zeigt im Protokoll auf.
Das Problem besteht also in der Konfiguration des Dateikomponentenfilters.
Dies ist keine gute Lösung. Sie richten einen Konverter von einem 'String' zu einem' GenericFileFilter' ein, der die von Ihnen verwendete Implementierung fest codiert. Wenn Sie einen neuen 'GenericFileFilter' hinzufügen würden, würde dies nicht funktionieren. Wie @Souciance sagte, ist Ihr Problem, dass die 'myFilter' Bean nicht registriert ist. Das Erstellen einer Registrierung und das Hinzufügen zu dem Kontext ist möglicherweise nicht Ihre bevorzugte Methode, aber Sie müssen entweder Spring verwenden oder herausfinden, was in Ihrem Camel CDI-Setup fehlerhaft ist. Sie werden in Ihrem obigen Beispiel bemerken, wenn Sie sagen, dass die Bean registriert ist, verwenden Sie nicht ihren Bean-Namen, sondern den vollständigen Pfad. – AndyN