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