2016-06-07 80 views
1

需要通过MULE ESB从S3存储桶检索对象列表。但得到payload.getkey(),它的时候抛出错误:未能解决方法:org.mule.module.s3.model.ObjectListing.getKey()[arglength = 0]]Mule从s3桶获取对象列表

<http:listener-config name="HTTP_Listener_Configuration" host="localhost" port="9090" doc:name="HTTP Listener Configuration"/> 
<s3:config name="Amazon_S3__Configuration" accessKey="XXXXXXX" secretKey="XXXXXXXX" doc:name="Amazon S3: Configuration"/> 
<flow name="s3bucket-downloadfilesFlow"> 
    <http:listener config-ref="HTTP_Listener_Configuration" path="/getfiles" doc:name="HTTP"/> 
    <s3:list-objects config-ref="Amazon_S3__Configuration" bucketName="ge-datastaging-dev" prefix="Mule/inbound/" maxKeys="5" doc:name="Amazon S3"/> 
    <logger level="INFO" doc:name="Logger"/> 
    <foreach collection="#[payload]" doc:name="For Each"> 
     <logger level="INFO" doc:name="Logger" message=" inside foreach...... #[payload.getCommonPrefixes()] ...."/> 
     <logger level="INFO" doc:name="Logger" message=" ################...... #[payload.getNextMarker()] ...."/> 
     <logger level="INFO" doc:name="Logger" message=" ################...... #[payload.getKey()] ...."/>    
    </foreach> 
</flow> 
+0

检查“GE-datastaging-dev的”桶有文件夹内的文件?使用与此链接中提到的相同的方式http://stackoverflow.com/questions/25956403/mule-esb-how-to-take-all-the-files-in-a-folder-inside-bucket-of-amazon -s3-get/37673489#37673489在回答部分(与'获取对象内容'内部的foreach)。它应该工作。以前每次在记录器中检查有效负载。 – star

+0

ge-datastaging-dev是一个存储桶名称,并且在存储桶中我们已经在其中创建了Mule/inbound /文件夹。所有文件都可用Mule/inbound/ –

+0

您是否使用'get-object content'来检索密钥? – star

回答

0

相反,循环的​​的,做<foreach>ObjectSummaries对象ObjectListing这样的:

<s3:list-objects config-ref="Amazon_S3__Configuration" bucketName="ge-datastaging-dev" prefix="Mule/inbound/" maxKeys="5" doc:name="Amazon S3"/> 

<foreach doc:name="For Each" collection="#[payload.objectSummaries]"> 
    <s3:get-object-content config-ref="Amazon_S3__Configuration" bucketName="#[payload.getBucketName()]" key="#[payload.getKey()]" doc:name="Amazon S3"/> 

</foreach>