Thank you for the quick reply Claus. I sincerely appreciate it.

I placed the <convertBodyTo type="String" /> ahead of the Smooks as you
mentioned but get a strange error that I suspect is BOM characters at the
beginning of the CSV file. Is there a quick, clever way to strip BOM
characters in a route before passing along to the Smooks endpoint?

aused by: org.xml.sax.SAXParseException: Content is not allowed in prolog.
        at org.apache.xerces.parsers.AbstractSAXParser.parse(Unknown Source)
        at org.milyn.delivery.sax.SAXParser.parse(SAXParser.java:76)
        at 
org.milyn.delivery.sax.SmooksSAXFilter.doFilter(SmooksSAXFilter.java:86)
        ... 28 more



On 5/22/14 11:01 AM, "Claus Ibsen" <claus.ib...@gmail.com> wrote:

>Hi
>
>Add a <convertBodyTo type="String"/> before the smooks so the data is
>in a format that smooks can read.
>
>On Thu, May 22, 2014 at 4:55 PM, Wilkerson, Daniel
><dwilker...@fullsail.com> wrote:
>> Hi everyone. I working on a data integration prototype/proof-of-concept
>>using Camel 2.12, Fuse 7.1, Smooks 1.5.2, and ActiveMQ 5.9. I'm stuck
>>currently in a unit test I'm writing to test binding an CSV file read
>>from the file system using the file:// component and passed to smooks
>>for transforming directly to some MyBatis POJO's I've already coded
>>previously. While running my unit test (without any ActiveMQ being used
>>yet) I get the output/stacktrace below. I am stuck and not sure how to
>>get this to work properly. I've been through the smooks and camel
>>documentation but am hitting a wall seeing what the issue might be.
>>
>> I have spent some time rummaging through the component unit tests in
>>the camel source code base, but haven't been able to find ones that are
>>similar to what I'm doing ­ e.g. Using CamelBluprintTestSupport with
>>similar components fashioned using declarative XML/DSL.
>>
>> What I'm look for my unit test to do is confirm the binding has
>>occurred by dumping the contents of the bound POJO to verify it contains
>>the records from the CSV. If I can get that far success fully, then I
>>can move on to using my Queues, the mybatis:// component, and trying
>>pushing into my demo postgres database. I have, thankfully, been able to
>>get a sample to work that transforms the CSV to XML and been able to
>>route that along, however, that's not the use case I'm looking for.
>>
>> Any help getting unstuck would be greatly appreciated. I posted my
>>output, smooks config, unit test bean, and my blueprint.xml file. I have
>>structured this project using the Camel Blueprint Maven archetype. It's
>>seems like it trying to use SAX to parse the file despite the fact that
>>I'm trying to bind directly to a POJOŠ?
>>
>> Thanks you all!
>> Daniel
>>
>>
>> Test Output:
>>
>> Message History
>>
>> 
>>-------------------------------------------------------------------------
>>--------------------------------------------------------------
>>
>> RouteId              ProcessorId          Processor
>>                                                   Elapsed (ms)
>>
>> [route1            ] [route1            ]
>>[file://data_files/data?delay=360000&delete=false&fileName=dat] [
>>61]
>>
>> [route1            ] [to1               ] [smooks://smooks-config.xml
>>                                                 ] [        59]
>>
>>
>> Exchange
>>
>> 
>>-------------------------------------------------------------------------
>>--------------------------------------------------------------
>>
>> Exchange[
>>
>> Id              
>>ID-ada0481cdb71c7-fullsail-com-49652-1400704749961-0-4
>>
>> ExchangePattern     InOnly
>>
>> Headers         
>>{breadcrumbId=ID-ada0481cdb71c7-fullsail-com-49652-1400704749961-0-3,
>>CamelFileAbsolute=false,
>>CamelFileAbsolutePath=/Users/dwilkerson/jbdevworkspace/fs-camel-blueprint
>>/data_files/data/dat.csv, CamelFileLastModified=1400704750000,
>>CamelFileLength=6, CamelFileName=dat.csv, CamelFileNameConsumed=dat.csv,
>>CamelFileNameOnly=dat.csv, CamelFileParent=data_files/data,
>>CamelFilePath=data_files/data/dat.csv, CamelFileRelativePath=dat.csv,
>>CamelRedelivered=false, CamelRedeliveryCounter=0,
>>CamelSmooksExecutionContext={interface
>>org.apache.camel.Exchange=Exchange[org.apache.camel.component.file.Generi
>>cFileMessage@5b2f9ee1]}}
>>
>> BodyType            org.apache.camel.component.file.GenericFile
>>
>> Body                [Body is file based: GenericFile[dat.csv]]
>>
>> ]
>>
>>
>> Stacktrace
>>
>> 
>>-------------------------------------------------------------------------
>>--------------------------------------------------------------
>>
>> org.apache.camel.TypeConversionException: Error during type conversion
>>from type: org.apache.camel.component.file.GenericFile to the required
>>type: javax.xml.transform.Source with value GenericFile[dat.csv] due
>>java.lang.AbstractMethodError:
>>javax.xml.parsers.DocumentBuilderFactory.setFeature(Ljava/lang/String;Z)V
>>
>> at 
>>org.apache.camel.impl.converter.BaseTypeConverterRegistry.convertTo(BaseT
>>ypeConverterRegistry.java:130)
>>
>> at 
>>org.apache.camel.core.osgi.OsgiTypeConverter.convertTo(OsgiTypeConverter.
>>java:108)
>>
>> at org.apache.camel.impl.MessageSupport.getBody(MessageSupport.java:72)
>>
>> at org.apache.camel.impl.MessageSupport.getBody(MessageSupport.java:47)
>>
>> at 
>>org.milyn.smooks.camel.processor.SmooksProcessor.getSource(SmooksProcesso
>>r.java:172)
>>
>> at 
>>org.milyn.smooks.camel.processor.SmooksProcessor.process(SmooksProcessor.
>>java:112)
>>
>> at 
>>org.apache.camel.impl.ProcessorEndpoint.onExchange(ProcessorEndpoint.java
>>:103)
>>
>> at 
>>org.apache.camel.impl.ProcessorEndpoint$1.process(ProcessorEndpoint.java:
>>71)
>>
>> at 
>>org.apache.camel.util.AsyncProcessorConverterHelper$ProcessorToAsyncProce
>>ssorBridge.process(AsyncProcessorConverterHelper.java:61)
>>
>> at 
>>org.apache.camel.processor.SendProcessor.process(SendProcessor.java:110)
>>
>> at 
>>org.apache.camel.processor.interceptor.TraceInterceptor.process(TraceInte
>>rceptor.java:163)
>>
>> at 
>>org.apache.camel.processor.RedeliveryErrorHandler.process(RedeliveryError
>>Handler.java:398)
>>
>> at 
>>org.apache.camel.processor.CamelInternalProcessor.process(CamelInternalPr
>>ocessor.java:191)
>>
>> at org.apache.camel.processor.Pipeline.process(Pipeline.java:118)
>>
>> at org.apache.camel.processor.Pipeline.process(Pipeline.java:80)
>>
>> at 
>>org.apache.camel.processor.CamelInternalProcessor.process(CamelInternalPr
>>ocessor.java:191)
>>
>> at 
>>org.apache.camel.component.file.GenericFileConsumer.processExchange(Gener
>>icFileConsumer.java:401)
>>
>> at 
>>org.apache.camel.component.file.GenericFileConsumer.processBatch(GenericF
>>ileConsumer.java:201)
>>
>> at 
>>org.apache.camel.component.file.GenericFileConsumer.poll(GenericFileConsu
>>mer.java:165)
>>
>> at 
>>org.apache.camel.impl.ScheduledPollConsumer.doRun(ScheduledPollConsumer.j
>>ava:187)
>>
>> at 
>>org.apache.camel.impl.ScheduledPollConsumer.run(ScheduledPollConsumer.jav
>>a:114)
>>
>> at 
>>java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:439)
>>
>> at 
>>java.util.concurrent.FutureTask$Sync.innerRunAndReset(FutureTask.java:317
>>)
>>
>> at java.util.concurrent.FutureTask.runAndReset(FutureTask.java:150)
>>
>> at 
>>java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.acce
>>ss$101(ScheduledThreadPoolExecutor.java:98)
>>
>> at 
>>java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.runP
>>eriodic(ScheduledThreadPoolExecutor.java:180)
>>
>> at 
>>java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(
>>ScheduledThreadPoolExecutor.java:204)
>>
>> at 
>>java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor
>>.java:895)
>>
>> at 
>>java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.jav
>>a:918)
>>
>> at java.lang.Thread.run(Thread.java:695)
>>
>> Caused by: org.apache.camel.RuntimeCamelException:
>>java.lang.AbstractMethodError:
>>javax.xml.parsers.DocumentBuilderFactory.setFeature(Ljava/lang/String;Z)V
>>
>> at 
>>org.apache.camel.util.ObjectHelper.wrapRuntimeCamelException(ObjectHelper
>>.java:1363)
>>
>> at 
>>org.apache.camel.util.ObjectHelper.invokeMethod(ObjectHelper.java:1005)
>>
>> at 
>>org.apache.camel.impl.converter.InstanceMethodTypeConverter.convertTo(Ins
>>tanceMethodTypeConverter.java:78)
>>
>> at 
>>org.apache.camel.component.file.GenericFileConverter.convertTo(GenericFil
>>eConverter.java:97)
>>
>> at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
>>
>> at 
>>sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java
>>:39)
>>
>> at 
>>sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorI
>>mpl.java:25)
>>
>> at java.lang.reflect.Method.invoke(Method.java:597)
>>
>> at 
>>org.apache.camel.util.ObjectHelper.invokeMethod(ObjectHelper.java:1001)
>>
>> at 
>>org.apache.camel.impl.converter.StaticMethodFallbackTypeConverter.convert
>>To(StaticMethodFallbackTypeConverter.java:62)
>>
>> at 
>>org.apache.camel.impl.converter.BaseTypeConverterRegistry.doConvertTo(Bas
>>eTypeConverterRegistry.java:315)
>>
>> at 
>>org.apache.camel.impl.converter.BaseTypeConverterRegistry.convertTo(BaseT
>>ypeConverterRegistry.java:113)
>>
>> ... 29 more
>>
>> Caused by: java.lang.AbstractMethodError:
>>javax.xml.parsers.DocumentBuilderFactory.setFeature(Ljava/lang/String;Z)V
>>
>> at 
>>org.apache.camel.converter.jaxp.XmlConverter.createDocumentBuilderFactory
>>(XmlConverter.java:957)
>>
>> at 
>>org.apache.camel.converter.jaxp.XmlConverter.getDocumentBuilderFactory(Xm
>>lConverter.java:897)
>>
>> at 
>>org.apache.camel.converter.jaxp.XmlConverter.createDocumentBuilder(XmlCon
>>verter.java:968)
>>
>> at 
>>org.apache.camel.converter.jaxp.XmlConverter.toDOMSource(XmlConverter.jav
>>a:596)
>>
>> at 
>>org.apache.camel.converter.jaxp.XmlConverter.toDOMSource(XmlConverter.jav
>>a:604)
>>
>> at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
>>
>> at 
>>sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java
>>:39)
>>
>> at 
>>sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorI
>>mpl.java:25)
>>
>> at java.lang.reflect.Method.invoke(Method.java:597)
>>
>> at 
>>org.apache.camel.util.ObjectHelper.invokeMethod(ObjectHelper.java:1001)
>>
>> ... 39 more
>>
>> [data_files/dat] GenericFileOnCompletion        DEBUG Done processing
>>file: GenericFile
>>
>> Unit Test Class:
>> public class RouteTest extends CamelBlueprintTestSupport {
>>
>>     @Override
>>     protected String getBlueprintDescriptor() {
>>         return "/OSGI-INF/blueprint/blueprint.xml";
>>     }
>>
>>     @Override
>>     public void setUp() throws Exception{
>>     super.setUp();
>>     // send a message
>>         template.sendBodyAndHeader("file:data_files/data", "Dat",
>>Exchange.FILE_NAME, "dat.csv");
>>     }
>>
>>     @Test
>>     public void testRoute() throws Exception {
>>         // set mock expectations
>>         MockEndpoint me = getMockEndpoint("mock:results");
>>         me.expectedBodiesReceivedInAnyOrder("Dat");
>>
>>         // assert mocks
>>         assertMockEndpointsSatisfied();
>>
>>         // assert on the debugBefore/debugAfter methods below being
>>called as we've enabled the debugger
>>     }
>> }
>>
>> Bluprint.xml:
>>
>> <?xml version="1.0" encoding="UTF-8"?>
>> <blueprint xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0";
>>        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";
>>        xmlns:camel="http://camel.apache.org/schema/blueprint";
>>        xsi:schemaLocation="
>>        http://www.osgi.org/xmlns/blueprint/v1.0.0
>>http://www.osgi.org/xmlns/blueprint/v1.0.0/blueprint.xsd
>>        http://camel.apache.org/schema/blueprint
>>http://camel.apache.org/schema/blueprint/camel-blueprint.xsd";>
>>
>> <bean id="smooks"
>>class="org.milyn.smooks.camel.dataformat.SmooksDataFormat">
>>   <argument value="classpath:/smooks-config.xml" />
>> </bean>
>>
>>   <camelContext trace="true" id="blueprintContext"
>>xmlns="http://camel.apache.org/schema/blueprint";>
>> <route>
>> <from uri="direct:in"/>
>> <from 
>>uri="file:data_files/data?fileName=dat.csv&amp;delete=false&amp;delay=360
>>000" />
>>
>> <to uri="smooks://smooks-config.xml"/>
>> <to uri="mock:result"/>
>> </route>
>>
>> </camelContext>
>> </blueprint>
>>
>>
>> Smooks Config:
>>
>> <?xml version="1.0"?>
>> <smooks-resource-list xmlns="http://www.milyn.org/xsd/smooks-1.1.xsd";
>> xmlns:csv="http://www.milyn.org/xsd/smooks/csv-1.2.xsd";
>> xmlns:jb="http://www.milyn.org/xsd/smooks/javabean-1.3.xsd";
>> xmlns:camel="http://www.milyn.org/xsd/smooks/camel-1.4.xsd";
>> xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";
>> xsi:schemaLocation="http://www.milyn.org/xsd/smooks-1.1.xsd
>>http://www.milyn.org/xsd/smooks-1.1.xsd
>> http://www.milyn.org/xsd/smooks/javabean-1.3.xsd
>>http://www.milyn.org/xsd/smooks/javabean-1.3.xsd
>> http://www.milyn.org/xsd/smooks/camel-1.4.xsd
>>http://www.milyn.org/xsd/smooks/camel-1.4.xsd";>
>>
>>     <jb:bean beanId="datBean" class="com.mycompany.Dat"
>>createOnElement="#document">
>>     <!-- jb:value property="assetsCount" data=""/>
>>     <jb:value property="blocker" data=""/>
>>     <jb:value property="code" data="code"/-->
>>     <jb:value property="creditHours" data="credit_hours"/>
>>     <!-- jb:value property="ctBatchAction" data=""/-->
>>     <jb:value property="description" data="description"/>
>> <!-- jb:value property="id" data=""/-->
>> <jb:value property="lmsTitle" data="title"/>
>> <!-- jb:value property="minimumBlockReleaseScore" data=""/-->
>> <jb:value property="sisCourseId" data="sis_course_id"/>
>> <jb:value property="sisGradeScaleId" data="sis_grade_scale_id"/>
>> <jb:value property="sisTitle" data="title"/>
>> <!-- jb:value property="viewable" data=""/-->
>>     </jb:bean>
>>
>>     <camel:route beanId="datBean">
>> <camel:to endpoint="direct:in" />
>> </camel:route>
>> </smooks-resource-list>
>
>
>
>-- 
>Claus Ibsen
>-----------------
>Red Hat, Inc.
>Email: cib...@redhat.com
>Twitter: davsclaus
>Blog: http://davsclaus.com
>Author of Camel in Action: http://www.manning.com/ibsen
>hawtio: http://hawt.io/
>fabric8: http://fabric8.io/

Reply via email to