Я пытаюсь создать CamelContext, связанный с реестром светокопий Овна (для доступа к другим компонентам) в моем OSGi Bundle. Я попробовал следующий пример кода, но, к сожалению, blueprintContainer и blueprintBundle не известны родительскому классу, но если я создаю camelContext с планом xml, он имеет ссылки на них.
import org.apache.aries.blueprint.annotation.bean.Activation;
import org.apache.aries.blueprint.annotation.bean.Bean;
import org.apache.aries.blueprint.annotation.config.ConfigProperty;
import org.apache.camel.blueprint.BlueprintCamelContext;
import org.apache.camel.blueprint.CamelContextFactoryBean;
import javax.annotation.PostConstruct;
import javax.annotation.PreDestroy;
@Bean(dependsOn = {"blueprintContainer", "blueprintBundle"}, activation = Activation.EAGER)
public class ServiceCamelContext extends CamelContextFactoryBean {
@PostConstruct
public void initSCC() throws Exception {
super.afterPropertiesSet();
}
@PreDestroy
public void destroySCC() throws Exception {
super.destroy();
}
public ServiceCamelContext(@ConfigProperty("${camel.context.trace}") Boolean isTraced) {
super();
setId(this.getClass().getName());
}
public BlueprintCamelContext getContext(){
return super.getContext();
}
}
Это приводит к следующему autowire. xml:
<bean id="serviceCamelContext" class="....ServiceCamelContext" depends-on="blueprintContainer blueprintBundle" init-method="initSCC" destroy-method="destroySCC" activation="eager">
<argument value="${camel.context.trace}"/>
</bean>
Но, к сожалению, у меня есть следующая ошибка:
Caused by: java.lang.NullPointerException
at org.apache.camel.blueprint.BlueprintContainerRegistry.lookupByType(BlueprintContainerRegistry.java:104)
at org.apache.camel.blueprint.BlueprintContainerRegistry.lookupByType(BlueprintContainerRegistry.java:100)
at org.apache.camel.blueprint.CamelContextFactoryBean.getBeanForType(CamelContextFactoryBean.java:228)
at org.apache.camel.core.xml.AbstractCamelContextFactoryBean.afterPropertiesSet(AbstractCamelContextFactoryBean.java:158)
at org.apache.camel.blueprint.CamelContextFactoryBean.afterPropertiesSet(CamelContextFactoryBean.java:306)
Причина в этой строке:
public static <T> Map<String, T> lookupByType(BlueprintContainer blueprintContainer, Class<T> type, boolean includeNonSingletons) {
Bundle bundle = (Bundle) blueprintContainer.getComponentInstance("blueprintBundle"); // here
Map<String, T> objects = new LinkedHashMap<String, T>();
Set<String> ids = blueprintContainer.getComponentIds();
, поскольку "blueprintContainer" является нулевым ... Но в версии XML это не так. Есть идеи?