Mule Runtime 4.2.1 Anypoint 7.3.4: Cannot copy message with a stream payload - anypoint-studio

Facing below runtime error after upgrading from Mule Runtime 4.2.0 to 4.2.1.
Below detailed my codebase, and quick error message, and detailed error logs for review. Please suggest, if anyone faced the same problem?
I referred to other similar question and answer in StackOverflow Mule ESB : Cannot copy message with a stream payload, this doesn't solve mine below error.
Runitime Error on Mule 4.2.1:
Cannot copy message with a stream payload. Payload can be transformed by using an <object-to-byte-array-transformer> in order to be able to copy the message. Payload type is "org.mule.runtime.core.internal.streaming.bytes.ManagedCursorStreamProvider"
Detailed Error Log
INFO 2019-08-05 11:29:15,388 [[MuleRuntime].cpuLight.11: [jda-demand-adapter].Get_BY_Status_n_Update_Part_Flow.CPU_LITE #7ed56bee] [event: 20e0d4f1-b746-11e9-afb2-0a0027000005] org.mule.runtime.core.internal.processor.LoggerMessageProcessor: BY status: <?xml version='1.0' encoding='UTF-8'?>
<DeliveryStatus>
<DeliveryID>46658</DeliveryID>
<Username>user_di_test</Username>
<StartDelivery>2019-08-05T05:24:34.886502+00:00</StartDelivery>
<LastProcessed>2019-08-05T05:46:16.508861+00:00</LastProcessed>
<Status>LOADED</Status>
<ParameterInfo>
<Category>Events</Category>
<Version>1.14.17</Version>
<File>Events.gz</File>
</ParameterInfo>
<Statistics>
<DeliveredRecords>323</DeliveredRecords>
<PendingRecords>323</PendingRecords>
<ProcessedRecords>0</ProcessedRecords>
<ErroneousRecords>0</ErroneousRecords>
</Statistics>
</DeliveryStatus>
INFO 2019-08-05 11:29:15,397 [[MuleRuntime].cpuIntensive.09: [jda-demand-adapter].Get_BY_Status_n_Update_Part_Flow.CPU_INTENSIVE #6b417a92] [event: 20e0d4f1-b746-11e9-afb2-0a0027000005] org.mule.runtime.core.internal.processor.LoggerMessageProcessor: payload : {
"DeliveryStatus": {
"DeliveryID": "46658",
"Username": "user_di_test",
"StartDelivery": "2019-08-05T05:24:34.886502+00:00",
"LastProcessed": "2019-08-05T05:46:16.508861+00:00",
"Status": "LOADED",
"ParameterInfo": {
"Category": "Events",
"Version": "1.14.17",
"File": "Events.gz"
},
"Statistics": {
"DeliveredRecords": "323",
"PendingRecords": "323",
"ProcessedRecords": "0",
"ErroneousRecords": "0"
}
}
}
INFO 2019-08-05 11:29:15,410 [[MuleRuntime].cpuIntensive.09: [jda-demand-adapter].Get_BY_Status_n_Update_Part_Flow.CPU_INTENSIVE #6b417a92] [event: 20e0d4f1-b746-11e9-afb2-0a0027000005] org.mule.runtime.core.internal.processor.LoggerMessageProcessor: Delivery Status summary: "46658","LOADED", {
"DeliveredRecords": "323",
"PendingRecords": "323",
"ProcessedRecords": "0",
"ErroneousRecords": "0"
}
INFO 2019-08-05 11:29:17,030 [[MuleRuntime].io.110: [jda-demand-adapter].Update_Part_Status_Recordcount_Flow.BLOCKING #502d3ddf] [event: 20e0d4f1-b746-11e9-afb2-0a0027000005] org.mule.runtime.core.internal.processor.LoggerMessageProcessor: Final response for Job without Errors, jobDetails: null
INFO 2019-08-05 11:29:17,032 [[MuleRuntime].io.110: [jda-demand-adapter].Update_Part_Status_Recordcount_Flow.BLOCKING #502d3ddf] [event: 20e0d4f1-b746-11e9-afb2-0a0027000005] org.mule.runtime.core.internal.processor.LoggerMessageProcessor: Inside Aggregation complete - For loop payload:[org.mule.runtime.api.metadata.TypedValue#fc4ba33d]
INFO 2019-08-05 11:29:17,052 [[MuleRuntime].io.110: [jda-demand-adapter].Update_Part_Status_Recordcount_Flow.BLOCKING #502d3ddf] [event: 20e0d4f1-b746-11e9-afb2-0a0027000005] org.mule.runtime.core.internal.processor.LoggerMessageProcessor: After Reporting Transformation: {
"Summary": {
"DataPostingStatus": "",
"DataPostingDetailedStatus": "",
"JobCreatedDate": "",
"JobRestartDate": "",
"JobLastModifiedTime": "",
"JobExecutionDuration": "",
"JobExecutionDuration_in_Secs": "",
"RecordsProcessed": "",
"DeliveredRecords": "323",
"PendingRecords": "323",
"ProcessedRecords": "0",
"ErrorRecords": "0",
"Categories": [
"Events"
]
},
"CategorySummary": [
{
"Category": "Events",
"DeliveredRecords": "323",
"PendingRecords": "323",
"ProcessedRecords": "0",
"ErrorRecords": "0",
"DeliveryId": [
"46658"
]
}
],
"Errors": {
},
"Details": [
{
"DeliveryStatus": {
"DeliveryID": "46658",
"Username": "user_di_test",
"StartDelivery": "2019-08-05T05:24:34.886502+00:00",
"LastProcessed": "2019-08-05T05:46:16.508861+00:00",
"Status": "LOADED",
"ParameterInfo": {
"Category": "Events",
"Version": "1.14.17",
"File": "Events.gz"
},
"Statistics": {
"DeliveredRecords": "323",
"PendingRecords": "323",
"ProcessedRecords": "0",
"ErroneousRecords": "0"
}
}
}
]
}
ERROR 2019-08-05 11:29:17,076 [[MuleRuntime].cpuLight.11: [jda-demand-adapter].Ingestion_Status_Main_Flow.CPU_LITE #7132a277] [event: 20e0d4f1-b746-11e9-afb2-0a0027000005] org.mule.runtime.core.internal.exception.OnErrorContinueHandler:
********************************************************************************
Message : Cannot copy message with a stream payload. Payload can be transformed by using an <object-to-byte-array-transformer> in order to be able to copy the message. Payload type is "org.mule.runtime.core.internal.streaming.bytes.ManagedCursorStreamProvider".
Element : Get_Job_Status_Details_Flow/processors/1 # jda-demand-adapter:com/jda/cd/common/flow/ingestion-status.xml:257 (Scatter-Gather)
Element XML : <scatter-gather doc:name="Scatter-Gather">
<route>
<logger level="INFO" doc:name="Logger" message="Calculating the Job Satus ..."></logger>
<flow-ref name="GetDetailedJobStatus_SubFlow" doc:name="GetDetailedJobStatus_SubFlow"></flow-ref>
<set-payload value="#[{
"detailedStatus": vars.detailedStatus
}]" mimeType="application/java" doc:name="Set Payload" doc:id="5ea3c7bf-b1b1-4231-9af3-c8e39f241866"></set-payload>
</route>
<route>
<flow-ref name="Get_Job_Details_Flow_Enricher_0" doc:name="Get_Job_Details_Flow_Enricher_0"></flow-ref>
<set-payload value="#[{
"jobStatus": vars.jobStatus
}]" mimeType="application/java" doc:name="Set Payload" doc:id="e0a78803-a93c-4523-9551-4cf9218f059b"></set-payload>
<logger level="INFO" doc:name="Logger Job Details" doc:id="8b31e869-5630-4e01-902d-3e259ba2734e" message="Scatter-Gather Get_Job_Details_Flow_Enricher_0 payload:#[payload], jobStatus:#[vars.jobStatus]"></logger>
<choice doc:name="CalcJobStatus_IfNeeded-Choice">
<when expression="#[vars.jobStatus == 'IN_PROGRESS']">
<async doc:name="Async">
<flow-ref name="CalcBatchStatus_Flow" doc:name="CalcBatchStatus_Flow"></flow-ref>
</async>
</when>
<otherwise>
<logger message="job status is final" level="INFO" doc:name="Logger"></logger>
</otherwise>
</choice>
</route>
<route>
<flow-ref name="Get_Records_By_Status_SubFlow_Enricher_1" doc:name="Get_Records_By_Status_SubFlow_Enricher_1"></flow-ref>
<set-payload value="#[{
"recordsByStatus": vars.recordsByStatus
}]" mimeType="application/java" doc:name="Set Payload"></set-payload>
</route>
<route>
<logger message="#["jobExecution Duration : "]" level="INFO" doc:name="Logger"></logger>
<flow-ref name="Get_Job_Status_Details_Flow_Enricher_2" doc:name="Get_Job_Status_Details_Flow_Enricher_2"></flow-ref>
<logger message="payload last_mod_date #[vars] #[vars.lastModDate]" level="INFO" doc:name="Logger"></logger>
<flow-ref name="Get_Job_Status_Details_Flow_Enricher_6" target="jobCreatedDate" targetValue="#[payload[0].CREATED_DATE]" doc:name="Get_Job_Status_Details_Flow_Enricher_6"></flow-ref>
<set-variable value="#[now()]" doc:name="Current time" doc:id="547a11d2-b9dc-479e-a0c4-36e5b367bcee" variableName="currentTime"></set-variable>
<set-variable value="#[%dw 2.0 import * from dw::util::Timer output application/java --- ((toMilliseconds(vars.lastModDate) - toMilliseconds(vars.jobCreatedDate))/1000) as Number as String {format: ".##"}]" doc:name="Set Variable jobExecutionDurationSeconds" doc:id="499b7eda-f565-4a7c-94bd-9aeaf7306941" variableName="jobExecutionDurationSeconds"></set-variable>
<set-variable value="#[%dw 2.0 import * from dw::util::Timer output application/java --- ((toMilliseconds(vars.currentTime) - toMilliseconds(vars.lastModDate))/1000) as Number as String {format: ".##"}]" doc:name="TimeSinceLastMod" doc:id="0f30996f-1c89-4d45-90e9-915f3d2440bb" variableName="timeSinceLastMod"></set-variable>
<set-variable value="#[%dw 2.0 output application/json --- (((vars.jobExecutionDurationSeconds / 3600) as Number) as String {format: ".##"}) ++ ":" ++ ((((vars.jobExecutionDurationSeconds mod 3600) as Number) / 60 as Number) as String)as String {format: ".##"} ++ ":" ++((((vars.jobExecutionDurationSeconds mod 60) as Number))as String) as String {format: ".##"}]" doc:name="Set Variable jobExecutionDuration" doc:id="eaa22fce-6085-4290-8a31-46fc0bdd90c0" variableName="jobExecutionDuration"></set-variable>
<set-variable value="#[%dw 2.0 output application/json --- (((vars.timeSinceLastMod / 3600) as Number) as String) as String {format: ".##"} ++ ":" ++ ((((vars.timeSinceLastMod mod 3600) as Number) / 60 as Number) as String) as String {format: ".##"} ++ ":" ++((((vars.timeSinceLastMod mod 60) as Number))as String) as String {format: ".##"}]" doc:name="Set Variable TimeSinceLastModString" doc:id="15942ccf-d219-40f1-a783-3e4466bdfbbf" variableName="timeSinceLastModString"></set-variable>
<logger message="job_create date #[vars]" level="INFO" doc:name="Logger"></logger>
<set-payload value="#[%dw 2.0 output application/json --- {"jobExecutionDuration": vars.jobExecutionDuration, "jobExecutionDurationSeconds": vars.jobExecutionDurationSeconds, "jobCreatedDate":vars.jobCreatedDate,"lastModDate": vars.lastModDate,"currentTime": vars.currentTime,"timeSinceLastMod": vars.timeSinceLastMod}]" doc:name="Set Payload" doc:id="a97e5020-9d64-411e-87bf-ab325f29cd7f" mimeType="application/json"></set-payload>
</route>
</scatter-gather>
Error type : MULE:UNKNOWN
--------------------------------------------------------------------------------
Root Exception stack trace:
org.mule.runtime.api.exception.MuleRuntimeException: Cannot copy message with a stream payload. Payload can be transformed by using an <object-to-byte-array-transformer> in order to be able to copy the message. Payload type is "org.mule.runtime.core.internal.streaming.bytes.ManagedCursorStreamProvider"
********************************************************************************
Below Codebase works fine in Mule 4.2.0, after upgrading Mule runtime to 4.2.1 and trying to use Anypoint 7.3.4, getting above runtime error. I am not getting the clue to fix it.
Below same code works on Mule 4.2.0:
<flow name="Ingestion_Status_Main_Flow" doc:description="Ingestion_Status_Main_Flow will read BY_delivery_IDs and try to read the status of the delivery from BY. If BY service is not available, then it provides the status of the status tables. In addition to the BY response details, it shows the job's current status, Number of records as per the status. ">
<http:listener path="${secure::ingestion.status.resource}/{jobId}" allowedMethods="GET" doc:name="/status" config-ref="HTTP_Listener_Config">
<http:response statusCode="#[migration::HttpListener::httpListenerResponseSuccessStatusCode(vars)]"/>
<http:error-response statusCode="#[vars.statusCode default migration::HttpListener::httpListenerResponseErrorStatusCode(vars)]"/>
</http:listener>
<logger message='#[attributes.uriParams.jobId]' level="INFO" doc:name="Job ID from input" />
<set-variable variableName="jobId" value="#[attributes.uriParams.jobId]" doc:name="jobId" />
<set-variable value="#[attributes.queryParams.notify]" doc:name="notifyFlag" doc:id="c2c8a869-4941-4f72-9cd3-3c9ea7441e65" variableName="notify"/>
<flow-ref name="Validate_Input_JobID_Sub_Flow" doc:name="Validate_Input_JobID_Sub_Flow" />
<set-variable variableName="correlationId" value="#[vars.jobId]" doc:name="Session Variable"/>
<flow-ref name="Fetch_Parts_for_Job_SubFlow" doc:name="Fetch_Parts_for_Job_SubFlow" />
<set-variable value="#[sizeOf(payload)]" doc:name="sizeOfPayload" doc:id="0ab10eae-0b50-4b37-bd89-0ac614f548db" variableName="sizeOfPayload" />
<logger message='Delivery ID for Job: #[payload.BY_DELIVERY_ID]' level="INFO" doc:name="Deliver IDs" />
<choice doc:name="Choice">
<when expression="#[sizeOf(payload) > 0]">
<foreach doc:name="For Each" doc:id="742d1496-9be5-409a-a42c-e0da8a1a696d" >
<logger level="INFO" doc:name="Logger For Each" doc:id="e9aeff5c-e00c-4fd4-ada3-09b22f4161cd" message="inside for each #[payload] "/>
<flow-ref doc:name="Get_BY_Status_n_Update_Part_Flow" doc:id="6e00a6b0-8d83-4df6-b22a-ce6666fed36a" name="Get_BY_Status_n_Update_Part_Flow"/>
<aggregators:group-based-aggregator doc:name="groupByDeliveryId" doc:id="b4b76fac-3f35-4812-9c1d-81b23ddd1eb9" name="groupByDeliveryId" groupSize="#[vars.sizeOfPayload]" >
<aggregators:incremental-aggregation >
<logger level="INFO" doc:name="Logger" doc:id="f3e2bdd1-d660-4074-92b0-4c04ea421706" message="Incremental size #[sizeOf(payload)]" />
</aggregators:incremental-aggregation>
<aggregators:aggregation-complete >
<logger message="Final response for Job without Errors, jobDetails: #[vars.detailedStatus]" level="INFO" doc:name="Response without Errors included" />
<logger level="INFO" doc:name="Logger" doc:id="eb7c7626-7091-481a-939c-926f938d84ae" message="Inside Aggregation complete - For loop payload:#[payload]" />
<ee:transform doc:name="Reporting Transformation" doc:id="421fb819-c58f-4f46-8d6d-e5dfa43df133">
<ee:message>
<ee:set-payload resource="ingestion\ingestion-status-resp.dwl" />
</ee:message>
</ee:transform>
<logger level="INFO" doc:name="Logger" doc:id="f6acf89c-5b84-4cbc-9cab-bf4b9e48da4f" message="After Reporting Transformation: #[payload]"/>
<set-variable variableName="aggregatedPayload" value="#[payload]" doc:name="Set Variable" doc:id="eded53f3-18ac-4a84-8fcf-916e89d7a185"/>
</aggregators:aggregation-complete>
</aggregators:group-based-aggregator>
</foreach>
</when>
<otherwise>
<logger message="No Delivery IDs found." level="INFO" doc:name="Logger" />
<set-payload value="#[{
"Summary": {
"DataPostingStatus": '',
"DataPostingDetailedStatus": '',
"JobCreatedDate": '',
"JobRestartDate": '',
"JobLastModifiedTime": '',
"JobExecutionDuration": '',
"JobExecutionDuration_in_Secs": '',
"RecordsProcessed": ''
}
}]" mimeType="application/json" doc:name="Set Payload" doc:id="066c7871-dd4b-4bde-8663-e0558a5847df"/>
</otherwise>
</choice>
<set-payload value="#[vars.aggregatedPayload]" doc:name="Set Payload" doc:id="337a0771-458c-4511-920c-ca38fcb8c6d9" />
<logger message='getting db details #[payload]' level="INFO" doc:name="Logger"/>
<flow-ref name="Ingestion_Status_Main_Flow_Enricher_22" doc:name="Ingestion_Status_Main_Flow_Enricher_22"/>
<set-payload value="#[vars.aggregatedPayload]" doc:name="Set Payload" doc:id="7ef033ba-17d6-4597-9b4c-96fb73212e63" />
<ee:transform doc:name="Transform Message" doc:id="794cfad2-e368-4b44-9c7e-746e0e692338" >
<ee:message >
<ee:set-payload ><![CDATA[%dw 2.0
output application/json
---
{
Summary: {
DataPostingStatus: vars.jobStatus,
DataPostingDetailedStatus: vars.detailedStatus,
JobCreatedDate: vars.jobCreatedDate,
JobRestartDate: "",
JobLastModifiedTime: vars.lastModDate,
JobExecutionDuration: vars.jobExecutionDuration,
JobExecutionDuration_in_Secs: vars.jobExecutionDurationSeconds,
RecordsProcessed: "",
DeliveredRecords: payload.Summary.DeliveredRecords,
PendingRecords: payload.Summary.PendingRecords,
ProcessedRecords: payload.Summary.ProcessedRecords,
ErrorRecords: payload.Summary.ErrorRecords,
Categories: payload.Summary.Categories,
},
Errors:{},
CategorySummary: payload.CategorySummary,
Details: payload.Details
}]]></ee:set-payload>
</ee:message>
</ee:transform>
<logger message='Getting errors details...' level="INFO" doc:name="Logger"/>
<flow-ref name="Add_Errors_to_Payload_Sub_Flow_Enricher_0" doc:name="Add_Errors_to_Payload_Sub_Flow_Enricher_0"/>
<ee:transform doc:name="Transform Message" doc:id="5b0518ac-139a-42f8-ae12-a42cce2449c1" >
<ee:message >
<ee:set-payload ><![CDATA[%dw 2.0
output application/json
---
payload
]]></ee:set-payload>
</ee:message>
</ee:transform>
<async doc:name="Async">
<choice doc:name="Choice">
<when expression="#[vars.notify == 'true']">
<flow-ref name="Send_Status_Mail_Flow" doc:name="Send_Status_Mail_Flow" />
</when>
<otherwise>
<logger message="Notification flag is not provided as query parameter." level="INFO" doc:name="Logger" />
</otherwise>
</choice>
</async>
<logger message='Final response: #[payload] jobId: #[vars.jobId]' level="DEBUG" doc:name="Response with Errors" />
<logger message="Ingestion status request done" level="INFO" doc:name="Status request completed" />
<error-handler ref="Global_Errorflow_Choice_Exception_Strategy" doc:name="Global Exception Strategy" />
</flow>
<sub-flow name="Ingestion_Status_Main_Flow_Enricher_22">
<flow-ref name="Get_Job_Status_Details_Flow" doc:description="Job status retrieved from status tables."/>
</sub-flow>
</flow>
<sub-flow name="Get_Job_Status_Details_Flow" doc:description="Job status retrieved from status tables.
For now, different stages of the job processing has been reported.
1. Batches not yet created.
2. Batches created, and parts are getting creating.
3. Parts are created, and processing.
4. Some part uploads are failed.
5. Some parts processing is failed i.e. payload is not created. ">
<scatter-gather doc:name="Scatter-Gather">
<route>
<logger level="INFO" doc:name="Logger" message="Calculating the Job Satus ..." />
<flow-ref name="GetDetailedJobStatus_SubFlow" doc:name="GetDetailedJobStatus_SubFlow" />
<set-payload value="#[{
"detailedStatus": vars.detailedStatus
}]" mimeType="application/java" doc:name="Set Payload" doc:id="5ea3c7bf-b1b1-4231-9af3-c8e39f241866"/>
</route>
<route>
<flow-ref name="Get_Job_Details_Flow_Enricher_0" doc:name="Get_Job_Details_Flow_Enricher_0"/>
<set-payload value="#[{
"jobStatus": vars.jobStatus
}]" mimeType="application/java" doc:name="Set Payload" doc:id="e0a78803-a93c-4523-9551-4cf9218f059b"/>
<logger level="INFO" doc:name="Logger Job Details" doc:id="8b31e869-5630-4e01-902d-3e259ba2734e" message="Scatter-Gather Get_Job_Details_Flow_Enricher_0 payload:#[payload], jobStatus:#[vars.jobStatus]"/>
<choice doc:name="CalcJobStatus_IfNeeded-Choice">
<when expression="#[vars.jobStatus == 'IN_PROGRESS']">
<async doc:name="Async">
<flow-ref name="CalcBatchStatus_Flow" doc:name="CalcBatchStatus_Flow" />
</async>
</when>
<otherwise>
<logger message="job status is final" level="INFO" doc:name="Logger" />
</otherwise>
</choice>
</route>
<route>
<flow-ref name="Get_Records_By_Status_SubFlow_Enricher_1" doc:name="Get_Records_By_Status_SubFlow_Enricher_1"/>
<set-payload value="#[{
"recordsByStatus": vars.recordsByStatus
}]" mimeType="application/java" doc:name="Set Payload" />
</route>
<route>
<logger message='#["jobExecution Duration : "]' level="INFO" doc:name="Logger" />
<flow-ref name="Get_Job_Status_Details_Flow_Enricher_2" doc:name="Get_Job_Status_Details_Flow_Enricher_2"/>
<logger message='payload last_mod_date #[vars] #[vars.lastModDate]' level="INFO" doc:name="Logger" />
<flow-ref name="Get_Job_Status_Details_Flow_Enricher_6" target="jobCreatedDate" targetValue="#[payload[0].CREATED_DATE]" doc:name="Get_Job_Status_Details_Flow_Enricher_6"/>
<set-variable value="#[now()]" doc:name="Current time" doc:id="547a11d2-b9dc-479e-a0c4-36e5b367bcee" variableName="currentTime"/>
<set-variable value='#[%dw 2.0
import * from dw::util::Timer
output application/java
---
((toMilliseconds(vars.lastModDate) - toMilliseconds(vars.jobCreatedDate))/1000) as Number as String {format: ".##"}]' doc:name="Set Variable jobExecutionDurationSeconds" doc:id="499b7eda-f565-4a7c-94bd-9aeaf7306941" variableName="jobExecutionDurationSeconds"/>
<set-variable value='#[%dw 2.0
import * from dw::util::Timer
output application/java
---
((toMilliseconds(vars.currentTime) - toMilliseconds(vars.lastModDate))/1000) as Number as String {format: ".##"}]' doc:name="TimeSinceLastMod" doc:id="0f30996f-1c89-4d45-90e9-915f3d2440bb" variableName="timeSinceLastMod"/>
<set-variable value='#[%dw 2.0
output application/json
---
(((vars.jobExecutionDurationSeconds / 3600) as Number) as String {format: ".##"}) ++ ":" ++ ((((vars.jobExecutionDurationSeconds mod 3600) as Number) / 60 as Number) as String)as String {format: ".##"} ++ ":" ++((((vars.jobExecutionDurationSeconds mod 60) as Number))as String) as String {format: ".##"}]' doc:name="Set Variable jobExecutionDuration" doc:id="eaa22fce-6085-4290-8a31-46fc0bdd90c0" variableName="jobExecutionDuration"/>
<set-variable value='#[%dw 2.0
output application/json
---
(((vars.timeSinceLastMod / 3600) as Number) as String) as String {format: ".##"} ++ ":" ++ ((((vars.timeSinceLastMod mod 3600) as Number) / 60 as Number) as String) as String {format: ".##"} ++ ":" ++((((vars.timeSinceLastMod mod 60) as Number))as String) as String {format: ".##"}]' doc:name="Set Variable TimeSinceLastModString" doc:id="15942ccf-d219-40f1-a783-3e4466bdfbbf" variableName="timeSinceLastModString"/>
<logger message='job_create date #[vars]' level="INFO" doc:name="Logger" />
<set-payload value='#[%dw 2.0 output application/json --- {"jobExecutionDuration": vars.jobExecutionDuration, "jobExecutionDurationSeconds": vars.jobExecutionDurationSeconds, "jobCreatedDate":vars.jobCreatedDate,"lastModDate": vars.lastModDate,"currentTime": vars.currentTime,"timeSinceLastMod": vars.timeSinceLastMod}]' doc:name="Set Payload" doc:id="a97e5020-9d64-411e-87bf-ab325f29cd7f" mimeType="application/json"/>
</route>
</scatter-gather>
<logger message="Flowvars used to invoke the restart-flows: payload: #[payload]" level="INFO" doc:name="RestartFlags - Logger" />
</sub-flow>

Related

Create Batch-Mulesoft-Salesforce connector

I am trying to add batches to a job using SFDC Create Batch connector.As per the documentation,it expects jobInfo object(com. sforce. async. JobInfo).Below is the payload that i am sending.Even though i typecast the object to JobInfo object,it still complains
Message : "Unable to convert Array to class 'org.mule.extension.salesforce.api.bulk.JobInfo'
I am not sure what i am missing
%dw 2.0
output application/java
var arr = []
---
({
id: "75023000002VC0rAAG"
} as Object {
class : "com.sforce.async.JobInfo"
})>> arr
Please find the sample code you can use.
<flow name="AccountAddressFlowFlow" doc:id="d164048e-ab84-42d2-b1bf-cbcdc6c8802a" >
<http:listener doc:name="Listener" doc:id="73736cd1-cc6f-425d-8a9e-b2dacb4fd1e4" config-ref="HTTP_Listener_config" path="/accountaddress"/>
<file:read doc:name="Read" doc:id="9bc9edf9-07af-4061-8d6c-c85eb254d113" path="./AccountAddress/testl2Address.csv" outputMimeType='application/csv; quote="\""; separator=|'>
<ee:repeatable-file-store-stream bufferUnit="MB" />
</file:read>
<salesforce:create-job operation="upsert" type="Account_Address__c" doc:name="Create job" doc:id="6eaef36f-719a-45c6-a4f1-e3897c85dc97" config-ref="Salesforce_Config" target="JobInfo">
<salesforce:create-job-request ><![CDATA[#[%dw 2.0
output application/java
---
{
externalIdFieldName: "ADDR_Key__c",
contentType: "JSON",
concurrencyMode: "Parallel"
}]]]></salesforce:create-job-request>
</salesforce:create-job>
<ee:transform doc:name="Transform Message" doc:id="3d6b1820-95bb-4f11-b777-6db7a79319e2" >
<ee:message >
<ee:set-payload ><![CDATA[%dw 2.0
output application/json
---
payload]]></ee:set-payload>
</ee:message>
</ee:transform>
<batch:job jobName="AccountAddressFlowBatch_Job" doc:id="259c9a9a-72d2-4b46-85cd-6c700fe2e9f5" maxFailedRecords="-1" blockSize="10000" maxConcurrency="16">
<batch:process-records >
<batch:step name="Batch_Step" doc:id="d5599f4a-0200-410f-95a3-9a38a08173f8" >
<ee:transform doc:name="Transform Message" doc:id="245af51b-1ae7-4958-b644-f45baf7c63dd" >
<ee:message >
<ee:set-payload ><![CDATA[%dw 2.0
output application/json
---
{
Name:payload.Location_Name80,
Location_ID__c:payload.Location_ID,
Fiber_Status__c:payload.fiber_status,
Account__r:{
Sub_Account_ID__c:payload.Sub_Account_ID
},
Address_Type__c:payload.Address_Type,
Postal_Code__c:payload.Postal_Code,
FirstNet_Type__c:payload.FirstNet_Type
}]]></ee:set-payload>
</ee:message>
</ee:transform>
<batch:aggregator doc:name="Batch Aggregator" doc:id="33855357-eb2d-4dd3-ade2-ce043530665e" size="10000">
<salesforce:create-batch doc:name="Create batch" doc:id="83d9ab61-50dd-469b-bbf8-d2f53f36b3bc" config-ref="Salesforce_Config" jobInfoBatch="#[%dw 2.0
output application/java
---
vars.JobInfo]"/>
</batch:aggregator>
</batch:step>
</batch:process-records>
<batch:on-complete >
<logger level="INFO" doc:name="Logger" doc:id="b1c1fc2d-a3f4-4bf1-8ceb-5f249df58c60" />
</batch:on-complete>
</batch:job>
<logger level="INFO" doc:name="Logger" doc:id="e2bd3d39-2fc9-46f6-a686-55531f77a2d6" message="Account Address Completed"/>
</flow>
</mule>

"Redirecting into HTML page"

I have a flow where I am trying to load a HTML page if successfully login or fails. Flow is working but while doing POST job on browser side it's not redirecting to the loginSuccessful.html or login/loginFailure.html.
<flow name="GetLoginPage">
<http:listener config-ref="HTTP_Listener_Configuration" path="/login" allowedMethods="GET" doc:name="HTTP"/>
<parse-template location="login/index.html" doc:name="Parse Template"/>
</flow>
<flow name="Dologin">
<http:listener config-ref="HTTP_Listener_Configuration" path="/login" allowedMethods="POST" doc:name="HTTP"/>
<logger message="trying to login!!!!!!!!!!!" level="INFO" doc:name="Logger"/>
<choice doc:name="Choice">
<when expression="#[payload.username == "mule" and payload.password == "mule"]">
<logger message="login successfully!!!!!!!!!!!" level="INFO" doc:name="Logger"/>
<parse-template location="login/loginSuccessful.html" doc:name="Parse Template"/>
</when>
<otherwise>
<logger message="login failed!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!" level="INFO" doc:name="Logger"/>
<parse-template location="login/loginFailure.html" doc:name="Parse Template"/>
</otherwise>
</choice>
</flow>
I took the liberty of creating my own payload in JSON and added the payload values from above:
{
"name": "mule",
"password": "mule"
}
Then, added a data transformer from JSON to Java, then I mildly adjusted your conditional test to eliminate the encoded quotes and replaced them with single quotes:
payload.username == 'mule' and payload.password == 'mule'
And the choice router correctly to pick up my test files with the parse template.

Mule flow is not triggering

I am using Groovy inside Poll to check file existence at given location.
My flow is working fine, when there is a file. But If I delete that file, flow is not triggering.Below is my code
<flow name="monitor-dst-file-flow">
<poll doc:name="Poll">
<schedulers:cron-scheduler expression="0 0 23 ? * TUE-SAT"/>
<scripting:transformer doc:name="Groovy">
<scripting:script engine="Groovy"><![CDATA[def endpointBuilder = muleContext.endpointFactory.getEndpointBuilder(
"sftp://${user}:${pwForGroovy}#${host}:${port}${inputpath}/?connector=SFTP")
endpointBuilder.addMessageProcessor(new org.mule.routing.MessageFilter(new org.mule.transport.file.filters.FilenameWildcardFilter('test.txt')))
def inboundEndpoint = endpointBuilder.buildInboundEndpoint()
inboundEndpoint.request(30000L)]]>
</scripting:transformer>
</poll>
<choice doc:name="Choice">
<when expression="#[message.inboundProperties.originalFilename =="test.txt"]">
<logger level="INFO" doc:name="Logger" message="File Exists..."/>
</when>
<otherwise>
<logger message="FILE EXISTS" level="ERROR" doc:name="Logger"/>
<flow-ref name="email-notification-sub-flow" doc:name="Flow Reference"/>
</otherwise>
</choice>
</flow>
Here, if there is no test.txt file, I am not able to debug Choice component.
It says -Polling of monitor-dst-file-flow returned null, the flow will not be invoked.
I am not able to identify the exact solution to run my flow. I have to handle that condition, where given file is not there.
You need to return something besides null from the poller's target for the flow to be invoked. I'd recommend doing this in a sub-flow:
<flow name="monitor-dst-file-flow">
<poll doc:name="Poll">
<schedulers:cron-scheduler expression="0 0 23 ? * TUE-SAT"/>
<flow-ref name="pollerProcessor" doc:name="pollerProcessor"/>
</poll>
<choice doc:name="Choice">
<when expression="#[payload == 'file not found']">
<logger level="INFO" doc:name="Logger" message="File Exists..."/>
</when>
<otherwise>
<logger message="FILE EXISTS" level="ERROR" doc:name="Logger"/>
<flow-ref name="email-notification-sub-flow" doc:name="Flow Reference"/>
</otherwise>
</choice>
</flow>
<sub-flow name="pollerProcessor">
<scripting:transformer doc:name="Groovy">
<scripting:script engine="Groovy"><![CDATA[def endpointBuilder = muleContext.endpointFactory.getEndpointBuilder(
"sftp://${user}:${pwForGroovy}#${host}:${port}${inputpath}/?connector=SFTP")
endpointBuilder.addMessageProcessor(new org.mule.routing.MessageFilter(new org.mule.transport.file.filters.FilenameWildcardFilter('test.txt')))
def inboundEndpoint = endpointBuilder.buildInboundEndpoint() inboundEndpoint.request(30000L)]]>
</scripting:script>
</scripting:transformer>
<set-payload value="#[payload == null ? 'file not found' : payload]" doc:name="Set Payload"/>
</sub-flow>

Invoke Component in message Enricher and how to define the target value for Message Enricher

I am practicing on salesforce to mulesoft connection. I am trying to query the account from salesforce, do some logic using Invoke Component and update the Account name in Salesforce. Please find the XML code below. I get the following error when i invoke..
Execution of the expression "Variable:Fname=__object_for_enrichment" failed. (org.mule.api.expression.ExpressionRuntimeException).
XML:
<http:listener-config name="HTTP_Listener_Configuration" host="localhost" port="8092" doc:name="HTTP Listener Configuration"/>
<sfdc:config name="Salesforce__Basic_Authentication" username="username" password="*******" securityToken="Token" doc:name="Salesforce: Basic Authentication" url="https://login.salesforce.com/services/Soap/u/38.0">
<reconnect-forever/>
</sfdc:config>
<spring:beans>
<spring:bean id="Bean" name="UpdateAcc" class="com.pack.salesforceconnect.SFJava"/>
</spring:beans>
<flow name="salesforceconnectFlow">
<http:listener config-ref="HTTP_Listener_Configuration" path="/salesforce" doc:name="HTTP"/>
<sfdc:query-single config-ref="Salesforce__Basic_Authentication" query="dsql:SELECT Id,Name,ShippingCity FROM Account ORDER BY Name DESC" doc:name="Salesforce"/>
<dw:transform-message doc:name="Transform Message">
<dw:input-payload doc:sample="sample_data\Account.dwl"/>
<dw:set-payload><![CDATA[%dw 1.0
%output application/java
---
{
Id: payload.Id,
Name: payload.Name,
ShippingCity: payload.ShippingCity
}]]></dw:set-payload>
</dw:transform-message>
<enricher source="#[payload.Name]" target="#[Variable:Fname]" doc:name="Message Enricher">
<invoke name="Invoke" object-ref="UpdateAcc" method="ChangeSCity" methodArguments="#[payload.Name]" metadata:id="id"/>
</enricher>
<dw:transform-message doc:name="Transform Message">
<dw:set-payload><![CDATA[%dw 1.0
%output application/json
---
[{
Id: payload.Id,
Name: variable:FName,
ShippingCity: payload.ShippingCity
}]]]></dw:set-payload>
</dw:transform-message>
<set-payload value="#[payload]" doc:name="Set Payload"/>
</flow>
</mule>
Class:
package com.pack.salesforceconnect;
public class SFJava {
public String ChangeSCity(String Fname){
//String ShippingCity;
System.out.print("Account Name received : "+Fname);
if (Fname == null){
Fname = "New Account";
}else{
Fname = "Washington Industries Inc.,";
}
System.out.print("Account Name: "+Fname);
return Fname;
}
}
Syntax wrong .. it would be target="#[variable:Fname]" instead of target="#[Variable:Fname]"
Or simply you can use target="#[flowVars.Fname]"

Mule Flow Reference Component throwing TransformerMessagingException while passing json

I have two flow one receive the xml payload and another json. I am routing the xml call to json flow using mule flow reference component after converting the xml to json payload. and second flow returns the json payload that i need to convert back to xml and reply to client.
My mule flow reference is throwing TransformerMsgException while receiving the json response from second flow.
Failed to transform from "json" to "java.lang.String" (org.mule.api.transformer.TransformerException). Message payload is of type: String
Here are the code for your reference -
<flow name="post:/chkdb:application/json:chkd-config">
<logger message="========json payload==>>>>==== #[message.payload]" level="INFO" doc:name="Logger"/>
<set-variable variableName="GGG_Number" value="#[json:ggg]" doc:name="Variable"/>
<!-- db call returns the payload-->
<choice doc:name="Choice">
<when expression="#[message.payload.size()>0]">
<set-payload value="{"indicator":"True"}" mimeType="application/json" doc:name="Set Payload"/>
</when>
<otherwise>
<set-payload value="{"indicator":"False"}" mimeType="application/json" doc:name="Set Payload"/>
</otherwise>
</choice>
<logger message="=========after producing json output=======" level="INFO" doc:name="Logger"/>
</flow>
<flow name="post:/chkdb:application/xml:chkdb-config">
<logger message="========= xml payload======== #[message.payload]" level="INFO" doc:name="Logger"/>
<json:xml-to-json-transformer mimeType="application/json" doc:name="XML to JSON"/>
<flow-ref name="post:/chkdb:application/json:chkdb-config" doc:name="post:/chkdb:application/json:chkdbapi-config"/> <!-- Getting exception here -->
<logger message=" after subflow call ==== #[message.payload]" level="INFO" doc:name="Logger"/>
<json:json-to-xml-transformer mimeType="application/xml" doc:name="JSON to XML"/>
<logger message="after json to xml conversion" level="INFO" doc:name="Logger"/>
</flow>
XML Request -
<ggg>DeJmp03bkqALlRFYmgu4+A==</ggg>
How i should retrieve the json response from other flow to current flow.
There is something missing here
First flow name: post:/chkdb:application/json:chkdbapi-config
Second flow name: post:/chkdb:application/xml:chkdbapi-config
Flow ref in second flow: post:/chkdb:application/json:chkdb-config
You are not referencing First flow.
So from your flow posted I can find few issues as follows :-
1. You are using where is the flow post:/chkdb:application/json:chkdb-config doesn't exits and it should be post:/chkdb:application/json:chkdbapi-config instead
2. Right now in the flow you are using <when expression="#[message.payload.size()>0]"> where as the message payload is in String format right now.
So, you can either use <when expression="#[message.payload.length()>0]">, using length() instead of size() or put a <json:json-to-object-transformer returnClass="java.lang.Object" doc:name="JSON to Object"/>before choice if you use #[message.payload.size()>0]
So the full code will be something as follows :-
<flow name="post:/chkdb:application/json:chkdbapi-config">
<logger message="========json payload==>>>>==== #[message.payload]" level="INFO" doc:name="Logger"/>
<!-- <json:json-to-object-transformer returnClass="java.lang.Object" doc:name="JSON to Object"/> --> <!-- incase you use #[message.payload.size()>0] in your choice -->
<!-- db call returns the payload-->
<set-variable variableName="GGG_Number" value="#[json:ggg]" doc:name="Variable"/>
<choice doc:name="Choice">
<when expression="#[message.payload.length()>0]">
<set-payload value="{"indicator":"True"}" mimeType="application/json" doc:name="Set Payload"/>
</when>
<otherwise>
<set-payload value="{"indicator":"False"}" mimeType="application/json" doc:name="Set Payload"/>
</otherwise>
</choice>
<logger message="=========after producing json output=======" level="INFO" doc:name="Logger"/>
</flow>
<flow name="post:/chkdb:application/xml:chkdbapi-config">
<logger message="========= xml payload======== #[message.payload]" level="INFO" doc:name="Logger"/>
<json:xml-to-json-transformer mimeType="application/json" doc:name="XML to JSON"/>
<flow-ref name="post:/chkdb:application/json:chkdbapi-config" doc:name="post:/chkdb:application/json:chkdbapi-config"/> <!-- Getting exception here -->
<logger message=" after subflow call ==== #[message.payload]" level="INFO" doc:name="Logger"/>
<json:json-to-xml-transformer mimeType="application/xml" doc:name="JSON to XML"/>
<logger message="after json to xml conversion" level="INFO" doc:name="Logger"/>
</flow>