Configuring Camel
How do I add a component?
You might first want to read Writing Components for a background in how to implement a new component. Typically it means you write an implementation of the Component interface, usually deriving from DefaultComponent.
You can then register your component explicitly via:
CamelContext context = new DefaultCamelContext();
context.addComponent("foo", new FooComponent(context));
However you can use the auto-discovery feature of Camel where by Camel will automatically add a Component when an endpoint URI is used. To do this you would create a file called:
/META-INF/services/org/apache/camel/component/foo
with contents:
class=org.acme.FooComponent
(You can add other property configurations in there too if you like.)
Then if you refer to an endpoint as foo://somethingOrOther
Camel
will auto-discover your component and register it.
Working with Spring XML
You can configure a component via Spring using the following mechanism:
<camelContext id="camel" xmlns="http://camel.apache.org/schema/spring">
<jmxAgent id="agent" disabled="true"/>
</camelContext>
<bean id="activemq" class="org.apache.camel.component.jms.JmsComponent">
<property name="connectionFactory">
<bean class="org.apache.activemq.ActiveMQConnectionFactory">
<property name="brokerURL" value="vm://localhost?broker.persistent=false&broker.useJmx=false"/>
</bean>
</property>
</bean>
Which allows you to configure a component using some name (activemq in the
above example), then you can refer to the component using
activemq:[queue:|topic:]destinationName
.
If you want to add explicit Spring 2.x XML objects to your XML then you
could use the xbean-spring
which tries to automate most of the XML
binding work for you; or you could look in camel-spring
at CamelNamespaceHandler
you’ll see how we handle the Spring XML
stuff (warning it’s kinda hairy code to look at :smile:).
If you wanted <fooComponent>
to be a standard part of the core Camel
schema then you’d hack that file to add your component &
contribute a patch to the camel XSD. Otherwise
you could write your own namespace & schema if you prefer.