2016-06-17 5 views
0

저는 스프링 프레임 워크없이 camel을 사용하고 있습니다 (대신 CDI 사용). 낙타 파일 구성 요소에 대한 필터를 설정하려면 어떻게해야합니까?cdi가있는 camel-file 구성 요소 필터

내 필터 클래스는 다음과 같습니다

@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 

나는 무엇을 놓치고?

업데이트 :

콩이 등록되어 있습니다. 내가 사용하는 경우 :

<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'를 추가한다면 이것은 작동하지 않을 것입니다. @Souciance가 말했듯이, 문제는'myFilter' 빈이 등록되어 있지 않다는 것입니다. 레지스트리를 생성하여 컨텍스트에 추가하는 것은 선호하는 방법이 아니지만 Spring을 사용하거나 Camel CDI 설정에서 손상된 부분을 해결해야합니다. 위의 예제에서 bean이 등록되었다고 말할 때 bean 이름을 사용하지 않지만 full path라는 것을 알 수 있습니다. – AndyN

-1

myFilter를 레지스트리에 추가 했습니까?

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()); 

해당 부분은 routeBuilder의 configure 메소드에 있어야합니다.

+0

downvote? –

+0

질문은 camel-cdi에 관한 것이므로 답변은 주제와는 관련이 없습니다. – sinclair

+0

예. 그러나 오류는 MyFilter에 대한 참조가 레지스트리에 존재하지 않아서 Camel에서 찾을 수 없음을 나타냅니다. –