Servlet, Deserialisieren, StreamCorruptedException

Status
Nicht offen für weitere Antworten.
P

Pantoffelheld

Gast
Hallo zusammen!

Ich hab ein Servlet, das einen Filenamen als Parameter bekommt und ein serialisiertes Objekt zurückliefern sollte. Das deserialisierte Objekt ist am Server auch noch intakt, jedoch schaffe ich es nicht, es zu einem Client (ein JPanel in diesem Fall) zu schicken.

Code:
	public PanelData getPanelDataFromServer(String fileName) throws OptionalDataException,   
           ClassNotFoundException, IOException {
		String location = "http://bap:8080/AAAA/GetExistingPanelDataServlet";
		URL url = new URL(location);
		URLConnection uc = url.openConnection();		
		uc.setDoOutput(true);
		uc.setDoInput(true);
		uc.setUseCaches(false);
		uc.setRequestProperty("Content-type", "text/html");
		ObjectOutputStream dos = new ObjectOutputStream(uc.getOutputStream());
		dos.writeObject(fileName);
		dos.flush();
		dos.close();
		dos.close();
		//get result
		InputStream in = uc.getInputStream();
		ObjectInputStream result = new ObjectInputStream(in);
		PanelData res = (PanelData) result.readObject();
		in.close();
		return res;
	}//getPanelDataFromServer


beim readObject kommts zu einer java.io.StreamCorruptedException

Kann mir jemand sagen warum ?

Das Servlet sieht so aus:
Code:
                                      .......
					ObjectOutputStream out = new ObjectOutputStream(res.getOutputStream());
					out.reset();
					out.writeObject(readData);
					out.close();
                                      .......
 
P

Pantoffelheld

Gast
Ich kann auf die selbe weise String-Objekte, ArrayList-Objekte, .... übertragen, nur bei meiner Klasse PanelData kommt es zu dieser Exception. Das Objekt auf Serverseite ist intakt, es muss an der Übertragung liegen.

Die Methode
Code:
uc.setRequestProperty("Content-type", "text/html");
hab ich in den anderen Servlets auch so verwendet (die Objekte liefern) , und es hat funktioniert.

Was soll ich sonst als content type setzen ?

Kann es sein dass die Exception auftritt, weil das Objekt zu gross ist ?


danke für jede hilfe !
r.
???:L
 

Bleiglanz

Gesperrter Benutzer
verlange gar keinen content-type (Zeile 10 auskommentieren), oder verwende beim servlet und im client

"application/x-java-serialized-object"

wie gross ist denn dein Objekt es denn?

was ist PanelData und was hats mit JPanel zu tun?

zu Jpanel die Frage ob du das gleiche JDK/JRE auf Cleint und Server verwendest :):

public class JPanel
extends JComponent
implements Accessible

JPanel is a generic lightweight container. For examples and task-oriented documentation for JPanel, see How to Use Panels, a section in The Java Tutorial.

Warning: Serialized objects of this class will not be compatible with future Swing releases. The current serialization support is appropriate for short term storage or RMI between applications running the same version of Swing. As of 1.4, support for long term storage of all JavaBeansTM has been added to the java.beans package. Please see XMLEncoder.
 
P

Pantoffelheld

Gast
Die Klasse PanelData enthält mehrere Felder, letztendlich sind das lauter serialisierbare Objekte, die int und String-Werte enthalten.

Code:
	public ArrayList partsOfTrip;
	public Destination inland;
	public Destination tripDestination;
	public Employee employee;
	public String comment;
	public String projNr;
	public ArrayList payments;
	public int nrOfNightsInHotel;
	public int nrOfMealsInland;
	public int nrOfMealsAbroad;
	public Money specialAmount;
	public boolean specialAmountIsPlus;
	public String fileName;


Wenn ich im Servlet dieses Objekt durch ein anderes ersetze, funzt es ! (zB ArrayList of Employees)

So ein Objekt hat (in serialisierter Form) ungefähr 4 KB.
 

Bleiglanz

Gesperrter Benutzer
a) verwende vielleicht lieber HttpURLConnection, wenn auf der Gegenseite ein Servlet ist

b) sind am Client und am Server die identischen Class-Files für deine Klassen vorhanden (Destination, Employee, usw)?


Schau auch mal auf

public Object getContent()
throws IOException

public Object getContent(Class[] classes)
throws IOException
 
P

Pantoffelheld

Gast
Die Klassen sind identisch. Im Feld "ArrayList payments" werden Payment-Objekte gespeichert. Laut meinen bisherigen Tests sieht es so aus, als ob hier das Problem liegt.

Code:
package util;

import java.io.Serializable;
import java.text.FieldPosition;
import java.text.SimpleDateFormat;
import java.util.Calendar;

public class Payment implements Serializable{
	
	/**Paid with Routex.*/
	public static final int ROUTEX = 0;
	/**Paid with Visa.*/
	public static final int VISA = 1;
	/**Paid in cash.*/
	public static final int CASH = 2;


	/**The date of the charge.*/
	private Calendar date;
	/**The content of the payment.*/
	private String content;
	/**The amount of the payment.*/
	private Money amount;
	/**The method of the payment: Routex, Visa or cash.*/
	private int paymentMethod;
	
	
	public Payment(Calendar date, String content, Money amount, int method) {
		this.date = date;
		this.content = content;
		this.amount = amount;
		this.paymentMethod = method;
	}//Payment()


	public String toString() {
		StringBuffer buf = new StringBuffer();
		SimpleDateFormat format = new SimpleDateFormat("dd.MM.yyyy");
		buf = format.format(this.date.getTime(), buf, new FieldPosition(0)); //don't know what third parameter is !
		String[] methods =  {"ROUTEX", "Firmen-VISA", "Barzahlung"};
		String method = methods[this.getPaymentMethod()];
		return buf.toString() + ": " + amount + " Euro per " + method + "  Zweck: " + getContent();
	}//toString


	//*** SETTERS & GETTERS ***

	public Calendar getDate()  {
		return this.date;
	}

	public String getContent() {
		return this.content;
	}
	

	public Money getAmount() {
		return this.amount;
	}
	
	public int getPaymentMethod() {
		return this.paymentMethod;
	}

}

Wenn "payments" leer ist, gehts, wenn darin ein "Payment"-Objekt geadded wurde, kommt die Exception.

Ich vermute, dass die static fields irgendwie Probleme machen.

Anybody an idea ?
 
P

Pantoffelheld

Gast
oder aber das hier:

import java.text.FieldPosition;

ist anscheinend nicht serialisierbar ...
 

Bleiglanz

Gesperrter Benutzer
dass static fields nicht serialisiert werden sollte eigentlich nichts ausmachen, weil dein Client die Klasse ja ebenfalls zur Verfügung hat

Wenn eines deiner Felder nicht serialisierbar ist, dann sollte eigentlich schon am Server eine Exception fliegen!
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
D HTTP Aufruf einer Methode aus einem Servlet heraus Allgemeine Java-Themen 0
M Parameter auslesen im Servlet Allgemeine Java-Themen 0
E Die if-Anweisung in einer Java Bean bzw. in einem Servlet? Allgemeine Java-Themen 8
A Registrierungs-servlet Allgemeine Java-Themen 0
S Servlet, per URLConnection Mit String Http Parameter mitsenden Allgemeine Java-Themen 3
F Benachrichtigungs-System Webapp Java Servlet Allgemeine Java-Themen 10
B Userdaten in Hashmap speichern - Servlet Allgemeine Java-Themen 6
S Bildaufbau durch Servlet -> Exception Allgemeine Java-Themen 11
N Servlet welches PDF erzeugt Allgemeine Java-Themen 10
U Servlet in Webseite einbinden Allgemeine Java-Themen 1
S Java Servlet Cache + Cache-Management Allgemeine Java-Themen 14
J package javax.servlet does not exist Allgemeine Java-Themen 5
P Servlet Eingaben sicher machen Allgemeine Java-Themen 5
P DocumentBuilder servlet Allgemeine Java-Themen 9
V [solved]Von Java Prog über ein JSP/Servlet auf DB zugreifen Allgemeine Java-Themen 3
M Applet Servlet Kommunikation ein Problem bei externem Server Allgemeine Java-Themen 3
G Servlet über apache Tomcat ansprechen Allgemeine Java-Themen 6
E Servlet wartet auf Thread Allgemeine Java-Themen 2
N Hardware-Webserver mit Java (JSP/Servlet)-Unterstützung? Allgemeine Java-Themen 8
K HTML-Formular findet Servlet nicht Allgemeine Java-Themen 2
K Servlet im Browser aufrufen Allgemeine Java-Themen 3
J einfachster Servlet-Aufruf klappt nicht Allgemeine Java-Themen 3
I Servlet von einem Swing Based GUI aufrufen Allgemeine Java-Themen 5
G Servlet Register/Login-Prozedur Allgemeine Java-Themen 9
T URL in Servlet auslesen? Allgemeine Java-Themen 4
A Was ist bei einem Servlet beim Client notwendig? Allgemeine Java-Themen 22
T Profiler für Servlet Allgemeine Java-Themen 2
T Servlet und JFrame Allgemeine Java-Themen 2
L E-Mail Auswertung mit Servlet (Excel) Allgemeine Java-Themen 3
L String ausgeben in Servlet Allgemeine Java-Themen 2
P Filestream von HTML-Form zu Servlet Allgemeine Java-Themen 6
B Suche Webhoster mit Javaunterstützung (JSP, Servlet) Allgemeine Java-Themen 10
P Was ist der Unterschied zwischen JSP und Servlet ? Allgemeine Java-Themen 4
M Wo krieg' ich die Datei Servlet.jar Allgemeine Java-Themen 3
R Servlet Probleme im Internet Explorer (per LAN) Allgemeine Java-Themen 4
G Servlet - "Client immer am neuesten Stand" Allgemeine Java-Themen 2
N Diagramm beschriften, Servlet Allgemeine Java-Themen 5
R suche servlet.jar Allgemeine Java-Themen 2
R Servlet, das File zurückliefert Allgemeine Java-Themen 4
1 Applet soll PDF von Servlet empfangen Allgemeine Java-Themen 3
E Servlet-Beispiel gesucht Allgemeine Java-Themen 3
H Variablenübergabe von Servlet zu JSP Allgemeine Java-Themen 18
M Mit HTML in Servlet Daten austauschen Allgemeine Java-Themen 3
H Servlet/Applet Kommunikation Allgemeine Java-Themen 2
M Servlet --> Berechnung --> Timeout vom Proxy oder IE!? Allgemeine Java-Themen 7
A Formular POST übergabe an Servlet Allgemeine Java-Themen 4
F Gson deserialisieren mit PropertyChangeSupport Allgemeine Java-Themen 4
C Deserialisieren von unterschiedlichen Klasseninstanzen Allgemeine Java-Themen 13
M Objekt serialisieren/deserialisieren und in einer SQLite-Datenbank speichern Allgemeine Java-Themen 3
F Schlüsselworte Einstellungen dynamisch deserialisieren Allgemeine Java-Themen 5
T Objekt 2x deserialisieren, aber nur 1x im Heap haben? Allgemeine Java-Themen 4
X Objekte aus TableModel serialisieren und deserialisieren Allgemeine Java-Themen 4
A Problem beim serialisieren/deserialisieren einer ArrayList Allgemeine Java-Themen 3
S Deserialisieren mit anderem Klassennamen Allgemeine Java-Themen 5
G Direkt in ein Objekt deserialisieren Allgemeine Java-Themen 5
B Nach Deserialisieren: Elemente des JFrames ohne Funktion Allgemeine Java-Themen 5
G StreamCorruptedException Allgemeine Java-Themen 3

Ähnliche Java Themen

Neue Themen


Oben