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:
le linee che ho commentato non sono che una verifica che il file sia preso da un utente registrato. non c'entra..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; }
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:
Il problema sta, secondo me, nel prendere il DataHandler nel risultato perchè intrappolato in Parameter.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; } }
Qualcuno potrebbe dirmi qualche consiglio?
Grazie in anticipo.

Rispondi quotando
