Hi Are you sure smooks is reading it as a CSV as the code failure is in sax which is usually about XML.
Btw an alternative to smooks is beanio which I find good http://camel.apache.org/beanio http://beanio.org/ On Thu, May 22, 2014 at 5:34 PM, Wilkerson, Daniel <dwilker...@fullsail.com> wrote: > 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&delete=false&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/ > -- 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/