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: [EMAIL PROTECTED]
        ReportedBy: [EMAIL PROTECTED]


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:   <mailto:[EMAIL PROTECTED]>
For additional commands, e-mail: <mailto:[EMAIL PROTECTED]>

Reply via email to