You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tomcat.apache.org by bu...@apache.org on 2001/11/23 09:03:26 UTC

DO NOT REPLY [Bug 5040] New: - EOFException when talking from applet to servlet via mod_webapp

DO NOT REPLY TO THIS EMAIL, BUT PLEASE POST YOUR BUG 
RELATED COMMENTS THROUGH THE WEB INTERFACE AVAILABLE AT
<http://nagoya.apache.org/bugzilla/show_bug.cgi?id=5040>.
ANY REPLY MADE TO THIS MESSAGE WILL NOT BE COLLECTED AND 
INSERTED IN THE BUG DATABASE.

http://nagoya.apache.org/bugzilla/show_bug.cgi?id=5040

EOFException when talking from applet to servlet via mod_webapp

           Summary: EOFException when talking from applet to servlet via
                    mod_webapp
           Product: Tomcat 4
           Version: 4.0.1 Final
          Platform: PC
        OS/Version: Windows NT/2K
            Status: NEW
          Severity: Normal
          Priority: Other
         Component: WARP Connector
        AssignedTo: tomcat-dev@jakarta.apache.org
        ReportedBy: heiner.amthauer@t-systems.de


Hi there!

I'm using Tomcat 4.0.1/Apache 1.3.22/mod_webapp1.0. I'm running an applet, 
which directly talks to a bunch of servlets. It does this, by opening an 
ObjectXxxStream, sending objects and receiving objects. This code has been used 
on different webservers, successfully. However, when using the above mentioned 
combination, I get an EOFException on some specific objects. Ulrich Knecht has 
pointed out the same problem on Thu, Oct. 4th, 2001 at tomcat userlist. 
Attached, you'll find lots of lines, containing the stack trace and one class 
(with superclass), which cannot be send via mod_webapp/warp, using a 
ObjectXxxStream.

Heiner


--------------------------------- stack -------------------------------------
2001-11-23 08:24:29 
org.apache.catalina.INVOKER.com.dsh.egb.aks.betrieb.servlets.BlattIdServlet:  
[BlattIdServlet] java.io.EOFException
	at java.io.DataInputStream.readFully(Unknown Source)
	at java.io.ObjectInputStream.readFully(Unknown Source)
	at java.io.ObjectInputStream.inputClassFields(Unknown Source)
	at java.io.ObjectInputStream.defaultReadObject(Unknown Source)
	at java.io.ObjectInputStream.inputObject(Unknown Source)
	at java.io.ObjectInputStream.readObject(Unknown Source)
	at java.io.ObjectInputStream.inputArray(Unknown Source)
	at java.io.ObjectInputStream.readObject(Unknown Source)
	at java.io.ObjectInputStream.inputClassFields(Unknown Source)
	at java.io.ObjectInputStream.defaultReadObject(Unknown Source)
	at java.io.ObjectInputStream.inputObject(Unknown Source)
	at java.io.ObjectInputStream.readObject(Unknown Source)
	at java.io.ObjectInputStream.inputClassFields(Unknown Source)
	at java.io.ObjectInputStream.defaultReadObject(Unknown Source)
	at java.io.ObjectInputStream.inputObject(Unknown Source)
	at java.io.ObjectInputStream.readObject(Unknown Source)
	at java.io.ObjectInputStream.readObject(Unknown Source)
	at com.dsh.egb.aks.betrieb.servlets.MetaServlet.readFromApplet
(MetaServlet.java:91)
	at com.dsh.egb.aks.betrieb.servlets.BlattIdServlet.doPost
(BlattIdServlet.java:39)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:760)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter
(ApplicationFilterChain.java:247)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter
(ApplicationFilterChain.java:193)
	at org.apache.catalina.core.StandardWrapperValve.invoke
(StandardWrapperValve.java:243)
	at org.apache.catalina.core.StandardPipeline.invokeNext
(StandardPipeline.java:566)
	at org.apache.catalina.core.StandardPipeline.invoke
(StandardPipeline.java:472)
	at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:943)
	at org.apache.catalina.core.StandardContextValve.invoke
(StandardContextValve.java:201)
	at org.apache.catalina.core.StandardPipeline.invokeNext
(StandardPipeline.java:566)
	at org.apache.catalina.core.StandardPipeline.invoke
(StandardPipeline.java:472)
	at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:943)
	at org.apache.catalina.core.StandardContext.invoke
(StandardContext.java:2344)
	at org.apache.catalina.core.StandardHostValve.invoke
(StandardHostValve.java:164)
	at org.apache.catalina.core.StandardPipeline.invokeNext
(StandardPipeline.java:566)
	at org.apache.catalina.valves.ErrorDispatcherValve.invoke
(ErrorDispatcherValve.java:170)
	at org.apache.catalina.core.StandardPipeline.invokeNext
(StandardPipeline.java:564)
	at org.apache.catalina.valves.ErrorReportValve.invoke
(ErrorReportValve.java:170)
	at org.apache.catalina.core.StandardPipeline.invokeNext
(StandardPipeline.java:564)
	at org.apache.catalina.core.StandardPipeline.invoke
(StandardPipeline.java:472)
	at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:943)
	at org.apache.catalina.core.StandardEngineValve.invoke
(StandardEngineValve.java:163)
	at org.apache.catalina.core.StandardPipeline.invokeNext
(StandardPipeline.java:566)
	at org.apache.catalina.core.StandardPipeline.invoke
(StandardPipeline.java:472)
	at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:943)
	at org.apache.catalina.connector.warp.WarpRequestHandler.handle
(WarpRequestHandler.java:215)
	at org.apache.catalina.connector.warp.WarpConnection.run
(WarpConnection.java:194)
	at java.lang.Thread.run(Unknown Source)

--------------------------- class GbAuswahlDaten.java ------------------------

package common;

import java.util.Vector;
import java.util.Enumeration;

/**
 * Gruppiert die anzufordernden Grundbuchbl�tter mit den gew�nschten Zielen 
(Ansich, Datenexport, Ausdruck, amtlicher Ausdruck, Vorgangs- bzw. 
Antragsliste). * @author
 *
 * Serialisierbar
 */
public class GbAuswahlDaten extends DatenObjekt implements java.io.Serializable 
{

    /**
     * Vector, welcher die GB-Bl�tter enth�lt.    * @author
     */
    public Vector gbBlaetter;

    /**
     * true, wenn eine Grundbuchansicht gew�nscht ist.    * @author
     */
    public boolean ansicht;

    /**
     * true, wenn die GB-Blattdaten in eine andere Anwendung exportiert werden 
sollen.    * @author
     */
    public boolean datenExport;

    /**
     * true, wenn die GB-Ansicht den Vermerk "Ausdruck" tragen soll.    * 
@author
     */
    public boolean ausdruck;

    /**
     * true, wenn ein amtlicher Ausdruck auf Papier angefordert werden soll.    
* @author
     */
    public boolean amtlAusdruck;

    /**
     * true, wenn die laufenden Antr�ge f�r das GB-Blatt angezeigt werden 
sollen.    * @author
     */
    public boolean vorgangsListe;

    /**
     * true, wenn die GB-ID der Bl�tter bereits bekannt ist.    * @author
     */
    public boolean gbBlattIdBekannt = false;

    /**
     * Extradaten
     */
    public Object extraDaten;
    
    /**
     * Erzeugt eine Kopie der Daten, ohne den Vector gbBlaetter
     */
    public GbAuswahlDaten(GbAuswahlDaten auswahlDaten) {
        ansicht = auswahlDaten.ansicht;
        datenExport = auswahlDaten.datenExport;
        ausdruck = auswahlDaten.ausdruck;
        amtlAusdruck = auswahlDaten.amtlAusdruck;
        vorgangsListe = auswahlDaten.vorgangsListe;
        gbBlattIdBekannt = false;
        extraDaten = auswahlDaten.extraDaten;
        gbBlaetter = new Vector();
    }
    
    /**
     * Erzeugt ein leeres Objekt
     */
    public GbAuswahlDaten() {
    }
    
    /** Erzeugt ein Objekt mit einer Kopie der GbBlattInfo */
    public GbAuswahlDaten(GbBlattInfo gbBlattInfo) {
        gbBlaetter = new Vector();
        gbBlaetter.addElement(new GbBlattInfo(gbBlattInfo));
        gbBlattIdBekannt = true;
    }
    
    public GbAuswahlDaten(GbAuswahlDaten gbAuswahlDaten, GbBlattInfo 
gbBlattInfo) {
        this(gbAuswahlDaten);
        gbBlaetter.addElement(gbBlattInfo);
        if (AksKonstanten.KEINE_GBBLATTID != gbBlattInfo.gbBlattId) 
gbBlattIdBekannt = true;
    }
    
    /**
     * Erzeugt ein neues Objekt, welches wahlweise die Bl�tter des alten Objekt 
mit oder
     * ohne papiergef�hrte Bl�tter enth�lt.
     * @param auswahlDaten zu kopierende Auswahldaten
     * @param papierGefuehrtUebernehmen true, wenn die papiergef�hrten Bl�tter 
�bernommen werden sollen
     */
    public GbAuswahlDaten(GbAuswahlDaten gbAuswahlDaten, boolean 
papierGefuehrtUebernehmen) {
        this(gbAuswahlDaten);
        gbBlattIdBekannt = gbAuswahlDaten.gbBlattIdBekannt;
        Enumeration e = gbAuswahlDaten.gbBlaetter.elements();
        while(e.hasMoreElements()) {
            GbBlattInfo info = (GbBlattInfo)e.nextElement();
            if (papierGefuehrtUebernehmen || (AksKonstanten.GBBLATT_PAPIER != 
info.typ)) {
                gbBlaetter.addElement(info);
            }
        }
    }
}

----------------------------- class DatenObjekt.java ------------------------

/*
 * DatenObjekt.java
 *
 * Created on 2. November 2000, 10:14
 */

package common;

import java.lang.reflect.*;
/**
 * Oberklasse aller Objekte, die nur Daten enthalten. Wird verwendet, um die 
Daten leichter ausgeben zu k�nnen.
 */
public class DatenObjekt extends Object implements java.io.Serializable, AksLog 
{

    /**
     * Diese Methode f�gt �ber Reflection die Namen und Typen aller
     * Felder der �bergebenen Klasse zu einem String zusammen und
     * gibt diesen zur�ck. Au�erdem wird noch der Klassenname selbst
     * mit aufgef�hrt.
     * @return Eine Stringrepr�sentation aller Felder der Klasse.
     */
    public String toComplexString() {
        StringBuffer sb = new StringBuffer();
        Class c = this.getClass();
        String className = c.getName();
        sb.append("***" + className + "***:\n");
        Field[] publicFields = c.getFields();
        for (int i = 0; i < publicFields.length; i++) {
            String fieldName = publicFields[i].getName();
            Class typeClass = publicFields[i].getType();
            String fieldType = typeClass.getName();
            Object fieldValue = null;
            try{
                fieldValue =publicFields[i].get(this);
            } catch (SecurityException e) {
                System.out.println(e);
            } catch (IllegalAccessException e) {
                System.out.println(e);
            }
            sb.append(fieldName);
            sb.append(" | ");
            sb.append(fieldType);
            sb.append(" | ");
            sb.append(fieldValue);

            sb.append("\n");
        }
        return sb.toString();
    }

    public String toString() {
        StringBuffer sb = new StringBuffer();
        Class c = this.getClass();
        Field[] publicFields = c.getFields();
        for (int i = 0; i < publicFields.length; i++) {
            String fieldName = publicFields[i].getName();
            Class typeClass = publicFields[i].getType();
            String fieldType = typeClass.getName();
            Object fieldValue = null;
            try{
                fieldValue =publicFields[i].get(this);
            } catch (SecurityException e) {
                System.out.println(e);
            } catch (IllegalAccessException e) {
                System.out.println(e);
            }
            // null, Leerstrings und false m�ssen nicht gespeichert werden, da 
diese eh Iinitiale Werte sind!
            if (((fieldValue != null) && !fieldValue.toString().equals("")) && !
fieldValue.toString().equals("false")){
            
                sb.append(fieldName);
                sb.append("=");
                sb.append(fieldValue);
                sb.append(",");
            }
        }
        return sb.substring(0,sb.length()-1);
    }

        
    public void log(final java.lang.Object p1,long p2) {
        log(this, p1, p2);
    }
    
    public void log(Object p1, Object p2, long p3) {
        AksKonstanten.getLogger().log(p1, p2, p3);
    }
}


-------------------------- interface AksLog.java --------------------------

/*
 * AksLog.java
 *
 * Created on 22. Februar 2001, 15:28
 */

package common;

/**
 * sorgt f�r einen einheitlichen Mechanismus zum Beschreiben von "Log-Dateien"
 * @author  Dr. Josef Siegel
 * @version 1.0
 */
public interface AksLog {
    
    /**
     * gibt <code>nachricht</code> aus, 
     * falls das <code>Debuglevel&level</code> von 0 verschieden ist.
     * Diese Methode dient nur zur Bequehmlichkeit und muss bei der 
Implementierung
     * die Methode <code>log(caller, nachricht, level)</log> aufrufen.
     * @param nachricht auszugebender Text
     * @param level Bit, das gesetzt sein muss, damit der Text ausgegeben wird
     */
    public void log(java.lang.Object nachricht, long level);
    
    /**
     * gibt <code>nachricht</code> aus, 
     * falls das <code>Debuglevel&level</code> von 0 verschieden ist.
     * Bei der Ausgabe wird der Klassenname von <code>caller</code> mit 
ausgegeben.
     * @param nachricht auszugebender Text
     * @param caller Referenz auf das Aufrufende Objekt
     * @param level Bit, das gesetzt sein muss, damit der Text ausgegeben wird
     */
    public void log(Object caller, java.lang.Object nachricht, long level);
    
}

--
To unsubscribe, e-mail:   <ma...@jakarta.apache.org>
For additional commands, e-mail: <ma...@jakarta.apache.org>