Camel FTP с pollStrategy терпит неудачу

У меня есть стандартный маршрут с ftp uri в качестве конечной точки потребителя с определенной и добавленной в реестр pollStrategy. Однако я получаю следующую ошибку:

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://user@localhost/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;
    }
  }
} 

Обратите внимание: если я удалю ссылку pollStrategy в uri, все будет работать.


person Souciance Eqdam Rashti    schedule 17.06.2016    source источник


Ответы (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, а не в части объявления переменной класса.

person Souciance Eqdam Rashti    schedule 18.06.2016