Child pages
  • Tutorial-Example-ReportIncident-Part6
Skip to end of metadata
Go to start of metadata

Part 6

... Continued from Part 5

We continue from part 5 where we ended up with a complete solution using routes defined in Java code. In this last part of this tutorial we will define the route in XML instead.


As I am writing this, its been 4.5 years since I wrote the first 5 parts of this tutorial. Recently an user on stackoverflow praised this tutorial said it helped him get onboard Camel. Though he was looking for part 6 with the routes in XML. Frankly I have forgot all about adding this part. So lets close the book and get this part into the Camel docs.

The XML code below is included in the example in camel-example-report-incident in the directory src/main/resources/META-INF/spring/. The file is named camel-context.xml

Error rendering macro 'code': Invalid value specified for parameter 'java.lang.NullPointerException'

<!-- here we have Spring XML file with all the namespaces here in the top of the XML file -->
<beans xmlns=""

  <!-- this is Spring XML example of the Camel route in the ReportIncidentRoutes class -->
  <!-- this is for demonstration purpose, to show how you can use Camel with XML DSL -->

   <!-- here we define the CXF endpoint, where {{port}} refers to a placeholder so we can define the port number
           in an external .properties file -->
  <cxf:cxfEndpoint id="reportIncident"

   <!-- We use a bean to make the response bean that CXF expects -->
  <bean id="responseBean" class="org.apache.camel.example.reportincident.MyBean"/>

   <!-- this is the bean we use to generate the dynamic file name -->
  <bean id="filenameGenerator" class="org.apache.camel.example.reportincident.FilenameGenerator"/>

  <!-- this CamelContext contains the equivalent route from the Java DSL, but in XML
       so end users can see how to implement the route in both Java and XML -->
  <camelContext id="camel" xmlns="">

    <!-- property which contains port number -->
    <!-- we have file:target/ which can be optional and override existing values, we use this for testing purpose -->
    <camel:propertyPlaceholder id="properties" location=",file:target/"/>

    <!-- this is the first route that uses CXF as web service -->
      <from uri="cxf:bean:reportIncident"/>
      <convertBodyTo type="org.apache.camel.example.reportincident.InputReportIncident"/>
      <setHeader headerName="CamelFileName">
        <method bean="filenameGenerator" method="generateFilename"/>
      <to uri="velocity:etc/MailBody.vm"/>
      <to uri="file://target/subfolder"/>
        <method bean="responseBean" method="getOK"/>

    <!-- this is the 2nd route that pickup files and send them as emails -->
      <from uri="file://target/subfolder"/>
      <setHeader headerName="subject">
        <constant>new incident reported</constant>
      <to uri="smtp://someone@localhost?password=secret&amp;"/>



After 5 years we are at the end

So finally we managed to add part 6 to this tutorial. Yes we have used a lot of time to write this tutorial, so we hope that it helps you ride the Camel.

  • No labels