You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by gn...@apache.org on 2010/12/08 14:27:44 UTC
svn commit: r1043407 - in /camel/trunk:
components/camel-blueprint/src/main/java/org/apache/camel/blueprint/
components/camel-blueprint/src/main/java/org/apache/camel/blueprint/handler/
components/camel-core-xml/src/main/java/org/apache/camel/core/xml/...
Author: gnodet
Date: Wed Dec 8 13:27:44 2010
New Revision: 1043407
URL: http://svn.apache.org/viewvc?rev=1043407&view=rev
Log:
[CAMEL-3186] @EndpointInject not working in bean created by blueprint
Added:
camel/trunk/components/camel-core-xml/src/main/java/org/apache/camel/core/xml/AbstractCamelFactoryBean.java
- copied, changed from r1043385, camel/trunk/components/camel-core-xml/src/main/java/org/apache/camel/core/xml/AbstractCamelConsumerTemplateFactoryBean.java
camel/trunk/tests/camel-itest-osgi/src/test/java/org/apache/camel/itest/osgi/blueprint/TestProducer.java
camel/trunk/tests/camel-itest-osgi/src/test/resources/org/apache/camel/itest/osgi/blueprint/blueprint-10.xml
Modified:
camel/trunk/components/camel-blueprint/src/main/java/org/apache/camel/blueprint/BlueprintContainerRegistry.java
camel/trunk/components/camel-blueprint/src/main/java/org/apache/camel/blueprint/handler/CamelNamespaceHandler.java
camel/trunk/components/camel-core-xml/src/main/java/org/apache/camel/core/xml/AbstractCamelConsumerTemplateFactoryBean.java
camel/trunk/components/camel-core-xml/src/main/java/org/apache/camel/core/xml/AbstractCamelEndpointFactoryBean.java
camel/trunk/components/camel-core-xml/src/main/java/org/apache/camel/core/xml/AbstractCamelProducerTemplateFactoryBean.java
camel/trunk/components/camel-core-xml/src/main/java/org/apache/camel/core/xml/AbstractCamelThreadPoolFactoryBean.java
camel/trunk/tests/camel-itest-osgi/src/test/java/org/apache/camel/itest/osgi/blueprint/OSGiBlueprintTestSupport.java
Modified: camel/trunk/components/camel-blueprint/src/main/java/org/apache/camel/blueprint/BlueprintContainerRegistry.java
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-blueprint/src/main/java/org/apache/camel/blueprint/BlueprintContainerRegistry.java?rev=1043407&r1=1043406&r2=1043407&view=diff
==============================================================================
--- camel/trunk/components/camel-blueprint/src/main/java/org/apache/camel/blueprint/BlueprintContainerRegistry.java (original)
+++ camel/trunk/components/camel-blueprint/src/main/java/org/apache/camel/blueprint/BlueprintContainerRegistry.java Wed Dec 8 13:27:44 2010
@@ -16,11 +16,12 @@
*/
package org.apache.camel.blueprint;
+import org.apache.aries.blueprint.ExtendedBeanMetadata;
+import org.apache.aries.blueprint.mutable.MutableReferenceMetadata;
import org.apache.camel.spi.Registry;
+import org.osgi.framework.Bundle;
import org.osgi.service.blueprint.container.BlueprintContainer;
-import org.osgi.service.blueprint.reflect.BeanMetadata;
-import org.osgi.service.blueprint.reflect.ComponentMetadata;
-import org.osgi.service.blueprint.reflect.ReferenceMetadata;
+import org.osgi.service.blueprint.container.NoSuchComponentException;
import java.util.LinkedHashMap;
import java.util.Map;
@@ -38,7 +39,11 @@ public class BlueprintContainerRegistry
}
public <T> T lookup(String name, Class<T> type) {
- return type.cast(blueprintContainer.getComponentInstance(name));
+ try {
+ return type.cast(blueprintContainer.getComponentInstance(name));
+ } catch (NoSuchComponentException e) {
+ return null;
+ }
}
public <T> Map<String, T> lookupByType(Class<T> type) {
@@ -47,16 +52,34 @@ public class BlueprintContainerRegistry
public static <T> Map<String, T> lookupByType(BlueprintContainer blueprintContainer, Class<T> type) {
Map<String, T> objects = new LinkedHashMap<String, T>();
- for (ComponentMetadata metadata : blueprintContainer.getMetadata(ComponentMetadata.class)) {
- boolean isSingleton = metadata instanceof BeanMetadata
- && (BeanMetadata.SCOPE_SINGLETON.equals(((BeanMetadata) metadata).getScope())
- || ((BeanMetadata) metadata).getScope() == null);
- boolean isReference = metadata instanceof ReferenceMetadata;
- if (isSingleton || isReference) {
- Object o = blueprintContainer.getComponentInstance( metadata.getId() );
- if (type.isInstance( o )) {
+ for (ExtendedBeanMetadata metadata : blueprintContainer.getMetadata(ExtendedBeanMetadata.class)) {
+ try {
+ Class cl = metadata.getRuntimeClass();
+ if (cl == null && metadata.getClassName() != null) {
+ Bundle bundle = (Bundle) blueprintContainer.getComponentInstance("blueprintBundle");
+ cl = bundle.loadClass(metadata.getClassName());
+ }
+ if (cl == null || type.isAssignableFrom(cl)) {
+ Object o = blueprintContainer.getComponentInstance( metadata.getId() );
+ objects.put( metadata.getId(), type.cast(o) );
+ }
+ } catch (Throwable t) {
+ // ignore
+ }
+ }
+ for (MutableReferenceMetadata metadata : blueprintContainer.getMetadata(MutableReferenceMetadata.class)) {
+ try {
+ Class cl = metadata.getRuntimeInterface();
+ if (cl == null && metadata.getInterface() != null) {
+ Bundle bundle = (Bundle) blueprintContainer.getComponentInstance("blueprintBundle");
+ cl = bundle.loadClass(metadata.getInterface());
+ }
+ if (cl == null || type.isAssignableFrom(cl)) {
+ Object o = blueprintContainer.getComponentInstance( metadata.getId() );
objects.put( metadata.getId(), type.cast(o) );
}
+ } catch (Throwable t) {
+ // ignore
}
}
return objects;
Modified: camel/trunk/components/camel-blueprint/src/main/java/org/apache/camel/blueprint/handler/CamelNamespaceHandler.java
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-blueprint/src/main/java/org/apache/camel/blueprint/handler/CamelNamespaceHandler.java?rev=1043407&r1=1043406&r2=1043407&view=diff
==============================================================================
--- camel/trunk/components/camel-blueprint/src/main/java/org/apache/camel/blueprint/handler/CamelNamespaceHandler.java (original)
+++ camel/trunk/components/camel-blueprint/src/main/java/org/apache/camel/blueprint/handler/CamelNamespaceHandler.java Wed Dec 8 13:27:44 2010
@@ -16,50 +16,28 @@
*/
package org.apache.camel.blueprint.handler;
-import java.net.URL;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Set;
-import java.util.concurrent.Callable;
-
-import javax.xml.bind.Binder;
-import javax.xml.bind.JAXBContext;
-import javax.xml.bind.JAXBException;
-
+import org.apache.aries.blueprint.BeanProcessor;
import org.apache.aries.blueprint.ComponentDefinitionRegistry;
import org.apache.aries.blueprint.ComponentDefinitionRegistryProcessor;
-import org.w3c.dom.Document;
-import org.w3c.dom.Element;
-import org.w3c.dom.Node;
-import org.w3c.dom.NodeList;
-
import org.apache.aries.blueprint.NamespaceHandler;
import org.apache.aries.blueprint.ParserContext;
import org.apache.aries.blueprint.PassThroughMetadata;
import org.apache.aries.blueprint.mutable.MutableBeanMetadata;
import org.apache.aries.blueprint.mutable.MutablePassThroughMetadata;
+import org.apache.aries.blueprint.mutable.MutableRefMetadata;
import org.apache.aries.blueprint.mutable.MutableReferenceMetadata;
+import org.apache.aries.blueprint.mutable.MutableValueMetadata;
+import org.apache.camel.CamelContext;
+import org.apache.camel.CamelContextAware;
+import org.apache.camel.EndpointInject;
+import org.apache.camel.Produce;
import org.apache.camel.blueprint.BlueprintCamelContext;
import org.apache.camel.blueprint.CamelContextFactoryBean;
import org.apache.camel.core.xml.AbstractCamelContextFactoryBean;
+import org.apache.camel.core.xml.AbstractCamelFactoryBean;
+import org.apache.camel.impl.CamelPostProcessorHelper;
import org.apache.camel.impl.DefaultCamelContextNameStrategy;
-import org.apache.camel.model.AggregateDefinition;
-import org.apache.camel.model.CatchDefinition;
-import org.apache.camel.model.DataFormatDefinition;
-import org.apache.camel.model.ExpressionNode;
-import org.apache.camel.model.ExpressionSubElementDefinition;
-import org.apache.camel.model.FromDefinition;
-import org.apache.camel.model.MarshalDefinition;
-import org.apache.camel.model.OnExceptionDefinition;
-import org.apache.camel.model.ProcessorDefinition;
-import org.apache.camel.model.ResequenceDefinition;
-import org.apache.camel.model.RouteDefinition;
-import org.apache.camel.model.SendDefinition;
-import org.apache.camel.model.SortDefinition;
-import org.apache.camel.model.UnmarshalDefinition;
-import org.apache.camel.model.WireTapDefinition;
+import org.apache.camel.model.*;
import org.apache.camel.model.language.ExpressionDefinition;
import org.apache.camel.spi.CamelContextNameStrategy;
import org.apache.camel.spi.ComponentResolver;
@@ -68,13 +46,31 @@ import org.apache.camel.spi.LanguageReso
import org.apache.camel.util.ObjectHelper;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
-
import org.osgi.framework.Bundle;
-import org.osgi.framework.BundleContext;
import org.osgi.service.blueprint.container.BlueprintContainer;
import org.osgi.service.blueprint.container.ComponentDefinitionException;
+import org.osgi.service.blueprint.reflect.BeanMetadata;
import org.osgi.service.blueprint.reflect.ComponentMetadata;
import org.osgi.service.blueprint.reflect.Metadata;
+import org.osgi.service.blueprint.reflect.RefMetadata;
+import org.osgi.service.blueprint.reflect.ValueMetadata;
+import org.w3c.dom.Document;
+import org.w3c.dom.Element;
+import org.w3c.dom.Node;
+import org.w3c.dom.NodeList;
+
+import javax.xml.bind.Binder;
+import javax.xml.bind.JAXBContext;
+import javax.xml.bind.JAXBException;
+import java.lang.reflect.Field;
+import java.lang.reflect.Method;
+import java.lang.reflect.Modifier;
+import java.net.URL;
+import java.util.Arrays;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Set;
+import java.util.concurrent.Callable;
public class CamelNamespaceHandler implements NamespaceHandler {
@@ -140,27 +136,7 @@ public class CamelNamespaceHandler imple
}
CamelContextFactoryBean ccfb = (CamelContextFactoryBean) value;
- try {
- PassThroughMetadata ptm = (PassThroughMetadata) context.getComponentDefinitionRegistry().getComponentDefinition("blueprintContainer");
- ccfb.setBlueprintContainer((BlueprintContainer) ptm.getObject());
- ptm = (PassThroughMetadata) context.getComponentDefinitionRegistry().getComponentDefinition("blueprintBundleContext");
- ccfb.setBundleContext((BundleContext) ptm.getObject());
- ccfb.setImplicitId(implicitId);
- } catch (Exception e) {
- throw new ComponentDefinitionException("Unable to initialize camel context factory", e);
- }
-
- //
- // gnodet: the initialization of the CamelContextFactoryBean is now done at the end of the blueprint
- // container creation through the use of a ComponentDefinitionRegistryProcessor (those are called
- // after all the beans have been initialized. That's why the calls to #afterPropertiesSet and
- // #init are commented.
- // This mechanism is now required because the #afterPropertiesSet method on the CamelContext
- // will search through the blueprint beans for beans implementing known interfaces such as
- // LifeCycle strategies, etc... so that they are automatically wired to the CamelContext.
- // However, Blueprint does not support real factories, so in order to do so, we need to actually
- // access the beans which lead to a circular exception while looking for the CamelContext itself.
- //
+ ccfb.setImplicitId(implicitId);
MutablePassThroughMetadata factory = context.createMetadata(MutablePassThroughMetadata.class);
factory.setId(".camelBlueprint.passThrough." + contextId);
@@ -170,33 +146,98 @@ public class CamelNamespaceHandler imple
factory2.setId(".camelBlueprint.factory." + contextId);
factory2.setFactoryComponent(factory);
factory2.setFactoryMethod("call");
-// factory2.setInitMethod("afterPropertiesSet");
+ factory2.setInitMethod("afterPropertiesSet");
factory2.setDestroyMethod("destroy");
+ factory2.addProperty("blueprintContainer", createRef(context, "blueprintContainer"));
+ factory2.addProperty("bundleContext", createRef(context, "blueprintBundleContext"));
MutableBeanMetadata ctx = context.createMetadata(MutableBeanMetadata.class);
ctx.setId(contextId);
+ ctx.setRuntimeClass(BlueprintCamelContext.class);
ctx.setFactoryComponent(factory2);
ctx.setFactoryMethod("getContext");
-// ctx.setInitMethod("init");
+ ctx.setInitMethod("init");
ctx.setDestroyMethod("destroy");
- MutablePassThroughMetadata processorFactory = context.createMetadata(MutablePassThroughMetadata.class);
- processorFactory.setId(".camelBlueprint.processor.passThrough." + contextId);
- processorFactory.setObject(new PassThroughCallable<Object>(new CamelDependenciesFinder(ccfb, context)));
-
- MutableBeanMetadata processor = context.createMetadata(MutableBeanMetadata.class);
- processor.setId(".camelBlueprint.processor." + contextId);
- processor.setRuntimeClass(ComponentDefinitionRegistryProcessor.class);
- processor.setFactoryComponent(processorFactory);
- processor.setFactoryMethod("call");
- processor.setProcessor(true);
- context.getComponentDefinitionRegistry().registerComponentDefinition( processor );
+ // Register objects
+ registerBeans(context, contextId, ccfb.getEndpoints());
+ registerBeans(context, contextId, ccfb.getThreadPools());
+ registerBeans(context, contextId, ccfb.getBeans());
+
+ // Register processors
+ MutablePassThroughMetadata beanProcessorFactory = context.createMetadata(MutablePassThroughMetadata.class);
+ beanProcessorFactory.setId(".camelBlueprint.processor.bean.passThrough." + contextId);
+ beanProcessorFactory.setObject(new PassThroughCallable<Object>(new CamelInjector(contextId)));
+
+ MutableBeanMetadata beanProcessor = context.createMetadata(MutableBeanMetadata.class);
+ beanProcessor.setId(".camelBlueprint.processor.bean." + contextId);
+ beanProcessor.setRuntimeClass(CamelInjector.class);
+ beanProcessor.setFactoryComponent(beanProcessorFactory);
+ beanProcessor.setFactoryMethod("call");
+ beanProcessor.setProcessor(true);
+ beanProcessor.addProperty("blueprintContainer", createRef(context, "blueprintContainer"));
+ context.getComponentDefinitionRegistry().registerComponentDefinition(beanProcessor);
+
+ MutablePassThroughMetadata regProcessorFactory = context.createMetadata(MutablePassThroughMetadata.class);
+ regProcessorFactory.setId(".camelBlueprint.processor.registry.passThrough." + contextId);
+ regProcessorFactory.setObject(new PassThroughCallable<Object>(new CamelDependenciesFinder(contextId, context)));
+
+ MutableBeanMetadata regProcessor = context.createMetadata(MutableBeanMetadata.class);
+ regProcessor.setId(".camelBlueprint.processor.registry." + contextId);
+ regProcessor.setRuntimeClass(CamelDependenciesFinder.class);
+ regProcessor.setFactoryComponent(regProcessorFactory);
+ regProcessor.setFactoryMethod("call");
+ regProcessor.setProcessor(true);
+ regProcessor.addDependsOn(".camelBlueprint.processor.bean." + contextId);
+ regProcessor.addProperty("blueprintContainer", createRef(context, "blueprintContainer"));
+ context.getComponentDefinitionRegistry().registerComponentDefinition(regProcessor);
return ctx;
}
return null;
}
+ private void registerBeans(ParserContext context, String contextId, List<?> beans) {
+ if (beans != null) {
+ for (Object bean : beans) {
+ if (bean instanceof AbstractCamelFactoryBean) {
+ registerBean(context, contextId, (AbstractCamelFactoryBean) bean);
+ }
+ }
+ }
+ }
+
+ protected void registerBean(ParserContext context, String contextId, AbstractCamelFactoryBean<?> fact) {
+ String id = fact.getId();
+
+ fact.setCamelContextId(contextId);
+
+ MutablePassThroughMetadata eff = context.createMetadata(MutablePassThroughMetadata.class);
+ eff.setId(".camelBlueprint.bean.factory." + id);
+ eff.setObject(new PassThroughCallable<Object>(fact));
+
+ MutableBeanMetadata ef = context.createMetadata(MutableBeanMetadata.class);
+ ef.setId(".camelBlueprint.bean.factory." + contextId);
+ ef.setFactoryComponent(eff);
+ ef.setFactoryMethod("call");
+ ef.addProperty("blueprintContainer", createRef(context, "blueprintContainer"));
+ ef.setInitMethod("afterPropertiesSet");
+ ef.setDestroyMethod("destroy");
+
+ MutableBeanMetadata e = context.createMetadata(MutableBeanMetadata.class);
+ e.setId(id);
+ e.setRuntimeClass(fact.getObjectType());
+ e.setFactoryComponent(ef);
+ e.setFactoryMethod("getObject");
+
+ context.getComponentDefinitionRegistry().registerComponentDefinition(e);
+ }
+
+ protected BlueprintContainer getBlueprintContainer(ParserContext context) {
+ PassThroughMetadata ptm = (PassThroughMetadata) context.getComponentDefinitionRegistry().getComponentDefinition("blueprintContainer");
+ return (BlueprintContainer) ptm.getObject();
+ }
+
public ComponentMetadata decorate(Node node, ComponentMetadata component, ParserContext context) {
return null;
}
@@ -240,6 +281,18 @@ public class CamelNamespaceHandler imple
return classes;
}
+ private ValueMetadata createValue(ParserContext context, String value) {
+ MutableValueMetadata v = context.createMetadata(MutableValueMetadata.class);
+ v.setStringValue(value);
+ return v;
+ }
+
+ private RefMetadata createRef(ParserContext context, String value) {
+ MutableRefMetadata r = context.createMetadata(MutableRefMetadata.class);
+ r.setComponentId(value);
+ return r;
+ }
+
public static class PassThroughCallable<T> implements Callable<T> {
private T value;
@@ -253,29 +306,152 @@ public class CamelNamespaceHandler imple
}
}
+ public static class CamelInjector extends CamelPostProcessorHelper implements BeanProcessor {
+
+ private final String camelContextName;
+ private BlueprintContainer blueprintContainer;
+
+ public CamelInjector(String camelContextName) {
+ this.camelContextName = camelContextName;
+ }
+
+ public void setBlueprintContainer(BlueprintContainer blueprintContainer) {
+ this.blueprintContainer = blueprintContainer;
+ }
+
+ public Object beforeInit(Object bean, String beanName, BeanCreator beanCreator, BeanMetadata beanMetadata) {
+ injectFields(bean, beanName);
+ injectMethods(bean, beanName);
+ if (bean instanceof CamelContextAware) {
+ ((CamelContextAware) bean).setCamelContext(getCamelContext());
+ }
+ return bean;
+ }
+
+ @Override
+ public CamelContext getCamelContext() {
+ return (CamelContext) blueprintContainer.getComponentInstance(camelContextName);
+ }
+
+ /**
+ * A strategy method to allow implementations to perform some custom JBI
+ * based injection of the POJO
+ *
+ * @param bean the bean to be injected
+ */
+ protected void injectFields(final Object bean, final String beanName) {
+ Class clazz = bean.getClass();
+ do {
+ Field[] fields = clazz.getDeclaredFields();
+ for (Field field : fields) {
+ EndpointInject endpointInject = field.getAnnotation(EndpointInject.class);
+ if (endpointInject != null && matchContext(endpointInject.context())) {
+ injectField(field, endpointInject.uri(), endpointInject.ref(), bean, beanName);
+ }
+
+ Produce produce = field.getAnnotation(Produce.class);
+ if (produce != null && matchContext(produce.context())) {
+ injectField(field, produce.uri(), produce.ref(), bean, beanName);
+ }
+ }
+ clazz = clazz.getSuperclass();
+ } while (clazz != null && clazz != Object.class);
+ }
+
+ protected void injectField(Field field, String endpointUri, String endpointRef, Object bean, String beanName) {
+ setField(field, bean, getInjectionValue(field.getType(), endpointUri, endpointRef, field.getName(), bean, beanName));
+ }
+
+ protected static void setField(Field field, Object instance, Object value) {
+ try {
+ boolean oldAccessible = field.isAccessible();
+ boolean shouldSetAccessible = !Modifier.isPublic(field.getModifiers()) && !oldAccessible;
+ if (shouldSetAccessible) {
+ field.setAccessible(true);
+ }
+ field.set(instance, value);
+ if (shouldSetAccessible) {
+ field.setAccessible(oldAccessible);
+ }
+ } catch (IllegalArgumentException ex) {
+ throw new UnsupportedOperationException("Cannot inject value of class: " + value.getClass() + " into: " + field);
+ } catch (IllegalAccessException ex) {
+ throw new IllegalStateException("Could not access method: " + ex.getMessage());
+ }
+ }
+
+ protected void injectMethods(final Object bean, final String beanName) {
+ Class clazz = bean.getClass();
+ do {
+ Method[] methods = clazz.getDeclaredMethods();
+ for (Method method : methods) {
+ setterInjection(method, bean, beanName);
+ consumerInjection(method, bean, beanName);
+ }
+ clazz = clazz.getSuperclass();
+ } while (clazz != null && clazz != Object.class);
+ }
+
+ protected void setterInjection(Method method, Object bean, String beanName) {
+ EndpointInject endpointInject = method.getAnnotation(EndpointInject.class);
+ if (endpointInject != null && matchContext(endpointInject.context())) {
+ setterInjection(method, bean, beanName, endpointInject.uri(), endpointInject.ref());
+ }
+
+ Produce produce = method.getAnnotation(Produce.class);
+ if (produce != null && matchContext(produce.context())) {
+ setterInjection(method, bean, beanName, produce.uri(), produce.ref());
+ }
+ }
+
+ protected void setterInjection(Method method, Object bean, String beanName, String endpointUri, String endpointRef) {
+ Class<?>[] parameterTypes = method.getParameterTypes();
+ if (parameterTypes != null) {
+ if (parameterTypes.length != 1) {
+ LOG.warn("Ignoring badly annotated method for injection due to incorrect number of parameters: " + method);
+ } else {
+ String propertyName = ObjectHelper.getPropertyName(method);
+ Object value = getInjectionValue(parameterTypes[0], endpointUri, endpointRef, propertyName, bean, beanName);
+ ObjectHelper.invokeMethod(method, bean, value);
+ }
+ }
+ }
+
+ public Object afterInit(Object o, String s, BeanCreator beanCreator, BeanMetadata beanMetadata) {
+ return o;
+ }
+
+ public void beforeDestroy(Object o, String s) {
+ }
+
+ public void afterDestroy(Object o, String s) {
+ }
+
+ }
+
public static class CamelDependenciesFinder implements ComponentDefinitionRegistryProcessor {
- private final CamelContextFactoryBean ccfb;
+ private final String camelContextName;
private final ParserContext context;
+ private BlueprintContainer blueprintContainer;
- public CamelDependenciesFinder(CamelContextFactoryBean ccfb, ParserContext context) {
- this.ccfb = ccfb;
+ public CamelDependenciesFinder(String camelContextName, ParserContext context) {
+ this.camelContextName = camelContextName;
this.context = context;
}
+ public void setBlueprintContainer(BlueprintContainer blueprintContainer) {
+ this.blueprintContainer = blueprintContainer;
+ }
+
public void process(ComponentDefinitionRegistry componentDefinitionRegistry) {
- try {
- ccfb.afterPropertiesSet();
- ccfb.getContext().init();
- } catch (Exception e) {
- throw new ComponentDefinitionException("Unable to initialize camel context factory", e);
- }
+ CamelContext camelContext = (CamelContext) blueprintContainer.getComponentInstance(camelContextName);
Set<String> components = new HashSet<String>();
Set<String> languages = new HashSet<String>();
Set<String> dataformats = new HashSet<String>();
Set<String> dependsOn = new HashSet<String>();
- for (RouteDefinition rd : ccfb.getContext().getRouteDefinitions()) {
+ for (RouteDefinition rd : camelContext.getRouteDefinitions()) {
findInputComponents(rd.getInputs(), components, languages, dataformats);
findOutputComponents(rd.getOutputs(), components, languages, dataformats);
}
@@ -365,6 +541,8 @@ public class CamelNamespaceHandler imple
languages.clear();
dataformats.clear();
}
+
+
}
public <T extends org.osgi.service.blueprint.reflect.Metadata> T createMetadata(java.lang.Class<T> tClass) {
Modified: camel/trunk/components/camel-core-xml/src/main/java/org/apache/camel/core/xml/AbstractCamelConsumerTemplateFactoryBean.java
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-core-xml/src/main/java/org/apache/camel/core/xml/AbstractCamelConsumerTemplateFactoryBean.java?rev=1043407&r1=1043406&r2=1043407&view=diff
==============================================================================
--- camel/trunk/components/camel-core-xml/src/main/java/org/apache/camel/core/xml/AbstractCamelConsumerTemplateFactoryBean.java (original)
+++ camel/trunk/components/camel-core-xml/src/main/java/org/apache/camel/core/xml/AbstractCamelConsumerTemplateFactoryBean.java Wed Dec 8 13:27:44 2010
@@ -37,29 +37,14 @@ import org.apache.camel.util.ServiceHelp
* @version $Revision: 934375 $
*/
@XmlAccessorType(XmlAccessType.FIELD)
-public abstract class AbstractCamelConsumerTemplateFactoryBean extends IdentifiedType implements CamelContextAware {
+public abstract class AbstractCamelConsumerTemplateFactoryBean extends AbstractCamelFactoryBean<ConsumerTemplate> {
@XmlTransient
private ConsumerTemplate template;
@XmlAttribute
- private String camelContextId;
- @XmlTransient
- private CamelContext camelContext;
- @XmlAttribute
private Integer maximumCacheSize;
- public void afterPropertiesSet() throws Exception {
- if (camelContext == null && camelContextId != null) {
- camelContext = getCamelContextWithId(camelContextId);
- }
- if (camelContext == null) {
- throw new IllegalArgumentException("A CamelContext or a CamelContextId must be injected!");
- }
- }
-
- protected abstract CamelContext getCamelContextWithId(String camelContextId);
-
- public Object getObject() throws Exception {
- template = new DefaultConsumerTemplate(camelContext);
+ public ConsumerTemplate getObject() throws Exception {
+ template = new DefaultConsumerTemplate(getCamelContext());
// set custom cache size if provided
if (maximumCacheSize != null) {
@@ -71,14 +56,10 @@ public abstract class AbstractCamelConsu
return template;
}
- public Class getObjectType() {
+ public Class<DefaultConsumerTemplate> getObjectType() {
return DefaultConsumerTemplate.class;
}
- public boolean isSingleton() {
- return true;
- }
-
public void destroy() throws Exception {
ServiceHelper.stopService(template);
}
@@ -86,22 +67,6 @@ public abstract class AbstractCamelConsu
// Properties
// -------------------------------------------------------------------------
- public CamelContext getCamelContext() {
- return camelContext;
- }
-
- public void setCamelContext(CamelContext camelContext) {
- this.camelContext = camelContext;
- }
-
- public String getCamelContextId() {
- return camelContextId;
- }
-
- public void setCamelContextId(String camelContextId) {
- this.camelContextId = camelContextId;
- }
-
public Integer getMaximumCacheSize() {
return maximumCacheSize;
}
Modified: camel/trunk/components/camel-core-xml/src/main/java/org/apache/camel/core/xml/AbstractCamelEndpointFactoryBean.java
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-core-xml/src/main/java/org/apache/camel/core/xml/AbstractCamelEndpointFactoryBean.java?rev=1043407&r1=1043406&r2=1043407&view=diff
==============================================================================
--- camel/trunk/components/camel-core-xml/src/main/java/org/apache/camel/core/xml/AbstractCamelEndpointFactoryBean.java (original)
+++ camel/trunk/components/camel-core-xml/src/main/java/org/apache/camel/core/xml/AbstractCamelEndpointFactoryBean.java Wed Dec 8 13:27:44 2010
@@ -32,29 +32,19 @@ import static org.apache.camel.util.Obje
@XmlAccessorType(XmlAccessType.FIELD)
-public abstract class AbstractCamelEndpointFactoryBean extends IdentifiedType implements CamelContextAware {
+public abstract class AbstractCamelEndpointFactoryBean extends AbstractCamelFactoryBean<Endpoint> {
@XmlAttribute
@Deprecated
private Boolean singleton = Boolean.FALSE;
@XmlAttribute
private String uri;
- @XmlAttribute
- private String camelContextId;
- @XmlTransient
- private CamelContext context;
@XmlTransient
private Endpoint endpoint;
- public Object getObject() throws Exception {
+ public Endpoint getObject() throws Exception {
if (endpoint == null || !endpoint.isSingleton()) {
- if (context == null && camelContextId != null) {
- context = getCamelContextWithId(camelContextId);
- }
-
- notNull(context, "context");
notNull(uri, "uri");
-
- endpoint = context.getEndpoint(uri);
+ endpoint = getCamelContext().getEndpoint(uri);
if (endpoint == null) {
throw new NoSuchEndpointException(uri);
}
@@ -62,33 +52,10 @@ public abstract class AbstractCamelEndpo
return endpoint;
}
- protected abstract CamelContext getCamelContextWithId(String camelContextId);
-
- public Class getObjectType() {
+ public Class<Endpoint> getObjectType() {
return Endpoint.class;
}
- public boolean isSingleton() {
- return false;
- }
-
- public void setSingleton(boolean singleton) {
- }
-
- public CamelContext getCamelContext() {
- return context;
- }
-
-
- /**
- * Sets the context to use to resolve endpoints
- *
- * @param context the context used to resolve endpoints
- */
- public void setCamelContext(CamelContext context) {
- this.context = context;
- }
-
public String getUri() {
return uri;
}
@@ -102,12 +69,4 @@ public abstract class AbstractCamelEndpo
this.uri = uri;
}
- public String getCamelContextId() {
- return camelContextId;
- }
-
- public void setCamelContextId(String camelContextId) {
- this.camelContextId = camelContextId;
- }
-
}
Copied: camel/trunk/components/camel-core-xml/src/main/java/org/apache/camel/core/xml/AbstractCamelFactoryBean.java (from r1043385, camel/trunk/components/camel-core-xml/src/main/java/org/apache/camel/core/xml/AbstractCamelConsumerTemplateFactoryBean.java)
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-core-xml/src/main/java/org/apache/camel/core/xml/AbstractCamelFactoryBean.java?p2=camel/trunk/components/camel-core-xml/src/main/java/org/apache/camel/core/xml/AbstractCamelFactoryBean.java&p1=camel/trunk/components/camel-core-xml/src/main/java/org/apache/camel/core/xml/AbstractCamelConsumerTemplateFactoryBean.java&r1=1043385&r2=1043407&rev=1043407&view=diff
==============================================================================
--- camel/trunk/components/camel-core-xml/src/main/java/org/apache/camel/core/xml/AbstractCamelConsumerTemplateFactoryBean.java (original)
+++ camel/trunk/components/camel-core-xml/src/main/java/org/apache/camel/core/xml/AbstractCamelFactoryBean.java Wed Dec 8 13:27:44 2010
@@ -16,77 +16,40 @@
*/
package org.apache.camel.core.xml;
+import org.apache.camel.CamelContext;
+import org.apache.camel.CamelContextAware;
+import org.apache.camel.model.IdentifiedType;
+
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlAttribute;
-import javax.xml.bind.annotation.XmlRootElement;
import javax.xml.bind.annotation.XmlTransient;
-import javax.xml.bind.annotation.XmlType;
-import org.apache.camel.CamelContext;
-import org.apache.camel.CamelContextAware;
-import org.apache.camel.ConsumerTemplate;
-import org.apache.camel.impl.DefaultConsumerTemplate;
-import org.apache.camel.model.IdentifiedType;
-import org.apache.camel.util.ServiceHelper;
-
-/**
- * A factory for creating a new {@link org.apache.camel.ConsumerTemplate}
- * instance with a minimum of XML
- *
- * @version $Revision: 934375 $
- */
@XmlAccessorType(XmlAccessType.FIELD)
-public abstract class AbstractCamelConsumerTemplateFactoryBean extends IdentifiedType implements CamelContextAware {
- @XmlTransient
- private ConsumerTemplate template;
+public abstract class AbstractCamelFactoryBean<T> extends IdentifiedType implements CamelContextAware {
+
@XmlAttribute
private String camelContextId;
@XmlTransient
private CamelContext camelContext;
- @XmlAttribute
- private Integer maximumCacheSize;
- public void afterPropertiesSet() throws Exception {
- if (camelContext == null && camelContextId != null) {
- camelContext = getCamelContextWithId(camelContextId);
- }
- if (camelContext == null) {
- throw new IllegalArgumentException("A CamelContext or a CamelContextId must be injected!");
- }
- }
+ public abstract T getObject() throws Exception;
protected abstract CamelContext getCamelContextWithId(String camelContextId);
- public Object getObject() throws Exception {
- template = new DefaultConsumerTemplate(camelContext);
-
- // set custom cache size if provided
- if (maximumCacheSize != null) {
- template.setMaximumCacheSize(maximumCacheSize);
- }
-
- // must start it so its ready to use
- ServiceHelper.startService(template);
- return template;
- }
-
- public Class getObjectType() {
- return DefaultConsumerTemplate.class;
- }
-
- public boolean isSingleton() {
- return true;
+ public void afterPropertiesSet() throws Exception {
}
public void destroy() throws Exception {
- ServiceHelper.stopService(template);
}
- // Properties
- // -------------------------------------------------------------------------
-
public CamelContext getCamelContext() {
+ if (camelContext == null && camelContextId != null) {
+ camelContext = getCamelContextWithId(camelContextId);
+ }
+ if (camelContext == null) {
+ throw new IllegalArgumentException("A CamelContext or a CamelContextId must be injected!");
+ }
return camelContext;
}
@@ -102,11 +65,10 @@ public abstract class AbstractCamelConsu
this.camelContextId = camelContextId;
}
- public Integer getMaximumCacheSize() {
- return maximumCacheSize;
+ public boolean isSingleton() {
+ return true;
}
- public void setMaximumCacheSize(Integer maximumCacheSize) {
- this.maximumCacheSize = maximumCacheSize;
- }
-}
\ No newline at end of file
+ public abstract Class<? extends T> getObjectType();
+
+}
Modified: camel/trunk/components/camel-core-xml/src/main/java/org/apache/camel/core/xml/AbstractCamelProducerTemplateFactoryBean.java
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-core-xml/src/main/java/org/apache/camel/core/xml/AbstractCamelProducerTemplateFactoryBean.java?rev=1043407&r1=1043406&r2=1043407&view=diff
==============================================================================
--- camel/trunk/components/camel-core-xml/src/main/java/org/apache/camel/core/xml/AbstractCamelProducerTemplateFactoryBean.java (original)
+++ camel/trunk/components/camel-core-xml/src/main/java/org/apache/camel/core/xml/AbstractCamelProducerTemplateFactoryBean.java Wed Dec 8 13:27:44 2010
@@ -37,30 +37,15 @@ import org.apache.camel.util.ServiceHelp
* @version $Revision: 934375 $
*/
@XmlAccessorType(XmlAccessType.FIELD)
-public abstract class AbstractCamelProducerTemplateFactoryBean extends IdentifiedType implements CamelContextAware {
+public abstract class AbstractCamelProducerTemplateFactoryBean extends AbstractCamelFactoryBean<ProducerTemplate> {
@XmlTransient
private ProducerTemplate template;
@XmlAttribute(required = false)
private String defaultEndpoint;
@XmlAttribute
- private String camelContextId;
- @XmlTransient
- private CamelContext camelContext;
- @XmlAttribute
private Integer maximumCacheSize;
- public void afterPropertiesSet() throws Exception {
- if (camelContext == null && camelContextId != null) {
- camelContext = getCamelContextWithId(camelContextId);
- }
- if (camelContext == null) {
- throw new IllegalArgumentException("A CamelContext or a CamelContextId must be injected!");
- }
- }
-
- protected abstract CamelContext getCamelContextWithId(String camelContextId);
-
- public Object getObject() throws Exception {
+ public ProducerTemplate getObject() throws Exception {
CamelContext context = getCamelContext();
if (defaultEndpoint != null) {
Endpoint endpoint = context.getEndpoint(defaultEndpoint);
@@ -83,28 +68,16 @@ public abstract class AbstractCamelProdu
return template;
}
- public Class getObjectType() {
+ public Class<DefaultProducerTemplate> getObjectType() {
return DefaultProducerTemplate.class;
}
- public boolean isSingleton() {
- return true;
- }
-
public void destroy() throws Exception {
ServiceHelper.stopService(template);
}
// Properties
// -------------------------------------------------------------------------
- public CamelContext getCamelContext() {
- return camelContext;
- }
-
- public void setCamelContext(CamelContext camelContext) {
- this.camelContext = camelContext;
- }
-
public String getDefaultEndpoint() {
return defaultEndpoint;
}
@@ -116,14 +89,6 @@ public abstract class AbstractCamelProdu
this.defaultEndpoint = defaultEndpoint;
}
- public String getCamelContextId() {
- return camelContextId;
- }
-
- public void setCamelContextId(String camelContextId) {
- this.camelContextId = camelContextId;
- }
-
public Integer getMaximumCacheSize() {
return maximumCacheSize;
}
Modified: camel/trunk/components/camel-core-xml/src/main/java/org/apache/camel/core/xml/AbstractCamelThreadPoolFactoryBean.java
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-core-xml/src/main/java/org/apache/camel/core/xml/AbstractCamelThreadPoolFactoryBean.java?rev=1043407&r1=1043406&r2=1043407&view=diff
==============================================================================
--- camel/trunk/components/camel-core-xml/src/main/java/org/apache/camel/core/xml/AbstractCamelThreadPoolFactoryBean.java (original)
+++ camel/trunk/components/camel-core-xml/src/main/java/org/apache/camel/core/xml/AbstractCamelThreadPoolFactoryBean.java Wed Dec 8 13:27:44 2010
@@ -41,7 +41,7 @@ import static org.apache.camel.util.Obje
* @version $Revision: 925208 $
*/
@XmlAccessorType(XmlAccessType.FIELD)
-public abstract class AbstractCamelThreadPoolFactoryBean extends IdentifiedType implements CamelContextAware {
+public abstract class AbstractCamelThreadPoolFactoryBean extends AbstractCamelFactoryBean<ExecutorService> {
@XmlAttribute(required = true)
private Integer poolSize;
@@ -60,17 +60,8 @@ public abstract class AbstractCamelThrea
private String threadName;
@XmlAttribute
private Boolean daemon = Boolean.TRUE;
- @XmlAttribute
- private String camelContextId;
- @XmlTransient
- private CamelContext camelContext;
-
- public Object getObject() throws Exception {
- if (camelContext == null && camelContextId != null) {
- camelContext = getCamelContextWithId(camelContextId);
- }
- notNull(camelContext, "camelContext");
+ public ExecutorService getObject() throws Exception {
if (poolSize == null || poolSize <= 0) {
throw new IllegalArgumentException("PoolSize must be a positive number");
}
@@ -81,21 +72,17 @@ public abstract class AbstractCamelThrea
rejected = rejectedPolicy.asRejectedExecutionHandler();
}
- ExecutorService answer = camelContext.getExecutorServiceStrategy().newThreadPool(getId(), getThreadName(), getPoolSize(), max,
+ ExecutorService answer = getCamelContext().getExecutorServiceStrategy().newThreadPool(getId(), getThreadName(), getPoolSize(), max,
getKeepAliveTime(), getTimeUnit(), getMaxQueueSize(), rejected, isDaemon());
return answer;
}
protected abstract CamelContext getCamelContextWithId(String camelContextId);
- public Class getObjectType() {
+ public Class<ExecutorService> getObjectType() {
return ExecutorService.class;
}
- public boolean isSingleton() {
- return true;
- }
-
public Integer getPoolSize() {
return poolSize;
}
@@ -160,20 +147,4 @@ public abstract class AbstractCamelThrea
this.daemon = daemon;
}
- public String getCamelContextId() {
- return camelContextId;
- }
-
- public void setCamelContextId(String camelContextId) {
- this.camelContextId = camelContextId;
- }
-
- public CamelContext getCamelContext() {
- return camelContext;
- }
-
- public void setCamelContext(CamelContext camelContext) {
- this.camelContext = camelContext;
- }
-
}
\ No newline at end of file
Modified: camel/trunk/tests/camel-itest-osgi/src/test/java/org/apache/camel/itest/osgi/blueprint/OSGiBlueprintTestSupport.java
URL: http://svn.apache.org/viewvc/camel/trunk/tests/camel-itest-osgi/src/test/java/org/apache/camel/itest/osgi/blueprint/OSGiBlueprintTestSupport.java?rev=1043407&r1=1043406&r2=1043407&view=diff
==============================================================================
--- camel/trunk/tests/camel-itest-osgi/src/test/java/org/apache/camel/itest/osgi/blueprint/OSGiBlueprintTestSupport.java (original)
+++ camel/trunk/tests/camel-itest-osgi/src/test/java/org/apache/camel/itest/osgi/blueprint/OSGiBlueprintTestSupport.java Wed Dec 8 13:27:44 2010
@@ -20,6 +20,7 @@ import java.io.Closeable;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
+import java.lang.reflect.Method;
import org.apache.camel.CamelContext;
import org.apache.camel.component.seda.SedaComponent;
@@ -150,6 +151,18 @@ public class OSGiBlueprintTestSupport ex
assertEquals(1, ctx.getRoutes().size());
}
+ @Test
+ public void testEndpointInjection() throws Exception {
+ getInstalledBundle("CamelBlueprintTestBundle10").start();
+ BlueprintContainer ctn = getOsgiService(BlueprintContainer.class, "(osgi.blueprint.container.symbolicname=CamelBlueprintTestBundle10)", 5000);
+ CamelContext ctx = getOsgiService(CamelContext.class, "(camel.context.symbolicname=CamelBlueprintTestBundle10)", 5000);
+ Object producer = ctn.getComponentInstance("producer");
+ assertNotNull(producer);
+ assertEquals(TestProducer.class.getName(), producer.getClass().getName());
+ Method mth = producer.getClass().getMethod("getTestEndpoint");
+ assertNotNull(mth.invoke(producer));
+ }
+
@Before
public void setUp() throws Exception {
}
@@ -182,39 +195,49 @@ public class OSGiBlueprintTestSupport ex
.add("OSGI-INF/blueprint/test.xml", OSGiBlueprintTestSupport.class.getResource("blueprint-4.xml"))
.add(TestRouteBuilder.class)
.set(Constants.BUNDLE_SYMBOLICNAME, "CamelBlueprintTestBundle4")
- .build(withBnd())).noStart(),
+ .set(Constants.DYNAMICIMPORT_PACKAGE, "*")
+ .build()).noStart(),
bundle(newBundle()
.add("OSGI-INF/blueprint/test.xml", OSGiBlueprintTestSupport.class.getResource("blueprint-5.xml"))
.add(TestRouteBuilder.class)
.set(Constants.BUNDLE_SYMBOLICNAME, "CamelBlueprintTestBundle5")
- .build(withBnd())).noStart(),
+ .set(Constants.DYNAMICIMPORT_PACKAGE, "*")
+ .build()).noStart(),
bundle(newBundle()
.add("OSGI-INF/blueprint/test.xml", OSGiBlueprintTestSupport.class.getResource("blueprint-6.xml"))
- .set(Constants.DYNAMICIMPORT_PACKAGE, "*")
.set(Constants.BUNDLE_SYMBOLICNAME, "CamelBlueprintTestBundle6")
- .build(withBnd())).noStart(),
+ .set(Constants.DYNAMICIMPORT_PACKAGE, "*")
+ .build()).noStart(),
bundle(newBundle()
.add("OSGI-INF/blueprint/test.xml", OSGiBlueprintTestSupport.class.getResource("blueprint-7.xml"))
.add(TestInterceptStrategy.class)
- .set(Constants.DYNAMICIMPORT_PACKAGE, "*")
.set(Constants.BUNDLE_SYMBOLICNAME, "CamelBlueprintTestBundle7")
+ .set(Constants.DYNAMICIMPORT_PACKAGE, "*")
.build()).noStart(),
bundle(newBundle()
.add("OSGI-INF/blueprint/test.xml", OSGiBlueprintTestSupport.class.getResource("blueprint-8.xml"))
.add("org/apache/camel/component/properties/cheese.properties", OSGiBlueprintTestSupport.class.getResource("cheese.properties"))
- .set(Constants.DYNAMICIMPORT_PACKAGE, "*")
.set(Constants.BUNDLE_SYMBOLICNAME, "CamelBlueprintTestBundle8")
+ .set(Constants.DYNAMICIMPORT_PACKAGE, "*")
.build()).noStart(),
bundle(newBundle()
.add("OSGI-INF/blueprint/test.xml", OSGiBlueprintTestSupport.class.getResource("blueprint-9.xml"))
.add(TestRouteBuilder.class)
.set(Constants.BUNDLE_SYMBOLICNAME, "CamelBlueprintTestBundle9")
- .build(withBnd())).noStart(),
+ .set(Constants.DYNAMICIMPORT_PACKAGE, "*")
+ .build()).noStart(),
+
+ bundle(newBundle()
+ .add("OSGI-INF/blueprint/test.xml", OSGiBlueprintTestSupport.class.getResource("blueprint-10.xml"))
+ .add(TestProducer.class)
+ .set(Constants.BUNDLE_SYMBOLICNAME, "CamelBlueprintTestBundle10")
+ .set(Constants.DYNAMICIMPORT_PACKAGE, "*")
+ .build()).noStart(),
// install the spring dm profile
profile("spring.dm").version("1.2.0"),
@@ -234,7 +257,7 @@ public class OSGiBlueprintTestSupport ex
workingDirectory("target/paxrunner/"),
-// vmOption("-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=5005"),
+// vmOption("-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=5008"),
//felix(),
equinox());
Added: camel/trunk/tests/camel-itest-osgi/src/test/java/org/apache/camel/itest/osgi/blueprint/TestProducer.java
URL: http://svn.apache.org/viewvc/camel/trunk/tests/camel-itest-osgi/src/test/java/org/apache/camel/itest/osgi/blueprint/TestProducer.java?rev=1043407&view=auto
==============================================================================
--- camel/trunk/tests/camel-itest-osgi/src/test/java/org/apache/camel/itest/osgi/blueprint/TestProducer.java (added)
+++ camel/trunk/tests/camel-itest-osgi/src/test/java/org/apache/camel/itest/osgi/blueprint/TestProducer.java Wed Dec 8 13:27:44 2010
@@ -0,0 +1,30 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.itest.osgi.blueprint;
+
+import org.apache.camel.EndpointInject;
+import org.apache.camel.ProducerTemplate;
+
+public class TestProducer {
+
+ @EndpointInject(ref = "testEndpoint")
+ private ProducerTemplate testEndpoint;
+
+ public ProducerTemplate getTestEndpoint() {
+ return testEndpoint;
+ }
+}
Added: camel/trunk/tests/camel-itest-osgi/src/test/resources/org/apache/camel/itest/osgi/blueprint/blueprint-10.xml
URL: http://svn.apache.org/viewvc/camel/trunk/tests/camel-itest-osgi/src/test/resources/org/apache/camel/itest/osgi/blueprint/blueprint-10.xml?rev=1043407&view=auto
==============================================================================
--- camel/trunk/tests/camel-itest-osgi/src/test/resources/org/apache/camel/itest/osgi/blueprint/blueprint-10.xml (added)
+++ camel/trunk/tests/camel-itest-osgi/src/test/resources/org/apache/camel/itest/osgi/blueprint/blueprint-10.xml Wed Dec 8 13:27:44 2010
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ Licensed to the Apache Software Foundation (ASF) under one or more
+ contributor license agreements. See the NOTICE file distributed with
+ this work for additional information regarding copyright ownership.
+ The ASF licenses this file to You under the Apache License, Version 2.0
+ (the "License"); you may not use this file except in compliance with
+ the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+<blueprint xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0">
+
+ <camelContext xmlns="http://camel.apache.org/schema/blueprint">
+ <endpoint id="testEndpoint" uri="seda:test.queue" />
+ </camelContext>
+
+ <bean id="producer" class="org.apache.camel.itest.osgi.blueprint.TestProducer"/>
+
+</blueprint>