Попытка создать CamelContext в среде светокопии без XML и CamelContextFactoryBean, связанных с реестром светокопий - PullRequest
0 голосов
/ 10 марта 2020

Я пытаюсь создать 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 это не так. Есть идеи?

...