Witam
napisałem aplikację do wyszukiwania nagrań konsultantów z jednego z help desków
niestety zleceniodawca zażyczył sobie aby można było te nagrania odsłuchiwać z poziomu aplikacji.
napisałem metody do odsłuchiwania mp3 i wav natomiast problem pojawił się w momęcie gdy pliki są na serwerze a nie na lokalnej maszynie. chciałbym móc pobrać z serwera(Unixowy system CentOS) tych plików na lokalną maszynę. napisałem server w formie servletu gdyż musze mu jakoś wskazać o jaki plik i z jakiej lokalizacji mi chodzi oraz oczywiście klienta. Niby wszystko powinno chodzić elegancko serwer czeka na zapytanie ale po stronie klienta wyskakuje wyjątek:

 java.rmi.UnmarshalException: error unmarshalling return; nested exception is: 
	java.lang.ClassNotFoundException: Download_Stub (no security manager: RMI class loader disabled)

Download_Stub to namiastka mojego serwera

Nie jestem sobie w stanie z tym poradzić ponieważ Java doc dość niejasno wyjaśnia ten wyjątek
niżej podaję kod źródłowy serwera,namiastki,klienta i wywołania wszystkiego w aplikacji.
aplikacje uruchamiam na windows xp a serwer stoi na unixie, oczywiscie na serwerze sa odpalane rmiregistry itp. inna zdalna metoda dziala bez zarzutów. bardzo bym prosił o jakieś naprowadzenie

SERWER:

import java.io.File.*;

import java.io.Reader.*;

import java.rmi.RemoteException;
import java.rmi.registry.Registry;
import java.rmi.registry.LocateRegistry;

import java.rmi.server.UnicastRemoteObject;
import java.net.*;

import java.io.*;

public class Download implements InterDownload {
    int port=0;
    String sciezka="";
    public void Download(){}
    public int Port(int a)throws RemoteException {
    port=a;
    return port;
    }
    public String Sciezka(String b)throws RemoteException {
        sciezka=b;
        return sciezka;
    }
public  void Start(int g) throws RemoteException {
    try{
    ServerSocket servsock = new ServerSocket(g);
    while (true) {
      System.out.println("Waiting...");

      Socket sock = servsock.accept();
      System.out.println("Accepted connection : " + sock);

      // sendfile
      File myFile = new File (sciezka);
      byte [] mybytearray  = new byte [(int)myFile.length()];
      FileInputStream fis = new FileInputStream(myFile);
      BufferedInputStream bis = new BufferedInputStream(fis);
      bis.read(mybytearray,0,mybytearray.length);
      OutputStream os = sock.getOutputStream();
      System.out.println("Sending...");
      os.write(mybytearray,0,mybytearray.length);
      os.flush();
      sock.close();}}catch(Exception e){
          System.out.println(""+e);}
      
    }
public static void main(String args[]) {

        try {
            Download o = new Download();
            InterDownload stub = (InterDownload) UnicastRemoteObject.exportObject(o, 0);
            
            
            // Bind the remote object's stub in the registry
            Registry registry = LocateRegistry.getRegistry("192.168.1.252",1099);
            registry.bind("InterDownload", stub);
            System.out.println("ok");
            o.Start(Integer.parseInt(args[0]));
 
           

        } catch (Exception w) {
            System.out.println("Server exception: " + w.toString());

        }

}}

interface Namiastki:

import java.rmi.Remote;
import java.io.File.*;
import java.rmi.RemoteException;
import java.io.Reader.*;

public interface InterDownload extends Remote {
public void Download() throws RemoteException;
     public void Start(int g) throws RemoteException;
     public int Port(int a) throws RemoteException;
     public String Sciezka(String b) throws RemoteException;
}

Klient:

import java.net.*;
import java.io.*;

public class FileClient{ 
    public FileClient(){}
  public void Download(String ip,int port,String scierzka) {
    try{int filesize=3932168; // filesize temporary hardcoded

    long start = System.currentTimeMillis();
    int bytesRead;
    int current = 0;
    // localhost for testing
    Socket sock = new Socket(ip,port);
    System.out.println("Connecting...");

    // receive file
    byte [] mybytearray  = new byte [filesize];
    InputStream is = sock.getInputStream();
    FileOutputStream fos = new FileOutputStream(scierzka);
    BufferedOutputStream bos = new BufferedOutputStream(fos);
    bytesRead = is.read(mybytearray,0,mybytearray.length);
    current = bytesRead;

    // thanks to A. C�diz for the bug fix
    do {
       bytesRead =
          is.read(mybytearray, current, (mybytearray.length-current));
       if(bytesRead >= 0) current += bytesRead;
    } while(bytesRead > -1);

    bos.write(mybytearray, 0 , current);
    bos.flush();
    long end = System.currentTimeMillis();
    System.out.println(end-start);
    bos.close();
    sock.close();
  }catch(Exception d){
  System.out.println(""+d);
  }
}}

Wywołanie:

private void jButton9ActionPerformed(java.awt.event.ActionEvent evt) {                                         
try {
        File fi = new File("config.mb");
       
        FileReader input = new FileReader(fi);
     
        BufferedReader reader2 = new BufferedReader(input);
    
        String h = reader2.readLine();
     
        reader2.readLine();
    
        reader2.readLine();
       
        String to = reader2.readLine();
        reader2.readLine();
        reader2.readLine();
        reader2.readLine();
       int port=Integer.parseInt(reader2.readLine());
        
     
        String gdzie = to + jList1.getSelectedValue(); //gdzie ma byc pobrany na nasza lokalna maszyne
       
       Registry registry = LocateRegistry.getRegistry(ip, 1099);
        System.out.println("" + registry);
        System.out.println(ip);
        InterDownload dow= (InterDownload) registry.lookup("InterDownload");

        System.out.println("" + g);
        System.out.println("ok");
        String wszystko="//"+ip+h+""+ jList1.getSelectedValue();  //scierzka z ip+plik jaki ma byc sciagniety
        System.out.println(wszystko+"+"+port);
        FileClient client=new FileClient();
       
       dow.Port(port);
       dow.Sciezka(wszystko);
       client.Download(ip, port, gdzie);
       long t0, t1;

        t0 =  System.currentTimeMillis();

        do{System.out.println(""+1);
            t1 = System.currentTimeMillis();
        }
        while ((t1 - t0) < (2 * 1000));

        System.out.println("ok1");
       
        System.out.println("ok2");
        
        System.out.println("ok3");
    } catch (Exception e) {
        jDialog1.setVisible(true);
jTextPane2.setText("EXCEPTION: " + e);
    }
}