camel-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Claus Ibsen <claus.ib...@gmail.com>
Subject Re: org.apache.camel.TypeConversionException: Error during type conversion from type: org.apache.camel.component.file.GenericFile to the required type
Date Thu, 22 May 2014 15:01:41 GMT
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
<dwilkerson@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.GenericFileMessage@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(BaseTypeConverterRegistry.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(SmooksProcessor.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$ProcessorToAsyncProcessorBridge.process(AsyncProcessorConverterHelper.java:61)
>
> at org.apache.camel.processor.SendProcessor.process(SendProcessor.java:110)
>
> at org.apache.camel.processor.interceptor.TraceInterceptor.process(TraceInterceptor.java:163)
>
> at org.apache.camel.processor.RedeliveryErrorHandler.process(RedeliveryErrorHandler.java:398)
>
> at org.apache.camel.processor.CamelInternalProcessor.process(CamelInternalProcessor.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(CamelInternalProcessor.java:191)
>
> at org.apache.camel.component.file.GenericFileConsumer.processExchange(GenericFileConsumer.java:401)
>
> at org.apache.camel.component.file.GenericFileConsumer.processBatch(GenericFileConsumer.java:201)
>
> at org.apache.camel.component.file.GenericFileConsumer.poll(GenericFileConsumer.java:165)
>
> at org.apache.camel.impl.ScheduledPollConsumer.doRun(ScheduledPollConsumer.java:187)
>
> at org.apache.camel.impl.ScheduledPollConsumer.run(ScheduledPollConsumer.java: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.access$101(ScheduledThreadPoolExecutor.java:98)
>
> at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.runPeriodic(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.java: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(InstanceMethodTypeConverter.java:78)
>
> at org.apache.camel.component.file.GenericFileConverter.convertTo(GenericFileConverter.java:97)
>
> at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
>
> at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
>
> at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.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.convertTo(StaticMethodFallbackTypeConverter.java:62)
>
> at org.apache.camel.impl.converter.BaseTypeConverterRegistry.doConvertTo(BaseTypeConverterRegistry.java:315)
>
> at org.apache.camel.impl.converter.BaseTypeConverterRegistry.convertTo(BaseTypeConverterRegistry.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(XmlConverter.java:897)
>
> at org.apache.camel.converter.jaxp.XmlConverter.createDocumentBuilder(XmlConverter.java:968)
>
> at org.apache.camel.converter.jaxp.XmlConverter.toDOMSource(XmlConverter.java:596)
>
> at org.apache.camel.converter.jaxp.XmlConverter.toDOMSource(XmlConverter.java:604)
>
> at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
>
> at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
>
> at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.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=360000"
/>
>
> <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: cibsen@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/

Mime
View raw message