Search code examples
apache-camelyamldslspring-camel

Apache Camel - moving file with uri from yaml properties


I'm trying to process a file using Apache Camel, and after processing move it to a specific folder, while keeping the filename and directory structure.

What I have in a application.yml file:

camel-from: "file:/C:/in/received?move=../in/processed/${file:name}&recursive=true&readLock=changed&readLockMarkerFile=false&delay=1000&maxDepth=2&minDepth=2"

Using Java the Route is as follows:

@Component
@RequiredArgsConstructor
public class TestRoute extends RouteBuilder {

    @Value("${camel-from}")
    private String fromUri;

    @Override
    public final void configure() {
        from(fromUri)
        // rest of code
    }
}

If I use the string directly in the route from, it works just fine. However, reading it from the application.yml file, no matter which characters I try to escape, I can't get it to read the uri properly. (I always end up with either an error, or creating folders such as processed/name instead of ${file:name} getting interpreted).

Any ideas?

Thanks


Solution

  • Property replacement needs to be escaped in SPEL language, so Apache Camel gets the value in raw form. You can escape it with #{'$'}. There is open issue spring-framework#9628 about making this escape sequence shorter / more intuitive.

    camel-from: "file:/C:/in/received?move=../in/processed/#{'$'}{file:name}"