enter image description here方案:
问题陈述:将有效负载传递给每个块后,有效负载的数据类型就会转换为TypedValues,并且当将有效负载传递给 Salesforce Upsert 组件时,会出现以下错误:
org.mule.runtime.core.internal.message.ErrorBuilder$ErrorImplementation
{
description=org.mule.runtime.api.metadata.TypedValue cannot be cast to java.util.Map
detailedDescription=org.mule.runtime.api.metadata.TypedValue cannot be cast to java.util.Map
errorType=MULE:UNKNOWN
cause=java.lang.ClassCastException
errorMessage=-
childErrors=[]
}
下面是一个mule 4示例项目,该项目将使用输入的csv文件并对其进行过滤以查找成人,然后使用a为每个范围(每5个批次)中的每个范围打印成人名称。 使用调试器,可以在每个块之前和内部检查有效载荷媒体类型。
现在在我里面使用的是Logger,因此typedValue不会造成问题,但是,如果使用Salesforce组件,则会收到如上所述的错误。由于我没有SF帐户,因此无法创建确切的方案。很抱歉给您带来不便,但这将证明每种媒体类型都在内部转换。
<?xml version="1.0" encoding="UTF-8"?>
<mule xmlns:ee="http://www.mulesoft.org/schema/mule/ee/core"
xmlns:file="http://www.mulesoft.org/schema/mule/file"
xmlns="http://www.mulesoft.org/schema/mule/core"
xmlns:doc="http://www.mulesoft.org/schema/mule/documentation"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.mulesoft.org/schema/mule/core http://www.mulesoft.org/schema/mule/core/current/mule.xsd
http://www.mulesoft.org/schema/mule/file http://www.mulesoft.org/schema/mule/file/current/mule-file.xsd
http://www.mulesoft.org/schema/mule/ee/core http://www.mulesoft.org/schema/mule/ee/core/current/mule-ee.xsd">
<file:config name="File_Config" doc:name="File Config" doc:id="780eb98e-37d0-48ae-8f6b-47b8782284c9" >
<file:connection workingDir="${app.home}" />
</file:config>
<flow name="bbazaz-json2csv-generatorFlow" doc:id="eebb7bcb-04ba-4c2a-bc7a-924d844c6aa2" >
<scheduler doc:name="Scheduler" doc:id="f05eafdb-3cf0-43e2-9797-bedb9c4bb04a" >
<scheduling-strategy >
<fixed-frequency frequency="1" timeUnit="DAYS"/>
</scheduling-strategy>
</scheduler>
<file:read doc:name="Read" doc:id="b1e9b51e-ab43-4965-ac0a-10c86c72b425" config-ref="File_Config" path="TestFile/InputData.csv" outputMimeType="application/csv; header=true" outputEncoding="UTF-8"/>
<logger level="INFO" doc:name="Log Data" doc:id="74f972dc-9025-4eb7-916f-9c8dcaef4c7e" message='#["JSON Data Received"]'/>
<ee:transform doc:name="Filter Adults and Minors" doc:id="6dfbe838-f508-4904-a651-8285b478faa7" >
<ee:message >
<ee:set-payload ><![CDATA[%dw 2.0
output application/java
---
payload reduce((item, acc = {
'adultsList': [],
'minorsList': []
}) -> (
if ( (item.PersonsAge as Number) >= 18 ) {
adultsList: (acc.adultsList default []) << {
'Name': item.PersonName
},
minorsList: acc.minorsList default []
}
else{
minorsList: (acc.minorsList default []) << {
'Name': item.PersonName
},
adultsList: acc.adultsList default []
}))]]></ee:set-payload>
</ee:message>
</ee:transform>
<foreach doc:name="For Each" doc:id="ce464082-620c-41ee-8150-45264c5cb57a" collection="#[payload.adultsList]" batchSize="5">
<logger level="INFO" doc:name="Logger" doc:id="d0953955-6c4c-4374-aed4-ee0155d8e5d5" message='#[(payload.Name joinBy(",")) ++ "is an adult"]'/>
</foreach>
</flow>
</mule>
示例CSV文件:
PersonName,PersonsAge
Jonas,36
Ulysses,36
Lane,31
Tate,30
Rogan,36
Bruno,37
Colt,25
Colby,34
Grady,24
Hyatt,39
Victor,20
Cade,16
Brady,34
Ulric,33
Xavier,40
Cameron,36