Foros del Web » Programación para mayores de 30 ;) » Java »

Comunicación Applet-Servlet EOFException

Estas en el tema de Comunicación Applet-Servlet EOFException en el foro de Java en Foros del Web. Hola! La verdad que ya había pasado por aquí buscando soluciones a algún que otro problema que me había encontrado con anterioridad, pero nunca me ...
  #1 (permalink)  
Antiguo 21/04/2010, 04:31
 
Fecha de Ingreso: abril-2010
Mensajes: 2
Antigüedad: 14 años
Puntos: 0
Comunicación Applet-Servlet EOFException

Hola! La verdad que ya había pasado por aquí buscando soluciones a algún que otro problema que me había encontrado con anterioridad, pero nunca me había hecho falta registrarme ya que siempre encontraba soluciones, pero con este problema no he encontrado nada que me sirva y eso que he ido por foros y foros....

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:
	public 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;
	}
Este es el servlet
Código:
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;
	}
	
}
Gracias por adelantado.
  #2 (permalink)  
Antiguo 21/04/2010, 06:11
 
Fecha de Ingreso: abril-2010
Mensajes: 2
Antigüedad: 14 años
Puntos: 0
Respuesta: Comunicación Applet-Servlet EOFException

He estado haciendo pruebas en otro ordenador y el código funciona perfectamente (el que he posteado) pero en el ordenador donde trabajo normalmente ese mismo código no funciona... así que ya no sé que pensar.

Puede que se haya quedado corrupto el stream? o que cuando hice los cambios y mandaba más información por el stream, esa información aun esté en el stream de alguna manera?

A alguien se le ocurre algo? Porque yo ya no sé ni que pensar.
Gracias.

Etiquetas: jsp-servlets
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 23:51.