Omkar Venkata
Omkar Venkata

Reputation: 59

Expected return type java.lang.Iterable

How to convert type=java.lang.String to type=java.lang.Iterable as batch step (Process Records) is expecting type of java.lang.Iterable. Note : Input is an xml file and mule flow is a batch job.

When the xml has only one 'Report_Entry' record below error is recieved. For multiple entries of 'Report_Entry' flow works fine.

<object-to-string-transformer doc:name="Object to String"/>
<logger message="#[payload]" level="INFO" doc:name="Logger"/>
<set-payload
value="#[xpath3('/*:Report_Data/*:Report_Entry', payload, 'NODESET')]" doc:name="Set Payload"/>
<logger message="XML Record - #[payload]" level="INFO" doc:name="Logger"/>
    </batch:input>
    <batch:process-records>
        <batch:step name="Batch_Step1">
            <json:object-to-json-transformer doc:name="Object to JSON"/>
            <logger message="XML Record - #[payload]" level="INFO" doc:name="Logger"/>
                <amqp:outbound-endpoint exchangeName="${amqp.exchangeName}" queueName="${amqp.queueName}" responseTimeout="10000" encoding="UTF-8" mimeType="application/xml" connector-ref="AMQP_Connector" doc:name="AMQP"/>
        </batch:step>
    </batch:process-records>

In the logger it is printing 'org.mule.api.processor.LoggerMessageProcessor: XML Record - net.sf.saxon.dom.DOMNodeList@57d263b4' after the set-payload condition. Our requirement is to convert the xml record to JSON and write to AMQP.

Upvotes: 0

Views: 514

Answers (1)

Ryan Carter
Ryan Carter

Reputation: 11606

That's because of the splitter. If you just want a collection/iterable before the batch job, jsut use set-payload:

<set-payload
    value="#[xpath3('/*:Report_Data/*:Report_Entry', payload, 'NODESET')]" />

<batch:execute name="test" />

This should wok regardless of the amount nodes.

Upvotes: 0

Related Questions