从AWS S3存储桶转换Excel文件时,Mulesoft工作流中出现过载错误

从AWS S3存储桶转换Excel文件时,Mulesoft工作流中出现过载错误,mule,anypoint-studio,dataweave,mule-esb,Mule,Anypoint Studio,Dataweave,Mule Esb,我正在使用Mule 4和Anypoint Studio 7 我希望从AWS S3 bucket中获取对象列表,读取每个xlsx文件并转换消息,使其具有一些新的列名 当我这样做时,我会得到一个错误: Unable to call any overload of function `Value Selector` with arguments (Binary, "Sheet 1") overloads 如何解决此错误 S3存储桶中的Excel文件: <?xml version="1.0" e

我正在使用Mule 4和Anypoint Studio 7

我希望从AWS S3 bucket中获取对象列表,读取每个xlsx文件并转换消息,使其具有一些新的列名

当我这样做时,我会得到一个错误:

Unable to call any overload of function `Value Selector` with arguments (Binary, "Sheet 1") overloads
如何解决此错误

S3存储桶中的Excel文件:

<?xml version="1.0" encoding="UTF-8"?>

<mule xmlns:s3="http://www.mulesoft.org/schema/mule/s3"
    xmlns:sftp="http://www.mulesoft.org/schema/mule/sftp"
    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
http://www.mulesoft.org/schema/mule/sftp http://www.mulesoft.org/schema/mule/sftp/current/mule-sftp.xsd
http://www.mulesoft.org/schema/mule/s3 http://www.mulesoft.org/schema/mule/s3/current/mule-s3.xsd">
    <flow name="aws-flow" doc:id="21bd363a-166e-4fc2-9246-dd6f48763db7" >
        <scheduler doc:name="Scheduler" doc:id="4e3bf7a7-99ce-44e3-b732-fece4200c5b6" >
            <scheduling-strategy >
                <fixed-frequency frequency="10000000"/>
            </scheduling-strategy>
        </scheduler>
        <s3:list-objects doc:name="List objects AWS S3 bucket" doc:id="640ed7a3-2e0f-4c5d-99a1-fd503d02f055" config-ref="Amazon_S3_Configuration" bucketName="${aws.s3.bucket.name}"/>
        <foreach doc:name="For Each" doc:id="f0989986-2d2e-4cc9-b51e-d61cf9d01210" >
            <choice doc:name="Choice" doc:id="9f47cc0e-d784-4dcb-83a6-07e553997aab" >
                <when expression='#[payload.key endsWith ".xlsx"]'>
                    <s3:get-object doc:name="Get object from AWS S3" doc:id="568ed3c4-d7f8-4657-a515-835e5671b72c" config-ref="Amazon_S3_Configuration" bucketName="#[payload.bucketName]" key="#[payload.key]" />
                    <ee:transform doc:name="Transform Message" doc:id="966cf917-d50d-4858-8e26-9f381bc57de4">
                        <ee:message>
                            <ee:set-payload><![CDATA[%dw 2.0
output application/xlsx
---
{
    "Sheet 1": payload[0] map ( sheet1 , indexOfSheet1 ) -> {
        EmployeeId: sheet1.EmployeeId default "" as String,
        Name: sheet1.Name default "" as String,
    }
}]]></ee:set-payload>
                        </ee:message>
                    </ee:transform>
                    <logger level="INFO" doc:name="Log Payload" doc:id="f3738738-d56d-4930-94f8-763aea3b5dbe" message='#[payload]'/>
                </when>
                <otherwise >
                    <logger level="INFO" doc:name="Log File Invalid" doc:id="e3f5c9c2-0b75-4b1c-88dc-cb1ae1e2f249" message="Invalid file"/>
                </otherwise>
            </choice>
        </foreach>
    </flow>
</mule>

工作流:

<?xml version="1.0" encoding="UTF-8"?>

<mule xmlns:s3="http://www.mulesoft.org/schema/mule/s3"
    xmlns:sftp="http://www.mulesoft.org/schema/mule/sftp"
    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
http://www.mulesoft.org/schema/mule/sftp http://www.mulesoft.org/schema/mule/sftp/current/mule-sftp.xsd
http://www.mulesoft.org/schema/mule/s3 http://www.mulesoft.org/schema/mule/s3/current/mule-s3.xsd">
    <flow name="aws-flow" doc:id="21bd363a-166e-4fc2-9246-dd6f48763db7" >
        <scheduler doc:name="Scheduler" doc:id="4e3bf7a7-99ce-44e3-b732-fece4200c5b6" >
            <scheduling-strategy >
                <fixed-frequency frequency="10000000"/>
            </scheduling-strategy>
        </scheduler>
        <s3:list-objects doc:name="List objects AWS S3 bucket" doc:id="640ed7a3-2e0f-4c5d-99a1-fd503d02f055" config-ref="Amazon_S3_Configuration" bucketName="${aws.s3.bucket.name}"/>
        <foreach doc:name="For Each" doc:id="f0989986-2d2e-4cc9-b51e-d61cf9d01210" >
            <choice doc:name="Choice" doc:id="9f47cc0e-d784-4dcb-83a6-07e553997aab" >
                <when expression='#[payload.key endsWith ".xlsx"]'>
                    <s3:get-object doc:name="Get object from AWS S3" doc:id="568ed3c4-d7f8-4657-a515-835e5671b72c" config-ref="Amazon_S3_Configuration" bucketName="#[payload.bucketName]" key="#[payload.key]" />
                    <ee:transform doc:name="Transform Message" doc:id="966cf917-d50d-4858-8e26-9f381bc57de4">
                        <ee:message>
                            <ee:set-payload><![CDATA[%dw 2.0
output application/xlsx
---
{
    "Sheet 1": payload[0] map ( sheet1 , indexOfSheet1 ) -> {
        EmployeeId: sheet1.EmployeeId default "" as String,
        Name: sheet1.Name default "" as String,
    }
}]]></ee:set-payload>
                        </ee:message>
                    </ee:transform>
                    <logger level="INFO" doc:name="Log Payload" doc:id="f3738738-d56d-4930-94f8-763aea3b5dbe" message='#[payload]'/>
                </when>
                <otherwise >
                    <logger level="INFO" doc:name="Log File Invalid" doc:id="e3f5c9c2-0b75-4b1c-88dc-cb1ae1e2f249" message="Invalid file"/>
                </otherwise>
            </choice>
        </foreach>
    </flow>
</mule>

{
EmployeeId:sheet1.EmployeeId默认值“”为字符串,
名称:sheet1。将默认名称“”命名为字符串,
}
}]]>

问题在于S3连接器没有将mime类型设置为“application/xlsx”,因此DW没有将其解析为Excel文件,而是将其作为二进制内容

有一个简单的解决办法

之后

<s3:get-object doc:name="Get object from AWS S3" doc:id="568ed3c4-d7f8-4657-a515-835e5671b72c" config-ref="Amazon_S3_Configuration" bucketName="#[payload.bucketName]" key="#[payload.key]" />



谢谢您,您似乎处理得很正确。我仍然看到Dataweave中的错误,不确定它是否是因为在输入面板中显示为“二进制”。有没有办法改变这一点?我似乎没有“清除元数据”的选项,所以看起来我需要为电子表格定义元数据类型并写出所有字段。它们是否带走了输入负载?i、 e.这和输入有效负载应用程序/xlsx似乎没有什么区别。当我用#[(payload.key splitBy(“.”)[0]]设置变量值时,我也看到了同样的错误。这两个代码和dataweave代码都以红色突出显示,但在部署应用程序时,这两个代码似乎都起作用。希望能够删除错误。如果在MuleStudio上看到错误,则是因为需要设置元数据。