Visualizzazione dei risultati da 1 a 2 su 2
  1. #1
    Utente di HTML.it L'avatar di unit1
    Registrato dal
    Feb 2004
    Messaggi
    354

    [soap-java] problema nel mandare file da server a client

    Salve,

    Sto lavorando ad un progetto in soap che deve inviare un file dal server al client. Io per far questo ho pensato di mandare dal server un DataHandler e di farlo poi riscriverlo.

    La funzione del server è molto semplice:

    codice:
        
        public DataHandler download(String username, String password,String filename){
          //if(!login(username,password)){
          //  return null;
          //}
          File file=new File("//var//www//progetto//utenti//"+username+"//"+filename);
          DataHandler repositoryItem = new DataHandler(new FileDataSource(file));
          return repositoryItem;
        }
    le linee che ho commentato non sono che una verifica che il file sia preso da un utente registrato. non c'entra..
    La funzione non fa altro che prendere un file, metterlo in un DataHandler e restituirlo come valore di ritorno!

    Il client invece deve fare la chiamata al soap, quindi è un po' più complesso:

    codice:
        private void scarica(Object down){ //in down c'è il nome del file
          System.out.println("Scarica "+down);//non sembra ma è una stinga
          try{
             URL url = new URL ("http://localhost:8080/soap/servlet/rpcrouter");
             Call call = new Call();
             call.setTargetObjectURI(urn:share);
             call.setMethodName("download");
             call.setEncodingStyleURI(Constants.NS_URI_SOAP_ENC);
             Vector params = new Vector();
             params.removeAllElements();
             params.addElement(new Parameter("username", String.class, strUsername, null));
             params.addElement(new Parameter("password", String.class, strPassword, null));
             params.addElement(new Parameter("filename", String.class, down, null));
             call.setParams (params);//manda i 3 parametri della chiamata
             Response resp = call.invoke(url, "" );//li mette in resp
             if ( resp.generatedFault() ) { //controlla se ci sono stati errori 
               Fault fault = resp.getFault ();
               System.out.println("The call failed: ");
               System.out.println("Fault Code   = " + fault.getFaultCode());
               System.out.println("Fault String = " + fault.getFaultString());
             }
             else {/se va tutto bene
               Parameter result = resp.getReturnValue();//mette dentro a Parameter result il DataHandler
               FileOutputStream fos = new FileOutputStream(".//"+down);
               System.out.println(result.getType()); //DataHandler
               //System.out.println(result.toString()); //
               Object o = result.getValue();//crea un oggetto con il DataHandler in result 
               result.writeTo(fos);// dovrebbe scrivere ma non funziona
               fos.close();
             }
             }catch(Exception e){
               System.out.println("errore di connessione: "+e);
               status.setText("Errore di connessione al server");
               return;
             }
        }
    Il problema sta, secondo me, nel prendere il DataHandler nel risultato perchè intrappolato in Parameter.

    Qualcuno potrebbe dirmi qualche consiglio?

    Grazie in anticipo.

  2. #2
    Utente di HTML.it L'avatar di unit1
    Registrato dal
    Feb 2004
    Messaggi
    354
    mi sono auto aiutato

    codice:
               DataHandler element =(DataHandler)result.getValue(); 
               element.writeTo(fos);
               fos.close();

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.