2015-04-04 45 views
0
<flow name="listobjects"> 
    <http:inbound-endpoint exchange-pattern="request-response" host="localhost" port="8081" path="listobjects" contentType="text/plain" doc:name="HTTP"/> 
    <s3:list-objects config-ref="Amazon_S3" bucketName="demo" doc:name="Amazon S3" maxKeys="5" /> 

    <!-- <payload-type-filter expectedType="java.util.List" doc:name="Payload"/> --> 
    <foreach collection="#[payload]" doc:name="For Each"> 
    <!-- <foreach doc:name="For Each file"> --> 
    <logger message=" inside foreach...... #[payload.getKey()] ...." level="INFO" doc:name="Logger" /> 
     <s3:get-object-content config-ref="Amazon_S3" bucketName="demo" key="#[payload.getKey()]" doc:name="Amazon S3"/> 
     <object-to-byte-array-transformer/> 
     <file:outbound-endpoint path="C:\output" responseTimeout="10000" doc:name="File" outputPattern="#[payload.getKey()] "></file:outbound-endpoint> 
    </foreach> 
</flow> 

我有名爲demo的存儲桶名稱。 在那個桶裏我有3個pdf文件。我想下載所有文件並將其放在c:\ output文件夾中。騾子從s3桶下載所有文件

我打我的網址像http://localhost:8081/listobjects

但我得到的錯誤:

Could not find a transformer to transform "CollectionDataType{type=org.mule.module.s3.simpleapi.SimpleAmazonS3AmazonDevKitImpl$S3ObjectSummaryIterable, itemType=com.amazonaws.services.s3.model.S3ObjectSummary, mimeType='/'}" to "SimpleDataType{type=org.mule.api.transport.OutputHandler, mimeType='/'}". (org.mule.api.transformer.TransformerException) (org.mule.api.transformer.TransformerException). Message payload is of type: SimpleAmazonS3AmazonDevKitImpl$S3ObjectSummaryIterable

回答

0

發生錯誤的原因是foreach處理器後的有效載荷是S3類的一個實例,並且您還沒有指定任何內容類型返回。所以Mule試圖將S3實例轉換爲默認的SimpleDataType並失敗。 一個解決這個問題的辦法就是像

​​

末添加的東西,使之明確。

還要注意的是運行在你的流程後:

<file:outbound-endpoint path="C:\output" responseTimeout="10000" doc:name="File" outputPattern="#[payload.getKey()] "></file:outbound-endpoint> 

我已經運行沒有問題的:

<object-to-byte-array-transformer/> 

S3的有效載荷已經一去不復返了,所以#[payload.getKey()]將在未來處理器失敗:

<flow name="listobjects"> 
    <http:inbound-endpoint exchange-pattern="request-response" host="localhost" port="8083" path="listobjects" contentType="text/plain" doc:name="HTTP"/> 
    <s3:list-objects config-ref="Amazon_S3" bucketName="mule_test" doc:name="Amazon S3" maxKeys="5" /> 
    <foreach collection="#[payload]" doc:name="For Each"> 
    <logger message=" inside foreach...... #[payload.getKey()] ...." level="INFO" doc:name="Logger" /> 
     <set-variable variableName="fileKey" value="#[payload.getKey()]" doc:name="Variable" /> 
     <s3:get-object-content config-ref="Amazon_S3" bucketName="#[payload.getBucketName()]" key="#[payload.getKey()]" doc:name="Amazon S3"/> 
     <object-to-byte-array-transformer/> 
     <file:outbound-endpoint path="/tmp" responseTimeout="10000" doc:name="File" outputPattern="#[flowVars.fileKey] "></file:outbound-endpoint> 
    </foreach> 
    <set-property propertyName="Content-Type" value="application/json" doc:name="Content-Type" /> 
    <set-payload value="{'result': 'ok'}"/> 
</flow> 
相關問題