Below piece does a few things. It's useful if you are using Camel DSL like me. The explanation is in the form of comment below.   
<!-- Bean instantiation of Sql Server driver which will be referenced by below DSL -->
    <bean id="sqlServerDS"
        class="org.springframework.jdbc.datasource.DriverManagerDataSource">
        <property name="driverClassName" value="${mssql.driverClassName}" />
        <property name="url" value="${mssql.url}" />
        <property name="username" value="${mssql.username}" />
        <property name="password" value="${mssql.password}" />
    </bean> 
<!-- Setting up camel endpoint for XSLT which will be used to transform the received XML into another XML -->
<camel:endpoint id="someXSLT" uri="xslt:file://${xslt.location}/someXSLT.xslt"/>
<!-- Setting up File endpoint to output the generated output flat file -->
<camel:endpoint id="InformationFile" uri="file://?fileName=${output.location}/$simple{file:name}&fileExist=Append"/>
<!-- Camel Route starts -->
<camel:route id="LalaLand">
                        <!-- Listening to someQueue which has been setup in ActiveMq -->   
                        <camel:from uri="tcpActivemq:queue:someQueue"/>
                        <!-- transform the Xml picked up from someQueue using someXSLT -->
   <camel:to ref="someXSLT"/>
                        <!-- define file name for the output file and stores it in Header -->
                        <camel:setHeader headerName="CamelFileName">
    <camel:xpath resultType="java.lang.String">concat('somefile_', //code, '.txt')     </camel:xpath>
   </camel:setHeader>
                        <!-- logging -->
   <camel:log message="SPLIT BEGINS" loggingLevel="DEBUG" logName="lalaland" />
                       <!-- Split the Xml transformed by someXSLT into lines -->
   <camel:split>
    <camel:xpath>//FileRecord</camel:xpath>
    <camel:setHeader headerName="ctcRef">
     <camel:xpath resultType="java.lang.String">//contactRef</camel:xpath>
    </camel:setHeader>
                                <!- The payload will lose in the next section so needs to store the original message -->
    <camel:setProperty propertyName="oriMessage">
     <camel:simple>${body}</camel:simple>
    </camel:setProperty>
                                <!-- if header variable ctcRef is not empty, Camel DSL will call 3 SQL to finally get the Date Of Birth, which is the requirement of this. Why 3 Sql? Because over here it does not support JOIN query -->
    <camel:choice>
     <camel:when>
      <camel:simple>${header.ctcRef} != ''</camel:simple>
      <camel:to uri="sql:SELECT ID FROM CONTACTS WHERE CONTACTREF = :#ctcRef;?dataSource=sqlServerDS" />
      <camel:log message="body: ${body[0].get('ID')} " loggingLevel="DEBUG" logName="com.experian" />
      <camel:setHeader headerName="contactId">
       <camel:simple>${body[0].get('ID')}</camel:simple>
      </camel:setHeader>
      <camel:log message="contactId: ${header.contactId} " loggingLevel="DEBUG" logName="com.experian" />
      <camel:to uri="sql:SELECT ACCOUNTID FROM ACCOUNTCONTACTS WHERE CONTACTTYPEID = 102 AND CONTACTID = :#contactId;?dataSource=sqlServerDS" />
      <camel:setHeader headerName="accountId">
       <camel:simple>${body[0].get('ACCOUNTID')}</camel:simple>
      </camel:setHeader>
      <camel:log message="accountId: ${header.accountId} " loggingLevel="DEBUG" logName="com.experian" />
      <camel:to uri="sql:SELECT CONVERT(varchar,DATE_OF_BIRTH,23) AS DOB FROM CS_PERSON WHERE ACCOUNTS1 = :#accountId;?dataSource=sqlServerDS" />
                                                <!-- Store Date Of Birth in Header -->
      <camel:setProperty propertyName="dob">
       <camel:simple>${body[0].get('DOB')}</camel:simple>
      </camel:setProperty>
      <camel:log message="dob: ${header.dob} " loggingLevel="DEBUG" logName="com.experian" />
     </camel:when>
    </camel:choice>
                               <!-- Set the Body back with the original payload stored above -->
    <camel:setBody>
     <camel:simple>${property.oriMessage}</camel:simple>
    </camel:setBody>
                                <!-- Retrieves field value using xpath, add the dob from Header, and print in one line -->
    <camel:transform>
     <camel:xpath resultType="java.lang.String">concat(//accountRef, '|', //contactRef, '|', //title, '|', //givenName, '|', //middleName, '|', //familyName, '|', ${header.dob}, '
')</camel:xpath>
    </camel:transform>
                               <!- The below will be executed after last line by checking based on CamelSplitComplete from Header -->
    <camel:when>
     <camel:simple>${header.CamelSplitComplete} == true</camel:simple>
                                        <!-- Below will add below wordings and number of records based on CamelSplitSize from Header to the output flat file -->
     <camel:transform>
      <camel:simple>adding new line here ${header.CamelSplitSize} </camel:simple>
     </camel:transform>
    </camel:when>
                                <!- content will be output to a physical file -->
    <camel:to ref="someFile"/>
   </camel:split>
  </camel:route>