El caso es que tengo un código (que funcionaba perfectamente) que hacía la comunicación entre un applet y un servlet, el caso es que necesitaba modificarlo porque quería mandar más información del servlet al applet, al hacer esos cambios me saltó la excepción de EOFException al intentar leer el inputStream y lo mejor de todo es que aunque vuelva a la versión que me funcionaba a la perfección ahora ya no me funciona sino que sigue lanzando la EOFException, así que alguien sabe cual es la razón de que pase esto? ya he agotado mis posibilidades la verdad...
Aquí les dejo el código para que puedan echar un vistazo y ver si encuentran algo que a mi se me haya pasado.
Esta es la parte del applet que hace la comunicación
Código:
Este es el servletpublic ListasComponentesSeleccionables cargarListasComponentes( ) throws IOException, ClassNotFoundException { String serv = "/Desaladora/cargarListasComponentesApplet.do"; String host = Principal.documentBase.getHost( ); URL direccion = new URL( "http", host, 8080, serv ); // Creamos la conexion con el servidor. URLConnection connection = direccion.openConnection( ); connection.setDoInput( true ); // Permitimos datos de respuesta connection.setDoOutput( true ); // Vamos a enviar datos de salida connection.setUseCaches( false ); // Desactivamos cache por si realizamos varias comunicaciones /** * Ahora indicamos en la cabecera de la peticion POST que tipos de datos viajan. * Vamos a enviar un objeto al servidor asi que enviamos el nombre de su clase. * Para poder enviar objetos, estos tienen que ser serializables, es decir, * implementar la interfaz Serializable. */ connection.setRequestProperty( "Content-Type", "application/x-java-serialized-object" ); /*Enviamos la peticion al servidor. Para eso hay que meter el objeto en el flujo de salida de la conexion */ ObjectOutputStream output; output = new ObjectOutputStream( connection.getOutputStream( ) ); output.writeObject( new Boolean(true) ); output.flush( ); output.close( ); // En la siguiente linea es donde salta la excepcion ObjectInputStream input = new ObjectInputStream( connection.getInputStream( ) ); ListasComponentesSeleccionables response = new ListasComponentesSeleccionables( ); response = ( ListasComponentesSeleccionables ) input.readObject( ); return response; }
Código:
Gracias por adelantado. public class CargarListasComponentesAppletAction extends Action { public ActionForward execute( ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response ) throws ServletException, IOException, Exception { InitialContext context = new InitialContext(); SensorManagerService sensor_service; ActuatorManagerService actuator_service; Globals.LOGGER_SECURITY.debug( "Entering ACTION 'CargarListasComponentesAppletAction'" ); // establecemos el formato de la respuesta response.setContentType("application/x-java-serialized-object"); try { // recuperamos el stream de entrada ObjectInputStream bufferentrada = new ObjectInputStream(request.getInputStream()); // leemos el objeto enviado Boolean peticionOK = (Boolean)bufferentrada.readObject(); // Configurarmos un Stream de Salida ObjectOutputStream buffersalida = new ObjectOutputStream(response.getOutputStream()); // construimos el objeto a retornar sensor_service = ( SensorManagerService ) context.lookup( "desaladora/SensorManagerServiceBean/local" ); ArrayList<AlarmConnectedSensorDTO> sensorList = sensor_service.findAllSensorsToAlarms(); actuator_service = ( ActuatorManagerService ) context.lookup( "desaladora/ActuatorManagerServiceBean/local" ); ArrayList<AlarmConnectedActuatorDTO> actuatorList = actuator_service.findAllActuatorsToAlarms(); // escribimos los datos buffersalida.writeObject( crearListasSeleccionables(sensorList, actuatorList) ); // y los enviamos buffersalida.flush(); } catch(Exception e) { System.out.println("Error en la trasmision de datos"); } return null; } private ListasComponentesSeleccionables crearListasSeleccionables(ArrayList<AlarmConnectedSensorDTO> sensorList, ArrayList<AlarmConnectedActuatorDTO> actuatorList) { Vector<Integer> vectorSensores = new Vector<Integer>(); Vector<Integer> vectorActuadores = new Vector<Integer>(); for(AlarmConnectedSensorDTO sensor : sensorList) { vectorSensores.add(sensor.getIdSensor( )); } for(AlarmConnectedActuatorDTO actuator : actuatorList) { vectorActuadores.add(actuator.getIdActuator( )); } ListasComponentesSeleccionables listasComponentesSeleccionables = new ListasComponentesSeleccionables(vectorSensores, vectorActuadores); return listasComponentesSeleccionables; } }