2016-06-17 3 views
3

Ich habe eine Standard-Route mit einem FTP-URI als Verbraucher-Endpunkt mit einer PollStrategy definiert und der Registrierung hinzugefügt. Ich erhalte jedoch den folgenden Fehler:Camel FTP mit pollStrategy schlägt fehl

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) 

Ich habe verschiedene Kombinationen ausprobiert, aber immer mit diesem Fehler enden. Kann jemand sehen, was ich vermisse? Mein Code scheint den von mir untersuchten Camel-Unit-Tests ziemlich ähnlich zu sein. Die Route sieht wie folgt aus:

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; 
    } 
    } 
} 

Hinweis, wenn ich die pollStrategy Referenz in der uri entfernen dann alles funktioniert.

Antwort

1

Ok gefunden die Lösung..muss eine zu viele Biere gehabt haben, wenn man an diesem..ein bisschen zu offensichtlich gearbeitet hat.

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

Der Teil in der configure-Methode sein sollte und nicht in der Klassenvariable Deklarationsteil.