2016-06-17 9 views
3

私は、pollStrategyが定義され、レジストリに追加されたコンシューマエンドポイントとしてftp uriを持つ標準ルートを持っています。しかし、次のエラーが表示されています:pollStrategyを使用したCamel FTPは失敗します

Caused by: java.lang.IllegalArgumentException: Could not find a suitable setter for property: pollStrategy 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.spi.PollingConsumerPollStrategy with value #pollingStrategy 
     at org.apache.camel.util.IntrospectionSupport.setProperty(IntrospectionSupport.java:588) 
     at org.apache.camel.util.IntrospectionSupport.setProperty(IntrospectionSupport.java:616) 
     at org.apache.camel.util.IntrospectionSupport.setProperties(IntrospectionSupport.java:473) 
     at org.apache.camel.util.IntrospectionSupport.setProperties(IntrospectionSupport.java:483) 
     at org.apache.camel.util.EndpointHelper.setProperties(EndpointHelper.java:255) 
     at org.apache.camel.impl.DefaultComponent.setProperties(DefaultComponent.java:257) 
     at org.apache.camel.component.file.GenericFileComponent.createEndpoint(GenericFileComponent.java:67) 
     at org.apache.camel.component.file.GenericFileComponent.createEndpoint(GenericFileComponent.java:37) 
     at org.apache.camel.impl.DefaultComponent.createEndpoint(DefaultComponent.java:114) 
     at org.apache.camel.impl.DefaultCamelContext.getEndpoint(DefaultCamelContext.java:568) 

私はさまざまな組み合わせを試みましたが、いつもこのエラーで終わります。誰でも私が見逃しているものを見つけることができますか?私のコードは、私が見たCamel単体テストとかなり似ています。ルートは次のようになります。

import org.apache.camel.*; 
import org.apache.camel.builder.RouteBuilder; 
import org.apache.camel.impl.DefaultPollingConsumerPollStrategy; 
import org.apache.camel.spi.PollingConsumerPollStrategy; 
import org.apache.camel.util.ServiceHelper; 
import org.apache.commons.lang3.StringUtils; 
import java.util.HashMap; 
import java.util.Map; 
import java.util.concurrent.CountDownLatch; 
import static org.apache.camel.builder.ProcessorBuilder.setBody; 

public class Test extends RouteBuilder { 

    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(); 
    private final CountDownLatch latch = new CountDownLatch(1); 

    @Override 
    public void configure() throws Exception { 
    ExceptionBuilder.setup(this); 
    compositeRegistry.addRegistry(camelContext.getRegistry()); 
    compositeRegistry.addRegistry(registry); 
    ((org.apache.camel.impl.DefaultCamelContext) camelContext).setRegistry(compositeRegistry); 
    registry.put("pollingStrategy", new MyPollStrategy()); 
    from("ftp://[email protected]/receive/in?password=1234&autoCreate=false&startingDirectoryMustExist=true&pollStrategy=#pollingStrategy&fileName=test.csv&consumer.delay=10m") 
      .convertBodyTo(String.class) 
      .log(LoggingLevel.INFO, "TEST", "${body} : ${headers}"); 

    } 

    private class MyPollStrategy implements PollingConsumerPollStrategy { 
    int maxPolls=3; 
    public boolean begin(Consumer consumer, Endpoint endpoint) { 
     return true; 
    } 

    public void commit(Consumer consumer, Endpoint endpoint, int polledMessages) { 
     if (polledMessages > maxPolls) { 
     maxPolls = polledMessages; 
     } 
     latch.countDown(); 
    } 

    public boolean rollback(Consumer consumer, Endpoint endpoint, int retryCounter, Exception cause) throws Exception { 
     return false; 
    } 
    } 
} 

注、私はすべての作品その後、URIにpollStrategy参照を削除する場合。

答えて

1

解決策を見つけました。この作業を行うにはビールが多すぎます。あまりにも明白です。

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

その部分は、クラス変数宣言部ではなく、configureメソッド内にある必要があります。

関連する問題