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>

Reply via email to