Вы можете использовать Шаблон интеграции Content Enricher и обернуть свое простое выражение в Компонент языка , чтобы оценить его.
Это должно вернуть ожидаемые результаты:
Java DSL:
.enrich().simple("language:simple:resource:classpath:sql/${header.CamelCustomer}/Insert.sql")
XML DSL:
<enrich><simple>language:simple:resource:classpath:sql/${header.CamelCustomer}/Insert.sql</simple></enrich>
Я создал образец модульного теста для демонстрации.
SRC / тест / ресурсы / SQL / A / Insert.sql
INSERT something INTO A;
SRC / тест / ресурсы / SQL / B / Insert.sql
INSERT something INTO B;
DynamicLoadResourceTest
public class DynamicLoadResourceTest extends CamelTestSupport {
@Override
protected RouteBuilder createRouteBuilder() throws Exception {
return new RouteBuilder() {
@Override
public void configure() throws Exception {
from("direct:start")
.enrich().simple("language:simple:resource:classpath:sql/${header.CamelCustomer}/Insert.sql")
.to("mock:done");
}
};
}
@Test
public void testContentEnrichResource() throws Exception {
MockEndpoint done = getMockEndpoint("mock:done");
Map<String, Object> headers = new HashMap<>();
headers.put("CamelCustomer", "A");
sendBody("direct:start", null, headers);
headers.put("CamelCustomer", "B");
sendBody("direct:start", null, headers);
done.setExpectedCount(2);
done.assertIsSatisfied();
Assert.assertEquals(
"INSERT something INTO A;",
done.getExchanges().get(0).getIn().getBody()
);
Assert.assertEquals(
"INSERT something INTO B;",
done.getExchanges().get(1).getIn().getBody()
);
}
}