0
votes

I'm using Mule version 3.5.1. I'm trying to run a batch records.Input phase ( File inbound) has been successfully being completed, but processing phase is erring out whereas i have only datamapper inside the process record phase( i have also validated xsd against xml, it looks correct).

   <data-mapper:config name="XML_To_CSV" transformationGraphPath="xml_to_csv.grf" doc:name="XML_To_CSV"/>
  <batch:job name="businesslogicflowBatch1">
    <batch:threading-profile poolExhaustedAction="WAIT"/>
    <batch:input>
        <file:inbound-endpoint path="C:\Users\Desktop\IN" responseTimeout="10000" doc:name="File"/>
        <logger message="*******inputPhase:#[payload]******" level="INFO" doc:name="Logger"/>
    </batch:input>
    <batch:process-records>
        <batch:step name="Batch_Step">
            <data-mapper:transform config-ref="XML_To_CSV" doc:name="XML To CSV"/>
        </batch:step>
    </batch:process-records>
    <batch:on-complete>
        <logger level="INFO" doc:name="Logger"/>
    </batch:on-complete>
</batch:job>

Please find my error

.............
com.mulesoft.module.batch.engine.DefaultBatchEngine: Input phase completed
ERROR 2014-09-12 14:26:04,219 [[businesslogicflow].connector.file.mule.default.receiver.01]                    org.mule.exception.DefaultMessagingExceptionStrategy: 
Message:Object"org.mule.transport.file.ReceiverFileInputStream" not of correct type. It must be of type "{interface java.lang.Iterable,interface java.util.Iterator,interface org.mule.routing.MessageSequence,interface java.util.Collection}" (java.lang.IllegalArgumentException)  

i'm not sure what is looking for to make "java.lang.interface and java.util.iterator" .

Please let me know your suggestions. Thank in advance.

2

2 Answers

1
votes

I think you need to change it from filestream to an object the datamapper can use. I don't have a sample configured to test with but I would start by adding a File To String transformer in front of the datamapper.

0
votes

I have resolved by the following way, since my input is xml, i have converted xml to jaxb object. Process record will expect the records in collections or list. Using java component convert in to Arraylist. Then as usual, datamapper( pojo to csv). Please find the config below

    <mulexml:jaxb-context name="JAXB_Context" packageNames="com.to" doc:name="JAXB Context"/>

<spring:beans>
    <spring:bean name="NoFactsBean" class="java.util.ArrayList" />
</spring:beans>

<data-mapper:config name="Pojo_To_CSV" transformationGraphPath="pojo_to_csv.grf" doc:name="Pojo_To_CSV"/>
  <batch:job name="businesslogicflowBatch1">
    <batch:threading-profile poolExhaustedAction="WAIT"/>
    <batch:input>
        <file:inbound-endpoint path="C:\Users\Desktop\IN" responseTimeout="10000" doc:name="File"/>
        <mulexml:jaxb-xml-to-object-transformer returnClass="com.to.envelop" jaxbContext-ref="JAXB_Context" doc:name="XML to JAXB Object"/>
        <component class="com.GenerateList" doc:name="Java"/>
    </batch:input>
    <batch:process-records>
        <batch:step name="Batch_Step" accept-expression="#[getFirstException()]" accept-policy="ALL">
            <data-mapper:transform config-ref="Pojo_To_CSV" doc:name="Pojo To CSV"/>

            <file:outbound-endpoint path="C:\Users\Desktop\OUT" outputPattern="#[function:dateStamp]_convert.csv" responseTimeout="10000" doc:name="File"/>
        </batch:step>
    </batch:process-records>
    <batch:on-complete>
        <logger level="INFO" doc:name="Logger"/>
    </batch:on-complete>
</batch:job>