Io devo realizzare un'applicazione web che deve offrire l'upload di file tramite browser. Per implementare questa funzionalità ho usato Commons FileUpload, un progetto jakarta. Ho fatto un test con un file txt per vedere se funzionava leggendo l'input stream e stampandolo a video (nel codice questa parte è commentata) e funziona. Se invece prendo l'InputStream lo passo ad un oggetto come variabile membro e chiamo un metodo che fa esattamente la stampa a video dello stream(come provato prima) non riesce.
La servlet che recupera lo stream
Codice PHP:
package controller;

import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;

import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import model.Reconverter;
import model.Reconverterr;

import org.apache.commons.fileupload.FileItemIterator;
import org.apache.commons.fileupload.FileItemStream;
import org.apache.commons.fileupload.FileUploadException;
import org.apache.commons.fileupload.servlet.ServletFileUpload;

/**
 * Servlet implementation class for Servlet: ImportXML
 *
 */
 
public class ImportXML extends javax.servlet.http.HttpServlet implements javax.servlet.Servlet {
   static final 
long serialVersionUID 1L;
   
    
/* (non-Java-doc)
     * @see javax.servlet.http.HttpServlet#HttpServlet()
     */
    
public ImportXML() {
        
super();
    }       
    
    
/* (non-Java-doc)
     * @see javax.servlet.http.HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
     */
    
protected void doGet(HttpServletRequest requestHttpServletResponse responsethrows ServletExceptionIOException {
        
// TODO Auto-generated method stub
    
}      
    
    
/* (non-Java-doc)
     * @see javax.servlet.http.HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
     */
    
protected void doPost(HttpServletRequest requestHttpServletResponse responsethrows ServletExceptionIOException {
        
Reconverterr recon;
        
Risultato ris = new Risultato(nullnullnull);
        
boolean isMultipart ServletFileUpload.isMultipartContent(request);
        if (
isMultipart){
            
ServletFileUpload upload = new ServletFileUpload();
            
FileItemIterator iter;
            
InputStream stream null;
            try {
                
iter upload.getItemIterator(request);
                while (
iter.hasNext()) {
                    
FileItemStream item iter.next();
                    
String name item.getFieldName();
                    
stream item.openStream();
                    
/*int ii = stream.available();
                    for (int i=0; i<ii; i++){
                        System.out.print((char) stream.read());
                        
                    }*/
                    
                
}
            } catch (
FileUploadException e) {
                
// TODO Auto-generated catch block
                
e.printStackTrace();
            }
            
test test = new test(stream);
            
test.testt();
            
//IL RESTO HA POCA IMPORTANZA
                                       
recon = new Reconverterr(stream);
            
String s recon.convertiXMLinDB(2);
            if (
s.equals("ok")){
                
RequestDispatcher disp 
                    
getServletContext().getRequestDispatcher("/zipok.jsp");
                
disp.forward(requestresponse);
            }else{
                
ris.setEsito(s);
                
ris.setOperazione("Importazione da file zip fallita");
                
request.setAttribute("risultato"ris);
                
RequestDispatcher disp 
                    
getServletContext().getRequestDispatcher("/errore.jsp");
                
disp.forward(requestresponse);
            }
        }else{
            
recon = new Reconverterr(request.getParameter("host"),
                                    
request.getParameter("idesame"),
                                    
request.getParameter("username"),
                                    
request.getParameter("password"));
            
String s recon.convertiXMLinDB(1);
            if (
s.equals("ok")){
                
RequestDispatcher disp 
                    
getServletContext().getRequestDispatcher("/ftpok.jsp");
                
disp.forward(requestresponse);
            }else{
                
ris.setEsito(s);
                
ris.setOperazione("Importazione da server ftp fallita");
                
request.setAttribute("risultato"ris);
                
RequestDispatcher disp 
                    
getServletContext().getRequestDispatcher("/errore.jsp");
                
disp.forward(requestresponse);
            }
        }
            
    }                 

La classe di test è la seguente:
Codice PHP:
package controller;

import java.io.IOException;
import java.io.InputStream;

import org.apache.commons.fileupload.MultipartStream.ItemInputStream;

public class 
test {
    
InputStream s;
    public 
test(InputStream s){
        
this.s;
    }
    public 
void testt(){
        
int lung;
        try {
            
lung s.available();
            
System.out.println(lung);
            for (
int i=0i<lungi++){
                
System.out.print((chars.read());
                
System.out.println("for di test");
            }
        } catch (
IOException e) {
            
// TODO Auto-generated catch block
            
e.printStackTrace();
        }
        
    }

In particolare risulta l'intero proveniente da s.available() un numero negativo, anche quando la stampa nella servlet è commentata...
Qualcuno sa spiegarmi come posso risolvere la situazione?
In realtà questo è un caso di test che ho fatto per prova, perché a regime il file da uploadare sarà un file .zip e l'InputStream diventerà uno ZipInputStream e non so quali altre ripercussioni ci potranno essere.
Grazie per l'aiuto...