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]>