applet->servlets

0

Witam wszystkich ma wielki problem z odebraniem wysłanego przez applet kontenera Arraylist<cos>. Sporo już czasu spędziłem nad rozwiązaniem i nadal nic nie mogę zrobić oto kod testowy :
kod appletu:

...
   public void init() {
      ArrayList<Cos> dane = new ArrayList<Cos>();
      dane.add(new Cos("dane"));
      dane.add(new Cos("cosss"));


      URL bierzacaStrona = getCodeBase();
      String protokol = bierzacaStrona.getProtocol();
      String serwer = bierzacaStrona.getHost();
      int port = bierzacaStrona.getPort();
      
      try{
      URL daneURL = new URL(protokol, serwer, port, url);
      URLConnection polaczenie = daneURL.openConnection();
      polaczenie.setUseCaches(false);
      polaczenie.setDoOutput(true);
      polaczenie.setRequestProperty("Content-Type","application/x-www-form-urlencoded");

      ObjectOutputStream out = new ObjectOutputStream(polaczenie.getOutputStream());
      out.writeObject(kot);      
      out.flush();
      out.close();
      readServletResponse(polaczenie);
      }
      catch(Exception e ){...}
  }
  public void readServletResponse(URLConnection servletConnection)
    {
        BufferedReader inFromServlet = null;
  
        try
        {
	       
	    inFromServlet = new BufferedReader(new InputStreamReader(servletConnection.getInputStream()));	                     
            inFromServlet.close();
        }
        catch (IOException e)
        {
           ... 
        }
    }
    
}
class Cos implements Serializable{
    String d;
    public Cos(String d){
        this.d = d;
    }
}

kod servletu (Struts):

...
public class Test extends Action {
    

    private final static String SUCCESS = "success";
    

 
    public ActionForward execute(ActionMapping mapping, ActionForm  form,
            HttpServletRequest request, HttpServletResponse response)
            throws Exception {
        
        ObjectInputStream daneWejsciowe = new ObjectInputStream(request.getInputStream());
        ArrayList<Cos> lista = (ArrayList<Cos>) daneWejsciowe.readObject();                       //????
        daneWejsciowe.close();
        
        return mapping.findForward(SUCCESS);
        
    }
}
class Cos implements Serializable{
    String d;
    public Cos(String d){
        this.d = d;
    }
}

Zrobiłem debuga okazało się że coś dochodzi do servletu ale tutaj
ArrayList<Cos> lista = (ArrayList<Cos>) daneWejsciowe.readObject();
program staje. Zrobiłem testy wysyłając zwyczajną ArrayList bez obiektów tylko coś np.
lista.add("cos") itp i podczas rzutowania w servlecie
ArrayLIst lista =(ArrayList) daneWejsciowe.readObject(); wszystko działało prawidłowo :( Nie mam już pomysłu czemu kontener obiektów nie chce przejść i dlatego proszę o pomoc !!! Dzieki

0

Masz dwie definicji klasy Cos, jedna po stronie appletu, drtuga po stronie servletu. Obie wczytywane sa innymi classloaderami, wiec moze tutaj tkwi problem?

0

Dwa classloadery ? nie wiem jak mam to rozumieć

0

Przy rzutowaniu w servlecie na właściwą klasę dostaję taki wyjątek :

"local class incompatible: stream classdesc serialVersionUID = -5015859476048883149, local class serialVersionUID = 9184933000884118231"

1 użytkowników online, w tym zalogowanych: 0, gości: 1