I'm new to Mulesoft development. Recently I'm asked to develop a MuleESB application to read some values from a comma-delimited CSV file and then call a REST API with the values provided. I'm not sure if I'm doing it correctly or on the right path towards achieving that as I keep getting this WARN 2016-08-03 02:39:49,209 [creditsFlow.stage1.02] org.mule.routing.ExpressionSplitter: Splitter returned no results. If this is not expected, please check your split expression and nothing happens next.
Usually this is how we call the REST API: https://xx.xx.com/server/CreditPost/views/CreditPost?ID=12345678&CompletionDt=2017-08-03&CourseNbr=90000001
Below is the snippet of my MuleESB code:
<flow name="creditsFlow">
<file:inbound-endpoint path="C:\Users\kteo1\Downloads\Inbound" responseTimeout="10000" metadata:id="a67520d0-f60d-4b5c-9fc8-3578d6c6434d" doc:name="input file" mimeType="application/csv">
<file:filename-regex-filter pattern="credits_(?:(?!\.csv)(?:.|\n))*\.csv" caseSensitive="true"/>
</file:inbound-endpoint>
<dw:transform-message metadata:id="0e395c12-6af5-4894-b9c2-f7642816f8d3" doc:name="CSV to XML">
<dw:input-payload doc:sample="list_credits.csv"/>
<dw:set-payload><![CDATA[%dw 1.0
%output application/xml
---
{
credits: {
(payload map ((payload01 , indexOfPayload01) -> {
credit: {
ID: payload01.ID,
CourseNbr: payload01.CourseNbr,
CompletionDt: payload01.CompletionDt as :string
}
}))
}
}]]></dw:set-payload>
</dw:transform-message>
<json:xml-to-json-transformer doc:name="XML to JSON"/>
<logger message="#[message.payload]" level="INFO" doc:name="Logger"/>
<json:json-to-object-transformer doc:name="JSON to Object"/>
<set-variable variableName="totalCredits" value="#[json:credits]" doc:name="totalCredits"/>
<set-variable variableName="creditsArrayList" value="#[new java.util.ArrayList()]" doc:name="creditsArrayList"/>
<foreach collection="#[json:credit]" doc:name="For Each" >
<logger message="#[json:ID]" level="INFO" doc:name="Logger"/>
<http:request config-ref="HTTP_Request_Configuration" path="/server/CreditPost/views/CreditPost?ID={ID}&CompletionDt={CompletionDt}&CourseNbr={CourseNbr}" method="GET" doc:name="HTTP">
<http:request-builder>
<http:uri-param paramName="ID" value="#[json:ID]"/>
<http:uri-param paramName="CompletionDt" value="#[json:CompletionDt]"/>
<http:uri-param paramName="CourseNbr" value="#[json:CourseNbr]"/>
</http:request-builder>
</http:request>
</foreach>
</flow>
Please advise.
First you dont need transform data to xml and then to json and then to java.
Use something like
%dw 1.0
%output application/java
---
(payload map ((payload01 , indexOfPayload01) -> {
ID: payload01.ID,
CourseNbr: payload01.CourseNbr,
CompletionDt: payload01.CompletionDt as :string
}))
It will produce arraylist pass it to request builder. Another issue is regarding uri-params. You are using uri-pamars instead use query params and access fields like #[payload.ID], #[payload.CourseNbr], #[payload.CompletionDt]
while setting query params.
<dw:transform-message doc:name="Transform Message" metadata:id="55f04db1-ed48-4e1f-b966-562768a3c173">
<dw:input-payload doc:sample="list_csv.csv">
<dw:reader-property name="header" value="false"/>
</dw:input-payload>
<dw:set-payload><![CDATA[%dw 1.0
%output application/java
---
(payload map ((payload01 , indexOfPayload01) -> {
ID: payload01.ID,
CourseNbr: payload01.CourseNbr,
CompletionDt: payload01.CompletionDt as :string
}))
]]></dw:set-payload>
</dw:transform-message>
<foreach doc:name="For Each">
<http:request config-ref="HTTP_Request_Configuration" path="/server/CreditPost/views/CreditPost" method="GET" doc:name="HTTP">
<http:request-builder>
<http:query-param paramName="ID" value="#[payload.ID]"/>
<http:query-param paramName="CourseNbr" value="#[payload.CourseNbr]"/>
<http:query-param paramName="CompletionDt" value="#[payload.CompletionDt]"/>
</http:request-builder>
</http:request>
</foreach>
Hope this helps.
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.