Я пытаюсь переписать единичный тест, который ранее использовал контекст весны, чтобы использовать контекст чертежа и CamelBlueprintTestSupport
. Я видел разные ошибки при разных исполнениях, и в процессе попытки его работы я обновил camel-test-blueprint
до версии 2.15.3
. Теперь он всегда терпит неудачу с такой же ошибкой:Ячейки CamelBlueprintTestSupport и свойства чертежа в camelContext
java.lang.RuntimeException: Gave up waiting for service (objectClass=org.apache.camel.CamelContext)
Основной проблемой является то, что свойство-заполнитель не может быть решена:
Caused by: java.lang.IllegalArgumentException: Property placeholder key: xyz not found
at org.apache.camel.blueprint.BlueprintPropertiesParser.parseProperty(BlueprintPropertiesParser.java:164) ~[camel-blueprint-2.15.3.jar:2.15.3]
Мы используем Blueprint заполнители собственности в нашем контексте верблюд и маршрут определений. Я предполагаю, что в этом нет ничего особенного.
Я попытался создать простой тестовый проект, чтобы воспроизвести проблему, и на самом деле удалось запустить контекст в этом тестовом проекте, однако применение тех же шагов к моему фактическому проекту не решает проблему.
В моем тестовом проекте у меня есть следующий простой установки:
blueprint.xml
<cm:property-placeholder id="appConfig" persistent-id="app" update-strategy="reload" />
<camelContext id="demoContext" xmlns="http://camel.apache.org/schema/blueprint" autoStartup="{{demo.sync}}" >
<route id="demoRoute" autoStartup="{{demo.route.startup}}">
<from uri="timer:test" />
<to uri="log:test" />
</route>
</camelContext>
класс Test
public class RouteTest extends CamelBlueprintTestSupport {
@Override
protected String getBlueprintDescriptor() {
return "OSGI-INF/blueprint/blueprint.xml";
}
@Override
protected Properties useOverridePropertiesWithPropertiesComponent() {
Properties props = new Properties();
props.put("demo.sync", Boolean.TRUE.toString());
return props;
}
@Override
protected String[] loadConfigAdminConfigurationFile() {
URL cfg = this.getClass().getClassLoader().getResource("app.cfg");
return new String[] { cfg.getPath(), "app" };
}
Я обнаружил, что без перекрывая useOverridePropertiesWithPropertiesComponent
вернуться что-то для заполнителя на camelContext
это не сработает. Переопределяя loadConfigAdminConfigurationFile
Я получил его, чтобы загрузить фактические свойства, чтобы заменить второй заполнитель.
Я не уверен, что я делаю что-то не так, или если есть состояние гонки, поэтому мне было интересно, есть ли у кого-нибудь место для заполнения объектов, работающее с CamelBlueprintTestSupport
, и может дать мне несколько указателей?
Если вы посмотрите на мой код, вы увидите, что я уже это делаю. Проблема в том, что она не работает в каждой настройке, например. в моем простом тестовом проекте он работает, но как только я это делаю в реальном проекте, он не работает. – Clauds