大家好,
假设我必须遵循生产代码:
from("file:/home/test/from/")
.setHeader("targetDynamicEndpoint", constant("file:/home/test/to/"))
.toD("${header.targetDynamicEndpoint}")
Run Code Online (Sandbox Code Playgroud)
我如何能够模拟生产者端点(“toD”)?
我能够猜测传递给“toD”的字符串,因为它是通过 StringBoot 属性设置的
Map<String, String>有没有办法让camel使用包含请求参数 的端点创建uri ?
我经常遇到这样的情况,我通过配置获得不同的参数,并且必须在运行时以编程方式构建 uri(之后是静态的)。
目前我总是必须自己构建 uri,这可以找到,但我想知道是否有更干净的方法。
例如,这就是我使用某些配置构建 smtp enpoint 的 uri 的方法(可能不是最简单的代码,但它工作正常):
private String buildSmtpUri() {
StringBuilder sb = new StringBuilder();
if (configuration.isEnableSslSecurity()) {
sb.append("smtps://");
} else {
sb.append("smtp://");
}
Assert.hasText(configuration.getSmtpUrl(), "No smtp url was given");
sb.append(configuration.getSmtpUrl());
if (configuration.getPort() != null) {
sb.append(":");
sb.append(configuration.getPort());
}
Map<String, String> parameters = new HashMap<>();
if (StringUtils.isNotEmpty(configuration.getUsername())) {
parameters.put("username", configuration.getUsername());
}
if (StringUtils.isNotEmpty(configuration.getPassword())) {
parameters.put("password", configuration.getPassword());
}
if (configuration.isBodyIsHtml()) {
parameters.put("contentType", "text/html");
}
AtomicBoolean first = new AtomicBoolean(true);
parameters.forEach((key, value) -> …Run Code Online (Sandbox Code Playgroud)