2017-06-12 2 views
0

Je suis en train de lire un fichier à partir d'une archive jar, et revenir comme java.io.InputStream.GroovyCastException lorsque vous appelez java.util.zip.ZipFile.getInputStream()

Voici la méthode où je suis en train d'y arriver:

InputStream getExportInfo(path) { 
    def zipFile = new java.util.zip.ZipFile(new File(path)) 

    zipFile.entries().each { entry -> 
    def name = entry.name 
    if (!entry.directory && name == "ExportInfo") { 
     java.io.InputStream is = zipFile.getInputStream(entry) 
     return is 
    } 
    } 
} 

Cependant, je reçois cette erreur de la console:

org.codehaus.groovy.runtime.typehandling.GroovyCastException: Impossible de lancer des objets '[email protected]' avec la classe 'java.util.zip.ZipFile $ ZipEntryIterator' classe 'java.io.InputStream'

Il semble que le .getInputStream (entrée) ne renvoie pas un 'java.io.InputStream', mais il devrait selon le documentation

D'où vient ce 'moulage'?

+0

Est-ce que l'intégralité du message d'erreur? Quelle ligne provoque l'erreur? –

+0

Et comment appelez-vous cette méthode? –

+0

@ Code-Apprentice imprime également une trace de pile qui aboutit à la ligne 'zipFile.entries(). Chaque {entry ->'. J'appelle cette méthode comme ceci: 'def = exportInfo jarHandler.getExportInfo (jarPath)' –

Répondre

3

Vous revenez de la fermeture, ce qui porte le exeption coulé lorsque l'appel de la méthode.

La solution facile serait de changer l'itération groovy à boucle for simple:

InputStream getExportInfo(path) { 
    def zipFile = new java.util.zip.ZipFile(new File(path)) 

    for(ZipEntry entry in zipFile.entries()){ 
    def name = entry.name 
    if (!entry.directory && name == "ExportInfo") { 
     return zipFile.getInputStream(entry) 
    } 
    } 
} 

il romprait la boucle et retourner votre instance fluxEntrée.