2009-11-19 18 views
6

Sto cercando di aggiornare il contenuto nei siti di Google e sto leggendo il flusso in Exception VersionConflictException.Perché ItemSkippedException?

Quando controllo lo stream è tutto a posto e viene caricato completamente nella richiesta POST ma poi si verifica un errore successivo.

org.apache.commons.fileupload.FileItemStream$ItemSkippedException 
at org.apache.commons.fileupload.MultipartStream$ItemInputStream.read(MultipartStream.java:880) 
at java.io.BufferedInputStream.fill(BufferedInputStream.java:218) 
at java.io.BufferedInputStream.read1(BufferedInputStream.java:258) 
at java.io.BufferedInputStream.read(BufferedInputStream.java:317) 
at com.google.gdata.data.media.MediaSource$Output.writeTo(MediaSource.java:87) 
at com.google.gdata.data.media.MediaBodyPart$MediaSourceDataHandler.writeTo(MediaBodyPart.java:74) 
at javax.mail.internet.MimeBodyPart.writeTo(MimeBodyPart.java:452) 
at javax.mail.internet.MimeMultipart.writeTo(MimeMultipart.java:157) 
at com.google.gdata.wireformats.output.media.MediaMultipartGenerator.generate(MediaMultipartGenerator.java:58) 
at com.google.gdata.wireformats.output.media.MediaMultipartGenerator.generate(MediaMultipartGenerator.java:37) 
at com.google.gdata.client.Service.writeRequestData(Service.java:1831) 
at com.google.gdata.client.media.MediaService.updateMedia(MediaService.java:497) 
at com.google.gdata.data.media.MediaEntry.updateMedia(MediaEntry.java:159) 
at morefile.UploadApp.updateAttachment(UploadApp.java:136) 
+0

hey, anche io sto cercando lo stesso. Hai trovato qualche soluzione? –

risposta

7

FileItemStream.ItemSkippedException

Questa eccezione viene generata, se si tenta è fatto per leggere i dati dal InputStream, che è stato restituito da FileItemStream.openStream(), dopo Iterator.hasNext() è stato richiamato su l'iteratore, che ha creato il file di file .

+0

Buono, ma come risolverlo l'eccezione – dhaval

+0

viene generata in mentre (it.hasNext()) e lo stream viene utilizzato in catch. In che modo tornare a hasnext una volta che è passato a catturare è un mistero? – dhaval

+0

@jitter: come evitare questo errore –

0

Non voglio svegliare gli zombi - questo è solo per riferimento futuro.

Questa è fondamentalmente una cattiva implementazione di apache-commons-fileupload. Chiamando hasNext() dovrebbe MAI rendere non valido il risultato dell'ultima chiamata next(). Per esempio. non si può fare qualcosa di simile

List collection; 
while(hasNext(){ 
    Object o = next(); 
    collection.add(o); 
} 

Perché se accedere a qualsiasi elemento della lista che si tradurrà in un ItemSkippedException.

-1

Ho usato per ottenere questo quando ho usato per chiudere il flusso durante l'iterazione. Non chiudere il flusso e funziona correttamente.

0

Ho avuto lo stesso problema. Ho scoperto che è stato causato chiamando due volte "Streams.asString (stream)". Esaminando il codice sorgente del caricamento del file, Streams.asString() chiuderà lo stream al termine della sua operazione, quindi se lo chiami di nuovo con lo stesso stream, che è InputStream ottenuto da FileItemStream.openStream(), comunque, ottieni questa eccezione Risolto il problema con il mio programma e ora funziona come volevo!

+0

come hai risolto il codice? – sairn

-1

Ecco cosa mi stava succedendo. Mi è stato sempre questo errore perché avevo aggiunto

FileItemStream.openStream() 

al "Aggiungere Watch" in IntelliJ IDEA, è per questo che mi stava gettando questo errore. Non aggiungere questo per guardare durante il debug.