2016-06-07 8 views
1

Müssen die Liste der Objekte aus S3-Bucket durch MULE ESB abrufen. Aber wenn der payload.getkey bekommen(), es führt den Fehler: derzeit keine Methode beheben: org.mule.module.s3.model.ObjectListing.getKey() [arglength = 0]]Mule ruft eine Liste von Objekten aus s3-Bucket ab

<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

Check 'ge-datastaging-dev' Eimer haben Dateien im Ordner ?. Verwenden Sie die gleiche Weise wie in diesem Link erwähnt http://stackoverflow.com/questions/25956403/mule-esb-how-to-take-all-the-files-in-a-folder-inside-bucket-of-amazon -s3-get/37673489 # 37673489 im Antwortabschnitt (mit 'Objektinhalt holen' innerhalb von foreach). Es sollte funktionieren. Vor Für jeden In-Logger auf Nutzlast prüfen. – star

+0

ge-datastaging-dev ist ein Bucket-Name und innerhalb von Bucket haben wir den Mule/Inbound/Ordner darin erstellt. Alle Dateien sind in Mule/Inbound/ –

+0

verfügbar. Haben Sie "Get-Object Content" zum Abrufen des Schlüssels verwendet? – star

Antwort

0

Statt auf payload von looping, tun <foreach> auf ObjectSummaries Objekt in ObjectListing wie folgt aus:

<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>