2016-06-17 12 views
0

私は、Springフレームワークなしでcamelを使用しています(代わりにCDIを使用しています)。 ラクダファイルコンポーネントのフィルタを設定するにはどうすればよいですか?camel-fileコンポーネントフィルタ(cdi)

マイフィルタクラスは次のようになります。

@Named 
@Stateless 
public class MyFilter<T> implements GenericFileFilter<T> { 
    System.out.println("MyFilter was triggered"); 
    ....... 

は、だから私はこれを試してみました:

<route> 
    <from uri="file://somewhere?filter=#myFilter"/> 
    <to uri="...."/> 
</route> 

しかし、私は取得しています:

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 

私は何をしないのですか?

更新:

Beanが登録されていることに注意してください。私が使用する場合:

<to uri="ejb:java:global/Abc/MyFilter?method=accept"/> 

次にMyFilter was triggeredがログに表示されます。

だから、問題は、ファイル成分フィルタの設定についてです。

答えて

1

更新: キャメル-CDIは、JNDI、レジストリを使用しているため、フィルタは次のように設定されています。

filter=#java:global/Abc/MyFilter 

私は春を使用していないと、フィルタパラメータは、インスタンスを待っているだけでなく、されているのでクラス名は、にTypeConverterは

で何
@Converter 
public class MyGenericFileFilterConverter implements TypeConverters { 

    @Converter 
    public static GenericFileFilter toMYFilter(String filter){ 
     return new MyFilter(); 
    } 
} 

+0

これは良い解決策ではありません。コンバーターを 'String'から' GenericFileFilter'に設定しています。このGenericFileFilterは、使用している実装をハードコードしています。新しい 'GenericFileFilter'を追加すると、これはうまくいかないでしょう。 @Soucianceは言ったように、問題は 'myFilter' beanが登録されていないことです。レジストリを作成し、それをコンテキストに追加する方法はお勧めできませんが、Springを使用するか、Camel CDIセットアップで壊れているものを解決する必要があります。上記の例では、Beanが登録されていると言いますが、そのBean名は使用していませんが、フルパスです。 – AndyN

-1

あなたのレジストリにmyFilterを追加しましたか?一部はあなたのrouteBuilderのconfigureメソッドである必要があり

final CamelContext camelContext = getContext(); 
final org.apache.camel.impl.SimpleRegistry registry = new org.apache.camel.impl.SimpleRegistry(); 
final org.apache.camel.impl.CompositeRegistry compositeRegistry = new org.apache.camel.impl.CompositeRegistry(); 
compositeRegistry.addRegistry(camelContext.getRegistry()); 
compositeRegistry.addRegistry(registry); 
((org.apache.camel.impl.DefaultCamelContext) camelContext).setRegistry(compositeRegistry); 
registry.put("myFilter", new MyFilter()); 

+0

必要がありますdownvote? –

+0

質問はcamel-cdiに関するものなので、あなたの答えはトピックのようなものです。 – sinclair

+0

はい、あなたのエラーは、MyFilterへの参照がレジストリに存在しないため、Camelがそれを見つけることができないことを示しています。 –